基于现代浏览器,使用MJPEG over HTTP实现简单视讯网络广播

作者:V君 发布于:2015-9-21 9:39 Monday 分类:挖坑经验

TL;DR: 

实现一个数据源来提供一系列帧图像数据(本例jpeg), 随便找个请求处理程序贴上以下代码,

用现代浏览器(Chrome/FF)访问即可

const string boundary = "frame";

 

Response.Buffer = false;

Response.BufferOutput = false;

Response.ContentType = "multipart/x-mixed-replace; boundary=" + boundary;

 

while (true)

{

    byte[] buf;

    while (null == (buf = VideoQueue.Pull()))

    {

        Thread.Sleep(100);

    }

 

    var output = Response.OutputStream;

    output.WriteAscii("--" + boundary);

    output.WriteAscii("\r\n");

    output.WriteAscii("Content-Type: image/jpeg");

    output.WriteAscii("\r\n");

    output.WriteAscii("Content-Length: " + buf.Length);

    output.WriteAscii("\r\n");

    output.WriteAscii("\r\n");

    output.Write(buf, 0, buf.Length);

    output.WriteAscii("\r\n");

}

 

扯一扯:

要在浏览器实时查看摄像头画面,

然而摄像头在NAT背后, 只能搭一个平台来转发数据.

用AForge的DirectShow封装取得每一帧画面, 推到平台上.

那么剩下的就是如何在浏览器呈现了.

定时轮询? 感觉图样, 有没有以视频方式呈现? H5的Video标签好像可以用的样子.

然而并没有找到从一堆图像生成视频流的方式,AForge只能写文件,

用了各种关键字最后找到 MJPEG 方式,

参照 CodeProject 上面的一个例子写了这个长连接的请求处理程序.

只能在浏览器地址栏直接打或者给img标签的src, video标签并不支持.

你可以从多个浏览器访问视频画面, 就像广播一样 乂目

写了个屏幕录像并以 MJPEG 广播的 Demo, 泥可以从这里获取

标签: 软件开发 C# 多媒体 MJPEG

引用地址:

发表评论:

Powered by emlog 去你妹的备案 sitemap