gstreamer-1.0 and omxh264enc streaming problem on Tegra TK1


I am trying to encode and stream H264 from Tegra with gstreamer-1.0 and omxh264enc encoder. But it fails. The receiver (gstreamer1.0 too) does not show anything and the debug output has some errors (see below). If I use gstreamer-0.10 for streaming (with nv_omx_h264enc) then it works OK and the client’s gstreamer-1.0 can receive and decode it fine. Here are my commands:


gst-launch-1.0 videotestsrc ! ‘video/x-raw, format=(string)I420, width=(int)640, height=(int)480’ ! omxh264enc ! ‘video/x-h264, stream-format=(string)byte-stream’ ! h264parse ! rtph264pay ! udpsink host= port=5000

gst-launch-1.0 udpsrc port=5000 ! ‘application/x-rtp, encoding-name=H264, payload=96’ ! rtph264depay ! h264parse ! avdec_h264 ! xvimagesink sync=false

if I run gst-launch on the server side with

I get this output:

0:00:00.089989443 17299 0x13e980 WARN omx /dvs/git/dirty/git-master_linux/external/gstreamer/gst-omx/omx/gstomx.c:2785:plugin_init: Failed to load configuration file: Valid key file could not be found in search dirs (searched in: /home/ubuntu/.config:/etc/xdg as per GST_OMX_CONFIG_DIR environment variable, the xdg user config directory (or XDG_CONFIG_HOME) and the system config directory (or XDG_CONFIG_DIRS)
Setting pipeline to PAUSED …
Inside NvxLiteH264DecoderLowLatencyInitNvxLiteH264DecoderLowLatencyInit set DPB and MjstreamingPipeline is PREROLLING …
0:00:00.126284051 17299 0x14b060 FIXME default gstutils.c:3648:gst_pad_create_stream_id_printf_valist:videotestsrc0:src Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.134763376 17299 0x14b060 FIXME videoencoder gstvideoencoder.c:591:gst_video_encoder_setcaps: GstVideoEncoder::reset() is deprecated
Framerate set to : 30 at NvxVideoEncoderSetParameter0:00:00.135479702 17299 0x14b060 WARN omxh264enc /dvs/git/dirty/git-master_linux/external/gstreamer/gst-omx/omx/gstomxh264enc.c:114:gst_omx_h264_enc_set_format: Setting profile/level not supported by component
NvMMLiteOpen : Block : BlockType = 4
===== MSENC =====
NvMMLiteBlockCreate : Block : BlockType = 4
===== MSENC blits (mode: 1) into tiled surfaces =====
Pipeline is PREROLLED …
Setting pipeline to PLAYING …
New clock: GstSystemClock
0:00:00.388977127 17299 0x1c0a00 ERROR omxvideoenc /dvs/git/dirty/git-master_linux/external/gstreamer/gst-omx/omx/gstomxvideoenc.c:785:gst_omx_video_enc_handle_output_frame: No corresponding frame found

Any ideas why it does not work?


The above commands work for me, at least if I start the receiving side first and then the sending side? You may want to add config-interval=1 for the rtph264pay because then you can start the pipelines in any order.

Which Linux for Tegra release are you testing with?

I am on L4T 21.3… You are right, if I run the client first and then the server, then it works! And if I add config-interval=1 to the server command, then it works in any order! So the issue was not with omxh264enc, but with the communication.

Thanks a lot for your help!