omxh264enc encoded stream doesn't work in all cases (on Zynq UltraScale ZU4EV-VCU)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

omxh264enc encoded stream doesn't work in all cases (on Zynq UltraScale ZU4EV-VCU)

Martin Wuehrer
Hi,
I'm working on a XILINX ZYNQ Ultrascale+ XCZU4EV with a video acceleration core for H264-encoded udp streams (this core should be used for both directions: encoding and decoding) that can be utilized
by the gstreamer omx-plugins (similar to a Raspberry PI3). On this device I'm using upstream gstreamer 1.16.0, mainline Linux 5.4.0 (+ some cherry picked xilinx patches to make the video acceleration
core work).

The h264 udp-stream decoding works perfectly, but the h264 udp encoding doesn't work in all cases:
When I use the following pipeline

    `gst-launch-1.0 videotestsrc ! video/x-raw,width=100,height=50,framerate=25/1 ! omxh264enc ! h264parse config-interval=1 ! rtph264pay ! udpsink port=50000 host=230.168.10.191 auto-multicast=true`

to start the h264-encoded udp-stream and as a next step I execute the following pipeline (on a x86_64-PC with Debian Buster and gstreamer 1.14.4)

    `gst-launch-1.0 udpsrc multicast-group=230.168.10.191 auto-multicast=true multicast-iface=enp2s0 port=50000 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! h264parse config-
interval=1 ! avdec_h264 ! fpsdisplaysink sync=true`

to show the stream, the stream doesn't show up at all (i.e. there is no transition from PAUSED to PLAYING state on the client) and it waits forever.

If I do the commands in the opposite way (i.e. start the client-command before the stream is provided) everything works and the stream shows up.

To avoid network issues, I also tried the following pipeline (with x264enc instead of omxh264enc)

    `gst-launch-1.0 videotestsrc ! video/x-raw,width=100,height=50,framerate=25/1 ! x264enc ! h264parse ! rtph264pay ! udpsink port=50000 host=230.168.10.191 auto-multicast=true`

With this pipeline, the stream always shows up, independent if the client command is executed before or after the stream is provided.

What's also interesting: When I execute the stream provider pipeline with 'omxh264enc' on the Raspberry PI3 (which also supports omxh264enc) everything is working. Independent, if the client command
is executed before or after the stream started.

I also tried to stream a h264-encoded video:
When I create it with the video acceleration core I get the same behavior (i.e. it depends when the client connects to the stream):
    `gst-launch-1.0 videotestsrc background-color=12345 num-buffers=500 pattern=ball ! video/x-raw,width=100,height=50 ! omxh264enc ! h264parse ! matroskamux ! filesink location=omxh264.mkv`
    `gst-launch-1.0 filesrc location=omxh264.mkv ! matroskademux ! h264parse config-interval=1 ! rtph264pay ! udpsink host=230.168.10.191 port=50000`
But when I create the matroska-file with x264enc instead of omxh264enc everything works and the stream shows up on the client independent of command order.

Do you have any ideas, how I can fix or further debug this issue?

Thanks for any help,
Regards
Martin

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel