C# 谁使用Fluent HTTP从uwp中的ip摄像头获取mjpeg流
首先,我是一个新的http和mjpeg流,所以很可能我只有一个理解问题。也许有人可以帮我 我在从我的ip摄像机获取mjpeg流时遇到问题。调用流的链接在浏览器中运行良好,我可以观看直播流。 (例如,其中xx.xx和用户、密码是占位符) 如果我尝试在uwp应用程序中连接到ip摄像头,则不会收到任何流返回。我尝试了这么多的解决方案,但没有一个仍然适合我。(以下是一些尝试性的解决方案: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摄像机查看器) 我在这里也读了很多有用的文章
- 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通信的数据表了吗?每次尝试连接时都可能需要身份验证,这可能需要在流打开期间发送凭据:
- 我刚刚检查过,他们指定了以下凭据示例:
- 问题可能是IP cam无法通过凭据授权您 在URL中
- (或者)您可能在凭证的其他地方有打字错误
- (或)对于不使用浏览器的远程连接,IP cam可能需要使用其他身份验证基础。例如,一些浏览器通过HTTP头发送此消息
- 你看过IP通信的数据表了吗?每次尝试连接时都可能需要身份验证,这可能需要在流打开期间发送凭据:
- 我刚刚检查过,他们指定了以下凭据示例:
请注意,“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