我将图像从远程视频源以大约每秒5帧的速度发送到我的数据库作为JPEG图像.我试图找出如何将这些图像转换为视频格式,以便我可以将实时视频源流式传输到Silverlight.
创建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,媒体播放器 - 没什么.