1

I am trying to build a video pipeline with GStreamer.

In the end it should be a full duplex Full HD video conferencing solution. As the Raspberry Pi 3 is not capable to encode and decode the video stream at the same time I am using a Logitech C920 to encode the video. So the my RPi only needs to encode and decode Audio, and decode the H.264 video.

I build GStreamer from source (1.13.0.1 & 1.12.0) as the 1.4.4 from the raspbian repository had problems with G.722 encoding. Libraries like gst-omx (RaspiVideo), libsrtp (encryption), libwebrtc (echocanceling) (0.1 in repo to old - so manually downloaded 0.3) are build as well. So i do have omxh264dec - but I couldn't find a video sink to play the 1080p video smoothly. So I tried to pipe (with a named pipe) the h.264 stream do hello_video or the omxplayer, which worked fine as long as I stay local. As soon as I try to stream it over RTP hello_video doesn't show anything.

Working pipe:

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 even with stream from camera: gst-launch-1.0 v4l2src ! 'video/x-h264,width=1920,height=1080,framerate=30/1' ! filesink
location=/home/pi/test & /opt/vc/src/hello_pi/hello_video/hello_video.bin 
/home/pi/test

Not working when transmitting over RTP:

gst-launch-1.0 v4l2src ! 'video/x-h264,width=1920,height=1080,framerate=30/1' ! 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 ! 'video/x-h264,width=1920,height=1080,framerate=30/1' ! filesink location=/home/pi/test \ & /opt/vc/src/hello_pi/hello_video/hello_video.bin /home/pi/test

Not working without UDP RTP:

gst-launch-1.0 v4l2src ! h264parse config-interval=1 ! rtph264pay ! queue ! rtph264depay ! filesink location=/home/pi/test \ & /opt/vc/src/hello_pi/hello_video/hello_video.bin /home/pi/test

So it seems that something happens as soon as the video stream gets enclosed in RTP.

I know that the RTP Stream works, as I can receive it on my VM and play it without any trouble. But, of course, on the VM I can use the autovideosink. working receive on Ubuntu:

gst-launch-1.0 udpsrc port=5000 ! \ application/x-rtp,\ encoding-name=H264,payload=96 ! \ rtph264depay ! h264parse ! avdec_h264 ! \ autovideosink

Any suggestions are highly appreciated.

1

The glimagesink seems to have a problem with Raspbian running xserver. Using Raspbian Light with glimagesink works like a charm. So no need for the "hello_video" workaround.

So the final pipeline is: Sender: gst-launch-1.0 v4l2src ! 'video/x-v264,width=1920,height=1080,framerate=30/1' ! h264parse config-interval=1 ! rtph264pay ! udpsink host=10.0.0.129 port=5000 Recipient: gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! h264parse ! omxh264dec ! glimagesink

Thank You

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.