簡體   English   中英

在c#中創建MJPEG視頻流

[英]Creating an MJPEG video stream in c#

我將圖像從遠程視頻源以大約每秒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,媒體播放器 - 沒什么。

我很久以前就做過MJPEG(3 - 4年前),我正在試圖記住細節,但我根本無法做到。 但是,如果它可能的話,我會建議找到某種網站來傳播MJPEG內容並啟動wireshark / ethereal,看看你通過網絡獲得了什么。 我的猜測是你錯過了一些必需的HTTP標題,firefox對此更加寬容。

如果您無法通過互聯網找到MJPEG示例流,那么很多網絡攝像頭都會有一個軟件可以為您提供MJPEG流。 我使用的應用程序是一個用於多個安全攝像頭的控制台,所以我知道這是所有類型的凸輪的常見實現(如果它們支持Web界面)。

我遠不是MJPEG流媒體的專家,但是看看sourcefourge上的mjpg-streamer的來源,我認為你應該分別發送每個幀,在每個幀之前和之后寫入邊界。 您當然不應該在結束邊界中寫入內容類型。

首先,將mjpeg幀寫入單獨的文件。 然后,您應該能夠在Phototshop中打開它們(這將獨立驗證您正在正確解析流)。 如果失敗,請注意您的圖像數據中嵌入了HTTP標頭。

您是否看過網上存在的各種網絡攝像頭設置? 他們中的很多人都做了某種低分辨率更新而沒有閃爍。 您應該能夠對這些類型的站點進行反向工程,以獲得有關問題的其他線索。

有些網站會創建一個GIF動畫,也許這是一個選項,以便用戶可以看到過去一分鍾左右。

關於您的編輯:Firefox和Safari支持MJPEG。 但是其他應用程序不會像Explorer或Silverlight那樣取決於你正在做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM