我使用以下两个命令从Raspberry Pi流式传输视频
RAPI
raspivid -t 999999 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=$RA-IP-ADDR port=5000
Linux Box
gst-launch-1.0 -v tcpclientsrc host=$RA-IP-ADDR port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
但它是什么样的流?我可以用OpenCV阅读吗?或转换为avconv|ffmpeg
nc $RA-IP-ADDR 5000 | avconv
?或者观看VLC?
答案 0 :(得分:3)
该流似乎是封装在RTP流中的GDP流,后者似乎是GStreamer专有的。您可能能够从管道中删除gdppay和gdpdepay元素并使用其他RTP工具(那里有很多;我相信VLC直接支持RTP),但您也可以使用GStreamer管道来管理已卸载的GDP流(在这种情况下,它包含的H.264流)从RPi到Linux Box端的文件,如下所示:
gst-launch-1.0 tcpclientsrc host=$RA-IP-ADDR port=5000 ! gdpdepay ! rtph264depay ! filesink location=$FILENAME
或者,将它传递给stdout:
gst-launch-1.0 tcpclientsrc host=$RA-IP-ADDR port=5000 ! gdpdepay ! rtph264depay ! fdsink
这些中的一个或另一个应该让您以流级别操作H.264视频。
如果你有合适的插件,GStreamer 1.0也可以或多或少直接与libav交互。使用gst-inspect-1.0 libav
查看支持的元素。管道中已有的avdec_h264
元素是这些libav元素之一。