ffserver和ffmpeg配合完成的即時資料流媒體服務

來源:互聯網
上載者:User
ffmpeg和ffserver配合使用可以實現即時的流媒體服務,這裡即時的資料來自網路攝影機,如果考慮到應用程式和網路狀況,這裡用戶端看到的畫面還是會落後與網路攝影機本地擷取的畫面,最糟糕時甚至看不到畫面(扯遠了),這裡我們關注的是ffmpeg和ffserver之間是如何配合工作的,瞭解了他們之間的關係,對個別問題也能有的放矢。ffserver先於ffmpeg啟動,它在啟動的時候需要加參數-f指定其設定檔,設定檔裡包含有向用戶端傳送的流的配置(如編碼方式,幀率,採樣率……),也有對feed1.ffm的配置,還有其他的一些配置。feed1.ffm是什嗎?這裡可以理解為一個緩衝檔案,下面會提到它是如何被用到,ffserver啟動後,feed1.ffm就會被建立,這時如果你開啟feed1.ffm看看,會發現feed1.ffm開始的部分已經寫入了內容,你可以找到關鍵字ffm以及向用戶端傳送流的配置資訊,在feed1.ffm做緩衝用的時候,這些資訊是不會被覆蓋掉的,就把它們理解為feed1.ffm檔案的頭吧。ffserver啟動後,ffmpeg啟動,它啟動時加的一個關鍵參數就是“http://ip:8090/feed1.ffm”,其中ip是運行ffserver主機的ip,如果ffmpeg和ffserver都在同一系統中啟動並執行話,用localhost也行。ffmpeg啟動後會與ffserver建立一個串連(短暫的串連),通過這第一次的串連,ffmpeg從ffserver那裡擷取了向用戶端輸出資料流的配置,並把這些配置作為自己編碼輸出的配置,然後ffmpeg斷開了這次串連,再次與ffserver建立串連(長久的串連),利用這個串連ffmpeg會把編碼後的資料發送給ffserver。如果你觀察ffserver端的輸出就會發現這段時間會出現兩次HTTP的200,這就是兩次串連的過程。ffmpeg從網路攝影機擷取資料後,按照輸出資料流的編碼方式編碼,然後發送給ffserver,ffserver收到ffmpeg的資料後,如果網路上沒有播放的請求,就把資料寫入feed1.ffm中緩衝,寫入時把資料加上些頭資訊然後分塊,每塊4096B(每塊也有結構),當feed1.ffm的大小到了ffserver.conf中規定的大小後,就會從檔案開始(跳過頭)寫入,覆蓋舊的資料。直到網路上有播放的請求,ffserver從feed1.ffm中讀取資料,發送給用戶端。上面粗略的描述在即時資料流媒體服務時ffmpeg和ffserver的關係,這些看法都是在閱讀較早FFmpeg代碼(very old)時得出的,現在不知這個架構是否改變,兄弟我把磚扔出,希望大家用玉來砸。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.