Raspberry Pi上的GStreamer全高清视频RTP流

时间:2017-06-09 10:14:37

标签: video raspberry-pi gstreamer rtp

我正在尝试使用GStreamer构建视频管道。最后它应该是全双工全高清视频会议解决方案。由于Raspberry Pi 3无法同时对视频流进行编码和解码,因此我使用Logitech C920对视频进行编码。所以我的RPi只需要编码和解码音频,并解码H.264视频。我从源代码(1.13.0.1)构建GStreamer,因为来自raspbian存储库的1.4.4存在G.722编码问题。像gst-omx(RaspiVideo),libsrtp(加密),libwebrtc(echocanceling)这样的库(repo到旧的0.1 - 所以手动下载0.3)也是如此。所以我确实有omxh264dec - 但我无法找到一个视频接收器来顺利播放1080p视频。所以我试图管道(用一个命名的管道)h.264流做hello_video或omxplayer,只要我留在本地就可以正常工作。一旦我尝试通过RTP流式传输,hello_video就不会显示任何内容。

工作管道: gst-launch-1.0 filesrc location = / opt / vc / src / hello_pi / hello_video / test.h264! filesink location = / home / pi / test& /opt/vc/src/hello_pi/hello_video/hello_video.bin / home / pi / test 即使是来自相机的流: gst-launch-1.0 v4l2src! '视频/ X-H264,宽度= 1920,高度= 1080,帧率= 30/1和#39; ! filesink location = / home / pi / test& /opt/vc/src/hello_pi/hello_video/hello_video.bin / home / pi / test

通过RTP传输时不工作: gst-launch-1.0 v4l2src! '视频/ X-H264,宽度= 1920,高度= 1080,帧率= 30/1和#39; ! h264parse config-interval = 1! rtph264pay! udpsink host = 10.0.0.129 port = 5000 \ &安培; gst-launch-1.0 udpsrc port = 5000! application / x-rtp,encoding-name = H264,payload = 96! rtph264depay! '视频/ X-H264,宽度= 1920,高度= 1080,帧率= 30/1和#39; ! filesink location = / home / pi / test \ &安培; /opt/vc/src/hello_pi/hello_video/hello_video.bin / home / pi / test

没有UDP RTP不工作: gst-launch-1.0 v4l2src! h264parse config-interval = 1! rtph264pay!排队! rtph264depay! filesink location = / home / pi / test \ &安培; /opt/vc/src/hello_pi/hello_video/hello_video.bin / home / pi / test

因此,只要视频流被封装在RTP中,就会发生某些事情。

我知道RTP Stream可以工作,因为我可以在我的VM上接收它并且没有任何麻烦地播放它。但是,当然,在VM上我可以使用autovideosink。 在ubuntu上工作: gst-launch-1.0 udpsrc port = 5000! \ 应用程序/ x-RTP,\ encoding-name = H264,payload = 96! \ rtph264depay! h264parse! avdec_h264! \ autovideosink

非常感谢任何建议。

谢谢

最诚挚的问候, maunza

2 个答案:

答案 0 :(得分:0)

只是为了增加我的两分钱 - 所有Pi的范围从第一个A开始,B修订到零和3个被认为能够并行编码和解码高达1080p30的信号。我的经验表明他们是。我认为raspivid曾经有一个选项来预览那样做的编码视频。

答案 1 :(得分:-1)

我也花了一些时间试图解决这个问题。 对于那些会寻找相同东西的人:

gst-launch-1.0   filesrc location=./test.h264 !   h264parse !  rtph264pay  ! rtph264depay ! h264parse ! video/x-h264, stream-format="byte-stream" ! filesink location=/dev/stdout | ./hello_video.bin /dev/stdin

因此,键入:

! video/x-h264, stream-format="byte-stream" !