USB攝像頭與網絡攝像頭相比,可選擇范圍廣、種類多、成本低,但是實際使用時需要通過rtsp流來訪問,起到直播的效果,因此在攝像頭采集終端上構建rtsp流媒體服務器,將USB攝像頭數據轉化為rtsp,可以多個客戶端訪問。
ffserver
關鍵概念
- ffserver,負責響應客戶端的流媒體請求,把流媒體數據發送給客戶端。
- ffserver.conf,ffserver啟動時的配置文件,在這個文件中主要是對網絡協議,緩存文件feed1.ffm和要發送的流媒體文件的格式參數做具體的設定。
- feed1.ffm,可以看成是一個流媒體數據的緩存文件,ffserver啟動后會自動生成。ffmpeg把轉碼好的數據發送給ffserver,如果沒有客戶端連接請求,ffserver把數據緩存到該文件中。
- ffmpeg,負責媒體文件的轉碼工作,把你服務器上的源媒體文件轉換成要發送出去的流媒體文件。
大致流程為:通過ffmpeg將usb攝像頭數據推送到ffserver服務器,終端設備通過rtsp地址訪問,達到遠程訪問的效果。
安裝與配置
sudo apt install ffmpeg libx264-dev
在終端中打開配置文件:
sudo gedit /etc/ffserver.conf
然后修改為以下內容:
HTTPPort 8090 #綁定端口號
HTTPBindAddress 0.0.0.0 #綁定IP
MaxHTTPConnections 2000 #最大HTTP連接數
MaxClients 1000 #最大客戶端連接數
MaxBandwidth 1000 #最大帶寬
CustomLog - #日志文件,- 為直接打印
<Feed feed1.ffm> #feed:每一個輸入都建立一個feed
File /tmp/feed1.ffm #feed緩存文件位置和名稱
FileMaxSize 10M #緩存文件最大值
ACL allow 127.0.0.1 #允許寫入feed的IP
ACL allow 192.168.0.0 192.168.255.255 #允許寫入feed的IP范圍
</Feed>
RTSPPort 8554 #rtsp端口號
RTSPBindAddress 0.0.0.0 #rtsp IP地址
<Stream live1.h264> #
Format rtp #視頻流的格式
Feed feed1.ffm #視頻流的種子來源
VideoCodec libx264 #
VideoFrameRate 24 #視頻幀率
VideoBitRate 128 #視頻比特率
VideoBufferSize 100 #視頻緩沖區大小
VideoSize 640x480 #視頻幀大小
VideoQMin 1 #
VideoQMax 31 #
NoAudio #無音頻
AVPresetVideo default
AVPresetVideo baseline
AVOptionVideo flags +global_header
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Stream stat.html>
Format status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
關於ffserver.conf的具體介紹,可參考官方給的配置文件說明,如果有多個USB攝像頭,參考feed1的寫法,再寫一個緩存文件即可。
啟動服務與轉發流
啟動ffserver服務終端直接運行:
ffserver
轉發rtsp流
ffmpeg -f v4l2 -i /dev/video1 -s 640x480 -r 24 -vcodec libx264 -an http://127.0.0.1:8090/feed1.ffm
注意:其中/dev/video1表示USB攝像頭對應的名稱,要根據自己的設備情況對應更改。
客戶端讀取
在另外一台終端設備上,如windows的電腦上,用VLC軟件,打開網絡串流,輸入如下rtsp地址,即可打開攝像頭:
rtsp://192.168.xx.xx:8554/live1.h264
vlc
安裝
sudo apt-get install vlc
轉流
cvlc -vvv v4l2:///dev/video1 --sout '#transcode{vcodec=h264,vb=800,acodec=mp4a}:rtp{sdp=rtsp://:8554/live.ts}' -I dummy
其中:
v4l2:// - Video4Linux is the interface to webcams on Linux
/dev/video1 - device number assigned to webcam by Linux
vcodec=h264 video codec
vb=800 - 800 kb/s video bit rate
acodec=mp4a
sdp=rtsp://:8554/ - URL/port advertised by RTSP
客戶端讀取
同樣的,可在windows電腦上的VLC軟件中,輸入如下rtsp地址打開攝像頭,注意將IP地址改為服務器的地址
rtsp://192.168.xx.xx:8554/live.ts