C# 谁使用Fluent HTTP从uwp中的ip摄像头获取mjpeg流

C# 谁使用Fluent HTTP从uwp中的ip摄像头获取mjpeg流,c#,uwp,mjpeg,flurl,C#,Uwp,Mjpeg,Flurl,首先,我是一个新的http和mjpeg流,所以很可能我只有一个理解问题。也许有人可以帮我 我在从我的ip摄像机获取mjpeg流时遇到问题。调用流的链接在浏览器中运行良好,我可以观看直播流。 (例如,其中xx.xx和用户、密码是占位符) 如果我尝试在uwp应用程序中连接到ip摄像头,则不会收到任何流返回。我尝试了这么多的解决方案,但没有一个仍然适合我。(以下是一些尝试性的解决方案: MJPEG处理器 OZEKI照相机SDK IP摄像机查看器 Onvif摄像机查看器) 我在这里也读了很多有用的文章

首先,我是一个新的http和mjpeg流,所以很可能我只有一个理解问题。也许有人可以帮我

我在从我的ip摄像机获取mjpeg流时遇到问题。调用流的链接在浏览器中运行良好,我可以观看直播流。 (例如,其中xx.xx和用户、密码是占位符)

如果我尝试在uwp应用程序中连接到ip摄像头,则不会收到任何流返回。我尝试了这么多的解决方案,但没有一个仍然适合我。(以下是一些尝试性的解决方案:

  • MJPEG处理器
  • OZEKI照相机SDK
  • IP摄像机查看器
  • Onvif摄像机查看器) 我在这里也读了很多有用的文章,但现在有一篇找到了正确的答案
我的源代码如下所示:

        var newParams = new[]
        {
            new KeyValuePair<string, string>("-chn", "11")
        };

        var baseUrl = new Url("http://192.168.xx.xx:8081");
        Debug.WriteLine(baseUrl);

        using (var fc = new FlurlClient(baseUrl).EnableCookies())
        {
            // login on page
            var loginResponse = await baseUrl
                                        .WithClient(fc)
                                        .PostUrlEncodedAsync(new
                                        {
                                            usr = "user",
                                            pwd = "password"
                                        });

            //StatusCode 200
            if (loginResponse.IsSuccessStatusCode)
            {
                try
                {
                    // get mjepg stream from page
                    var streamResult = await baseUrl
                                                .AppendPathSegments(new string[] { "cgi-bin", "hi3510", "mjpegstream.cgi" })
                                                .SetQueryParams(newParams)
                                                .WithClient(fc)
                                                .GetStreamAsync();

                    var memNewStream = new MemoryStream();
                    await streamResult.CopyToAsync(memNewStream);
                    memNewStream.Position = 0;
                    mediaElement.SetSource(memNewStream.AsRandomAccessStream(), "multipart/alternative");
                }
                catch (FlurlHttpException ex)
                {
                    Debug.WriteLine(ex);
                }

            }
        }
这就是你想要的吗?

401(未筛选)代码本身就说明了问题:你的身份验证有问题:

  • 问题可能是IP cam无法通过凭据授权您 在URL中

  • (或者)您可能在凭证的其他地方有打字错误

  • (或)对于不使用浏览器的远程连接,IP cam可能需要使用其他身份验证基础。例如,一些浏览器通过HTTP头发送此消息

  • 你看过IP通信的数据表了吗?每次尝试连接时都可能需要身份验证,这可能需要在流打开期间发送凭据:

  • 我刚刚检查过,他们指定了以下凭据示例:

::快照(720p/1280x720像素)

请注意,“usr”或“pwd”前面没有“-”。

401(未加密)代码本身就说明了问题:您的身份验证有问题:

  • 问题可能是IP cam无法通过凭据授权您 在URL中

  • (或者)您可能在凭证的其他地方有打字错误

  • (或)对于不使用浏览器的远程连接,IP cam可能需要使用其他身份验证基础。例如,一些浏览器通过HTTP头发送此消息

  • 你看过IP通信的数据表了吗?每次尝试连接时都可能需要身份验证,这可能需要在流打开期间发送凭据:

  • 我刚刚检查过,他们指定了以下凭据示例:

::快照(720p/1280x720像素)



请注意,“usr”或“pwd”前面没有“-”。

谢谢您的回答。它解决了问题吗?没有,该注释中的return命令有问题;-)谢谢你的回答。是的,我知道这一点,但我不能再进一步的错误。我使用相机上的docu来获取这些信息。您的示例不起作用,因为
任务没有methode.AppendPathSegments
。因此,在上面的示例中,我将操作分为两个步骤。但我也认为我需要一次“第二次”验证,或者一次调用,以及到cgi目的地的正确路径。但是我是怎么做到的呢?顺便说一句,你有两个不同的用户/密码组合->这是一个目的还是一个错误?我相信应该只有一个。这只是一个错误!谢谢您的回答。它解决了问题吗?没有,该评论中的return命令有问题;-)谢谢你的回答。是的,我知道这一点,但我不能再进一步的错误。我使用相机上的docu来获取这些信息。您的示例不起作用,因为
任务没有methode.AppendPathSegments
。因此,在上面的示例中,我将操作分为两个步骤。但我也认为我需要一次“第二次”验证,或者一次调用,以及到cgi目的地的正确路径。但是我是怎么做到的呢?顺便说一句,你有两个不同的用户/密码组合->这是一个目的还是一个错误?我相信应该只有一个。这只是一个错误!请在问题描述中添加测试?您正在向IP cam连接2x。一开始还可以,但第二次失败。请使用完全相同的URL从浏览器中输入URL和结果。浏览器在访问网站时需要什么吗?在哪个请求上有日志/登录窗口?在
Url上http://192.168.xx.xx:8081
浏览器需要登录。在
Url上也是如此http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11
没有使用
&-usr=user&-pwd=password登录
1您应该稍微熟悉一下HTTP。有几个选项可以进行身份验证,这几乎不取决于服务器如何允许您进行身份验证。其中一个选项是发送HTTP请求(例如:GET HTTP/1,1 index.php),在HTTP头中包含Auth选项(顺便说一句,这是第一次成功登录)。但是,您的HTTP服务器(IP摄像头)似乎不允许通过URL登录。您应该尝试找到一种方法,如何将身份验证凭据添加到第二种类型(流)的HTTP请求中。明白了吗?是的,我已经这么想了。好的,我将深入研究http。实际上,您不需要更好地了解http,但可以尝试在Flurl中查找任何方法,该方法允许您将凭据添加到标头并返回与相同的类型,例如
AppendPathSegments
)请在问题描述中添加测试?您正在向IP cam连接2x。一开始还可以,但第二次失败。请使用完全相同的URL从浏览器中输入URL和结果。浏览器在访问网站时需要什么吗?在哪个请求上有日志/登录窗口?在
Url上http://192.168.xx.xx:8081
浏览器需要登录。在
Url上也是如此http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11
没有使用
&-usr=user&-pwd=password登录
1您应该稍微熟悉一下HTTP。有几个选项可以进行身份验证,这几乎不取决于服务器如何允许您进行身份验证。其中一个选项是发送HTTP请求(例如:GET HTTP/1,1 index.php),在HTTP头中包含Auth选项(即
Url http://192.168.xx.xx:8081/cgi-bin/hi3510/mjpegstream.cgi?-chn=11