關于ffmpeg+ffserver搭建流媒體伺服器的文章網上有很多,視訊編碼基本上都是軟編碼來實作的。NanoPi-NEO的SoC裡內建了Cedrus 視訊硬體編碼器,利用Cedrus對USB攝像頭的資料實作硬體H264編碼,可以降低CPU的占用率并大大提高編碼速度。
具體步驟如下:
1. 在目前目錄下(/home/fa)編制一個ffserver配置檔案myffserver.conf檔案,内容如下:
#-----------------------------myffserver.conf ------------------------
HTTPPort 8099 #綁定端口号
HTTPBindAddress 0.0.0.0 #綁定ip
MaxHTTPConnections 1000 #最大HTTP連接配接數
MaxClients 1000 #最大用戶端連接配接數
MaxBandwidth 50000 #最大帶寬
CustomLog - #日志檔案,“-”為直接列印
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 20M
ACL allow 127.0.0.1
</Feed>
<Stream webcam.flv>
Feed feed1.ffm
Format flv
VideoFrameRate 15
VideoBufferSize 1000
VideoSize 480x320
VideoBitRate 30000
VideoGopSize 12
AVOptionVideo flags +global_header
NoAudio
</Stream>
以上參數可做調整,注意VideoSize和VideoBufferSize等會有關聯。
2. 在/home/fa/下建立一個管道檔案: mkfifo -m 755 vfifo
3. 編輯一個webcam.sh腳本,内容如下:
ffserver -f /home/fa/myffserver.conf & ffmpeg -i /home/fa/vfifo "http://127.0.0.1:8099/feed1.ffm" &
ffmpeg -re -f v4l2 -i /dev/video0 -pix_fmt nv12 -c:v cedrus264 -an -f flv /home/fa/vfifo
4. 插入usb攝像頭,運作webcam.sh 即可開啟ffserver的攝像頭流服務。在VLC或ffplay等流播放軟體
中輸入 http://IP:8099/webcam.flv可以播放監控畫面.
5. 注意:1。 用vlc播放有10s左右延時. 據稱用ffplay觀看時延會小很多。
2。 啟動webcam.sh後要等一會,直到vfifio緩沖結束,feed開始的時候再連接配接網絡播放器,不然程式會退出。
