我有圖像從遠程視頻源發送到我的數據庫,每秒約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