当使用Pi和PI-Cam作为监控摄像头时,有成千上万的论坛和话题讨论如何摆脱5秒钟的延迟。许多教程展示了如何使用vlc通过RTP协议对图像进行编码和流传输,这会导致〜5秒的延迟。
据我说,原因是raspivid正在将流编码为H264,而VLC必须再次对其进行解码,然后将其重新编码为任何RTP。命令行如下所示:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
第一部分告诉raspivid将视频流传输到标准输出:
raspivid -w 640 -h 480 -o - -t 0
管道后面的部分告诉VLC进行拾取,并使用h264对其进行解码:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
这种多路复用和多路复用是相当多的资源!
我在github上找到了raspicam的来源,并且我认为可以在encoder_buffer_callback方法中执行某些操作(当前在848行)以跳过编码。但是我不擅长c语言,也不熟悉视频编码,因此我不知道从哪里开始。
在Github上,我可以看到330个fork,但是它们似乎并不是专门针对raspicam的(而是针对整个userland项目)。我迷失了寻找去掉编码或实现更简单的东西(例如mjpeg)的fork的想法。
具备c和视频编解码器知识的人可以帮助我和其他专长的用户摆脱延迟吗?解决方案可能已经在其中一个分支中了,但是我花了数小时没有任何运气来寻找它。
ps我不是在寻找浏览器解决方案,但我最终希望将其流式传输到Synology,最好使用mjpeg流式传输(但不是通过网页,而是大多数商用ip-cam内置的标准mjpeg流)。第一步是摆脱h264的束缚。