
저는 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
동일한 결과, 지연이 거의 없습니다(어떤 이유로 웹캠이 h264를 출력하도록 하려면 첫 번째 -vcodec이 필요함).
그러나 둘 다 스트리밍하면
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초까지 증가하고 오디오와 비디오가 동기화되지 않습니다. 이유를 아는 사람 있나요?
RTP 대신 UDP와 TCP를 시도했지만 지연이 발생합니다.언제나오디오/비디오만 사용하는 경우에도 높습니다.
어떤 제안이라도 대단히 감사하겠습니다.
PS 클라이언트 측(MacOS)에서 다음과 같이 수신하고 있습니다.
ffplay -protocol_whitelist file,rtp,udp -i file.sdp