我有图像从远程视频源发送到我的数据库,每秒约5帧作为JPEG图像。我想弄清楚如何将这些图像转换为视频格式,以便我可以将实时视频源传输到Silverlight。在C#中创建一个MJPEG视频流
创建MJPEG流似乎有意义,但我遇到了一些问题。首先,我试图通过HTTP请求进行流式处理,所以我没有与套接字达成协议,但也许这会破坏我的代码。
如果我尝试冲浪我流从QT,我收到了视频错误,媒体播放器显示第一帧图像和Silverlight崩溃:)
这里是流的代码 - 因为我用这种方式可以将内容类型只有一次我知道这并不理想,并且可能是根源。所有图像都通过LINQ2SQL对象进入。
我已经尝试在Silverlight中更新图像控件的图像源,但闪烁是不可接受的。如果Silverlight不支持MJPEG,那么即使继续,也没有任何意义,但看起来确实如此。我确实可以访问h.264帧,但通过MP4看起来更复杂。
Response.Clear();
Response.ContentType = "multipart/x-mixed-replace; boundary=--myboundary";
ASCIIEncoding ae = new ASCIIEncoding();
HCData data = new HCData();
var videos = (from v in data.Videos
select v).Take(50); // sample the first 50 frames
foreach (Video frame in videos)
{
byte[] boundary = ae.GetBytes("\r\n--myboundary\r\nContent-Type: image/jpeg\r\nContent-Length:" + frame.VideoData.ToArray().Length + "\r\n\r\n");
var mem = new MemoryStream(boundary);
mem.WriteTo(Response.OutputStream);
mem = new MemoryStream(frame.VideoData.ToArray());
mem.WriteTo(Response.OutputStream);
Response.Flush();
Thread.Sleep(200);
}
谢谢!
编辑:我有流在Firefox中工作,所以如果我冲浪到页面,我看到视频!但没有别的东西接受这种格式。不是IE,SL,媒体播放器 - 什么也没有。
你有没有得到这个解决? – 2010-06-16 19:43:16
不使用这种方法 - 我只是最终在浏览器中使用JS进行背景图像加载,然后以尽可能快的速度切换图像。工作好的。 – typemismatch 2010-06-20 03:47:21