ffmpeg+ffserver搭建流媒體伺服器

來源:互聯網
上載者:User

標籤:設定檔   伺服器   流媒體   網路   用戶端   

ffmpeg和ffserver配合使用可以實現即時的流媒體服務。


一、理解

裡邊主要有如下四個東西,搞清楚他們之間的關係就差不多明白了。

1. ffmpeg


2. ffserver


3. ffserver.conf


4. feed1.ffm


 

1. ffmpeg,負責媒體檔案的transcode工作,把你伺服器上的源媒體檔案轉換成要發送出去的流媒體檔案。


2. ffserver,負責響應用戶端的流媒體請求,把流媒體資料發送給用戶端。


3. ffserver.conf,ffserver啟動時的設定檔,在這個檔案中主要是對網路通訊協定,快取檔案feed1.ffm(見下述)和要發送的流媒體檔案的格式參數做具體的設定。


4. feed1.ffm,可以看成是一個流媒體資料的快取檔案,ffmpeg把轉碼好的資料發送給ffserver,如果沒有用戶端串連請求,ffserver把資料緩衝到該檔案中。



二、http的建立流程

1. 配置ffserver.conf檔案(初次接觸可以參考ffmpeg源碼中的doc/ffserver.conf,裡邊有詳細的注釋)

如下寫一個樣本

Port 10535

RTSPPort 5454

BindAddress 0.0.0.0、

MaxHTTPConnections 2000

MaxClients 1000

MaxBandwidth 1000

CustomLog -

NoDaemon


#即時資料流資料配置(參考源碼ffmpeg/test/下的ffserver.conf)

<Feed feed1.ffm>

File /tmp/feed1.ffm

FileMaxSize 1M

ACL allow 127.0.0.1

</Feed>


<Stream test.avi>

Feed feed1.ffm

Format avi

#

BitExact

DctFastint

IdctSimple

VideoFrameRate 10

VideoSize 352x288

VideoBitRate 100

VideoGopSize 30

NoAudio


PreRoll 10

StartSendOnKey

MaxTime 100


</Stream>


#已經存在的檔案而非即時資料流

 

<Stream test.flv>

File "/project/apps/ffserver/test.flv"

Format flv

</Stream>



2、如何?播放

(1)即時資料流用http傳輸

如果傳輸硬碟上的檔案,則:

ffserver -f myfile/ffmpeg0.8.9/ffserver.conf & ffmpeg -i inputfile(輸入檔案) http://localhost:10535/feed1.ffm

如何傳輸網路攝影機捕獲的即時資料流,則:

ffserver -f myfile/ffmpeg0.8.9/ffserver.conf & ffmpeg -f video4linux2 -framerate 30 -i /dev/video0 http://127.0.0.1:8090/feed1.ffm


啟動ffserver和ffmpeg。ffserver先於ffmpeg啟動,它在啟動的時候需要加參數-f指定其設定檔。ffserver啟動後,feed1.ffm就會被建立,這時如果你開啟feed1.ffm看看,會發現feed1.ffm開始的部分已經寫入了內 容,你可以找到關鍵字ffm以及向用戶端傳送流的配置資訊,在feed1.ffm做緩衝用的時候,這些資訊是不會被覆蓋掉的,就把它們理解為 feed1.ffm檔案的頭吧。


ffserver啟動後,ffmpeg啟動,它啟動時加的一個關鍵參數就是“http://ip:10535/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中讀取資料,發送給用戶端。


(2)本地檔案用http傳輸

ffserver -f /etc/ffserver.conf

用命令啟動ffserver,然後用ffplay http://ip:port/test.flv,或者在vlc中輸入以上網址也可實現播放。


(3)本地檔案用rtsp傳輸

ffserver -f /etc/ffserver.conf

用命令啟動ffserver,然後用ffplay rtsp://ip:port/rtsp.mpg,或者在vlc中輸入以上網址也可實現播放。

備忘:在做測試的時候,用rtsp不能傳輸flv檔案。


本文出自 “陳勝綱的部落格” 部落格,請務必保留此出處http://chenshengang.blog.51cto.com/4399161/1653493

ffmpeg+ffserver搭建流媒體伺服器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.