arr*_*.io 7 c# asp.net httpwebrequest mjpeg httpwebresponse
我有一个ASP.NET应用程序,我需要从安全摄像头显示视频源.视频Feed的内容类型为'multipart/x-mixed-replace; boundary = - myboundary'与边界之间的图像数据.我需要帮助将数据流传递到我的页面,以便我拥有的客户端插件可以像使用直接浏览到摄像头的Web界面一样使用流.以下代码不起作用:
//Get response data
byte[] data = HtmlParser.GetByteArrayFromStream(response.GetResponseStream());
if (data != null)
{
HttpContext.Current.Response.OutputStream.Write(data, 0, data.Length);
}
return;
Run Code Online (Sandbox Code Playgroud)
neu*_*uro 13
好吧,如果您希望您的客户端看到mjpeg流,您需要发送整个http响应.像浏览器这样的HTTP客户端或像VLC这样的媒体播放器需要一个mjpeg流,如下所示:
HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=myboundary
--myboundary
Content-Type: image/jpeg
Content-length: 12345
[image 1 encoded jpeg data]
--myboundary
Content-Type: image/jpeg
Content-length: 45678
[image 2 encoded jpeg data]
...
Run Code Online (Sandbox Code Playgroud)
注意:正如Ergousha在答案中所说,在Content-length字段后面必须有一个空行.
顺便说一句,为什么不直接将客户端重定向到mjpeg流?
例如,您可以使用http://ipcam/mjpg/video.mjpg AXIS IP摄像机.
如果您只需要通过HTTP获取图像,则必须设置正确的标头和MIME内容类型图像/ jpeg.要解码图像,您必须获取字节数据,您将获得jpeg编码.然后你将不得不解码jpeg以获得特定格式的图像(我想是yuv420p).我已经检查了我的ip camera,我认为它的流不是base64编码的.
准确地满足您的需求,我会尽力帮助您.
MY2C
编辑:
好吧,我想你做的事情如下:
client : connect to proxy,
get example.com/camera1.mjpg,
while not the end
recv
yourproxy : wait connection
connect to camera,
get 10.0.0.123/camera1.mjpg
while not the end
recv buffer
copy buffer
send buffer to client
Run Code Online (Sandbox Code Playgroud)
那就是说你必须向你的客户发送正确的标题.为了确保使用像wireshark这样的工具来监视数据包并确保在客户端发出HTTP GET之后你发送给他正确的MJPEG流(就像我在帖子开头描述的那个......)
M2C
小智 6
很好地解释了 mjpeg 流的样子。我想添加一个提示;在实际数据之前总是有 2 个换行符。如果你把它做成一行,它就不起作用。
string header =
"--myboundary\r\n" +
"Content-Type:image/jpeg\r\n" +
"Content-Length:" + length.ToString() + "\r\n\r\n";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18770 次 |
| 最近记录: |