
我一直在嘗試使用 Raspberry Pi Zero 和 Logitech C920 網路攝影機設定嬰兒監視器。它確實可以與 VLC (cvlc) 配合使用,但它滯後太多,並且隨著時間的推移變得更糟。
所以我正在使用 ffmpeg,並且得到了一些更好的結果。這就是我到目前為止所做的。
首先,我將網路攝影機設定為原生輸出 h264 1080p(Pi Zero W 無法進行任何轉碼)。
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
現在,如果我僅使用串流傳輸音頻
ffmpeg \
-f alsa \
-i hw:1,0 \
-vn \
-flags +global_header \
-acodec aac \
-ac 1 \
-ar 16000 \
-ab 16k \
-f rtp rtp://192.168.0.10:5002 > audio.sdp
它效果很好,延遲約為 1 秒(絕對可以接受)。
如果我僅使用串流媒體視頻
ffmpeg \
-f v4l2 \
-vcodec h264 \
-i /dev/video0 \
-an \
-vcodec copy \
-pix_fmt yuv420p \
-r 30 \
-b:v 512k \
-flags +global_header \
-f rtp rtp://192.168.0.10:5000 > video.sdp
結果相同,延遲很小(由於某種原因,需要第一個 -vcodec 來強製網路攝影機輸出 h264)。
但是,當我使用兩者進行串流時
ffmpeg \
-f v4l2 \
-vcodec h264 \
-i /dev/video0 \
-f alsa \
-i hw:1,0 \
-an \
-preset ultrafast \
-tune zerolatency \
-vcodec copy \
-pix_fmt yuv420p \
-r 30 \
-b:v 512k \
-flags +global_header \
-f rtp rtp://192.168.0.10:5000 \
-vn \
-flags +global_header \
-acodec aac \
-ac 1 \
-ar 16000 \
-ab 16k \
-f rtp rtp://192.168.0.10:5002 > both.sdp
延遲上升至約 10 秒,且音訊和視訊不同步。有人知道為什麼嗎?
我嘗試過 UDP 和 TCP 而不是 RTP,但滯後是總是高,即使只有音訊/視訊。
任何建議都非常感激。
PS 在客戶端(MacOS)我正在接收
ffplay -protocol_whitelist file,rtp,udp -i file.sdp