GStreamer x264 on Linux (ARM)

1.2k views Asked by At

Trying to get streaming work with x264 encoding.

I am doing some black magic with stitching two images which is known to work:

gst-launch-1.0 -e \
    v4l2src device=/dev/video0 ! \
        video/x-raw,framerate=90/1,width=640,height=480 ! m.sink_0 \
    v4l2src device=/dev/video1 ! \
        video/x-raw,framerate=90/1,width=640,height=480 ! m.sink_1 \
    videomixer name=m sink_1::xpos=640 ! \
    video/x-raw,framerate=90/1,width=1280,height=480 ! \
    xvimagesink

Now I am trying to get same thing over x264 stream with help of internet:

gst-launch-1.0 -e \
    v4l2src device=/dev/video0 ! \
        video/x-raw,framerate=90/1,width=640,height=480 ! m.sink_0 \
    v4l2src device=/dev/video1 ! \
        video/x-raw,framerate=90/1,width=640,height=480 ! m.sink_1 \
    videomixer name=m sink_1::xpos=640 ! \
    video/x-raw,framerate=90/1,width=1280,height=480 ! \
    x264enc tune=zerolatency byte-stream=true bitrate=3000 threads=2 ! \
    h264parse config-interval=1 ! \
    rtph264pay ! \
    udpsink host=127.0.0.1 port=5000 

And seems to work because no errors appear. But I see no way to receive image.

I have tried

gst-launch-1.0 udpsrc port=5000 ! application/x-rtp ! rtph264depay ! h264parse ! avdec_h264 ! xvimagesink

which does not provide anything useful. Also attempted to use VLC with SDP file:

c=IN IP4 127.0.0.1
m=video 5000 RTP/AVP 96
a=rtpmap:96 H264/3000

I must be doing something wrong but unsure what.

EDIT: Question about version of GStreamer. Probably this is information needed:

ubuntu@tegra-ubuntu:~$  gst-launch-1.0 --version
gst-launch-1.0 version 1.2.4
GStreamer 1.2.4
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0
ubuntu@tegra-ubuntu:~$



$ dpkg -l | grep gstreamer
ii  gir1.2-gstreamer-1.0                                  1.2.4-0ubuntu1.1                                    armhf        Description: GObject introspection data for the GStreamer library
ii  gstreamer-tools                                       0.10.36-1.2ubuntu3                                  armhf        Tools for use with GStreamer
ii  gstreamer0.10-alsa:armhf                              0.10.36-1.1ubuntu2                                  armhf        GStreamer plugin for ALSA
ii  gstreamer0.10-fluendo-mp3:armhf                       0.10.23.debian-3                                    armhf        Fluendo mp3 decoder GStreamer 0.10 plugin
ii  gstreamer0.10-nice:armhf                              0.1.4-1                                             armhf        ICE library (GStreamer 0.10 plugin)
ii  gstreamer0.10-plugins-bad:armhf                       0.10.23-7.2ubuntu1.3                                armhf        GStreamer plugins from the "bad" set
ii  gstreamer0.10-plugins-bad-multiverse                  0.10.21-1ubuntu3                                    armhf        GStreamer plugins from the "bad" set (Multiverse Variant)
ii  gstreamer0.10-plugins-base:armhf                      0.10.36-1.1ubuntu2                                  armhf        GStreamer plugins from the "base" set
ii  gstreamer0.10-plugins-base-apps                       0.10.36-1.1ubuntu2                                  armhf        GStreamer helper programs from the "base" set
ii  gstreamer0.10-plugins-good:armhf                      0.10.31-3+nmu1ubuntu5.2                             armhf        GStreamer plugins from the "good" set
ii  gstreamer0.10-plugins-ugly:armhf                      0.10.19-2ubuntu5                                    armhf        GStreamer plugins from the "ugly" set
ii  gstreamer0.10-pulseaudio:armhf                        0.10.31-3+nmu1ubuntu5.2                             armhf        GStreamer plugin for PulseAudio
ii  gstreamer0.10-tools                                   0.10.36-1.2ubuntu3                                  armhf        Tools for use with GStreamer
ii  gstreamer0.10-x:armhf                                 0.10.36-1.1ubuntu2                                  armhf        GStreamer plugins for X11 and Pango
ii  gstreamer1.0-alsa:armhf                               1.2.4-1~ubuntu2                                     armhf        GStreamer plugin for ALSA
ii  gstreamer1.0-clutter                                  2.0.8-1build1                                       armhf        Clutter PLugin for GStreamer 1.0
ii  gstreamer1.0-fluendo-mp3:armhf                        0.10.23.debian-3                                    armhf        Fluendo mp3 decoder GStreamer 1.0 plugin
ii  gstreamer1.0-libav:armhf                              1.2.4-1~ubuntu1                                     armhf        libav plugin for GStreamer
ii  gstreamer1.0-nice:armhf                               0.1.4-1                                             armhf        ICE library (GStreamer plugin)
ii  gstreamer1.0-plugins-bad:armhf                        1.2.4-1~ubuntu1.1                                   armhf        GStreamer plugins from the "bad" set
ii  gstreamer1.0-plugins-bad-faad:armhf                   1.2.4-1~ubuntu1.1                                   armhf        GStreamer faad plugin from the "bad" set
ii  gstreamer1.0-plugins-bad-videoparsers:armhf           1.2.4-1~ubuntu1.1                                   armhf        GStreamer videoparsers plugin from the "bad" set
ii  gstreamer1.0-plugins-base:armhf                       1.2.4-1~ubuntu2                                     armhf        GStreamer plugins from the "base" set
ii  gstreamer1.0-plugins-base-apps                        1.2.4-1~ubuntu2                                     armhf        GStreamer helper programs from the "base" set
ii  gstreamer1.0-plugins-good:armhf                       1.2.4-1~ubuntu1.3                                   armhf        GStreamer plugins from the "good" set
ii  gstreamer1.0-plugins-ugly:armhf                       1.2.3-2build1                                       armhf        GStreamer plugins from the "ugly" set
ii  gstreamer1.0-pulseaudio:armhf                         1.2.4-1~ubuntu1.3                                   armhf        GStreamer plugin for PulseAudio
ii  gstreamer1.0-tools                                    1.2.4-0ubuntu1.1                                    armhf        Tools for use with GStreamer
ii  gstreamer1.0-x:armhf                                  1.2.4-1~ubuntu2                                     armhf        GStreamer plugins for X11 and Pango
ii  libgstreamer-plugins-bad0.10-0:armhf                  0.10.23-7.2ubuntu1.3                                armhf        GStreamer shared libraries from the "bad" set
ii  libgstreamer-plugins-bad1.0-0:armhf                   1.2.4-1~ubuntu1.1                                   armhf        GStreamer development files for libraries from the "bad" set
ii  libgstreamer-plugins-base0.10-0:armhf                 0.10.36-1.1ubuntu2                                  armhf        GStreamer libraries from the "base" set
ii  libgstreamer-plugins-base1.0-0:armhf                  1.2.4-1~ubuntu2                                     armhf        GStreamer libraries from the "base" set
ii  libgstreamer-plugins-good1.0-0:armhf                  1.2.4-1~ubuntu1.3                                   armhf        GStreamer development files for libraries from the "good" set
ii  libgstreamer0.10-0:armhf                              0.10.36-1.2ubuntu3                                  armhf        Core GStreamer libraries and elements
ii  libgstreamer1.0-0:armhf                               1.2.4-0ubuntu1.1                                    armhf        Core GStreamer libraries and elements
$ 
1

There are 1 answers

2
Ahresse On

I propose your different points to solve the problem:

  • In order to identify if it's on the streaming or the encoding part of your pipeline problem occurs, can you try to launch a pipeline with a lower bitrate and a local preview:

    gst-launch-1.0 -e \
        v4l2src device=/dev/video0 ! videorate ! \
            video/x-raw,framerate=25/1,width=640,height=480 ! m.sink_0 \
        v4l2src device=/dev/video1 ! videorate ! \
            video/x-raw,framerate=25/1,width=640,height=480 ! m.sink_1 \
        videomixer name=m sink_1::xpos=640 ! \
        video/x-raw,framerate=25/1,width=1280,height=480 ! \
        x264enc tune=zerolatency byte-stream=true bitrate=3000 threads=0 ! \
        avdec_h264 ! xvimagesink sync=false
    
  • Also, can you try to launch Wireshark or tcpdump on the loopback interface of your system in order to monitor trafic on port 5000.

  • Switch with an hardware encoder:

    gst-launch-1.0 -e \
        v4l2src device=/dev/video0 ! \
            video/x-raw,framerate=90/1,width=640,height=480 ! m.sink_0 \
        v4l2src device=/dev/video1 ! videorate ! \
            video/x-raw,framerate=90/1,width=640,height=480 ! m.sink_1 \
        videomixer name=m sink_1::xpos=640 ! \
        video/x-raw,framerate=90/1,width=1280,height=480 ! \
        omxh264enc ! \
        avdec_h264 ! xvimagesink sync=false