用ffserver實現rtsp服務器的實驗筆記


參考:https://blog.csdn.net/hoyjam1/article/details/51281679

建議配置文件:/etc/config/ffserver.conf

 

Port 10535
RTSPPort 5454
BindAddress 0.0.0.0、
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon
 
#實時流數據配置(參考源碼ffmpeg/test/下的ffserver.conf)
File /tmp/feed1.ffm
FileMaxSize 1M
ACL allow 127.0.0.1
 
Feed feed1.ffm
Format avi
#
BitExact
DctFastint
IdctSimple
VideoFrameRate 10
VideoSize 352x288
VideoBitRate 100
VideoGopSize 30
NoAudio
 
PreRoll 10
StartSendOnKey
MaxTime 100

 

 

2、如何實現播放
(1)實時流用http傳輸
如果傳輸硬盤上的文件,則:
ffserver -f /etc/ffserver.conf & ffmpeg -i inputfile http://localhost:10535/feed1.ffm
如何傳輸攝像頭捕獲的實時流,則:
ffserver -f /etc/ffserver.conf & ffmpeg -fvideo4linux2 -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,然后用ffplayhttp://ip:port/test.flv,或者在vlc中輸入以上網址也可實現播放。
 
(3)本地文件用rtsp傳輸
ffserver -f /etc/ffserver.conf
用命令啟動ffserver,然后用ffplayrtsp://ip:port/rtsp.mpg,或者在vlc中輸入以上網址也可實現播放。

備注:在做測試的時候,用rtsp不能傳輸flv文件

 

https://blog.csdn.net/hoyjam1/article/details/51281679


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM