I am trying to modify the deepstream_test_1.py app included with the DeepStream Python bindings to take an MP4 file as input (sample_1080p_h264.mp4) instead of an H.264 elementary stream (sample_720p.h264). Eventually, I want to use an RTSP camera source. To support MP4, I modified the sample app to add a qtdemux element, and dynamically linked it to the h264 parser element based on the deepstream_test_3 app. The problem is the pipeline fails to start with an internal data stream error because qtdemux cannot be linked to h264parser.
When I run the sample unaltered with sample_720p.h264 as source, it works, so the issue is most likely with the way I am adding qtdemux or dynamically linking the Gstreamer pipeline.
- Jetson Nano B01
- L4T version:
- R32 (release), REVISION: 4.2, GCID: 20074772, BOARD: t210ref, EABI: aarch64, DATE: Thu Apr 9 01:22:12 UTC 2020
- DeepStream 5 with Python bindings
Here are the modified code snippets:
def demux_pad_added(qtdemux, qtdemux_src_pad, h264parser): print ("In demux_pad_added") caps = qtdemux_src_pad.get_current_caps() gststruct = caps.get_structure(0) gstname = gststruct.get_name() print("gstname =", gstname) if gstname.find("video") != -1: # Link to h264 parser print("Linking qtdemux to h264parse") qtdemux_src_pad.link(h264parser.get_static_pad("sink")) print("FINISHED demux_pad_added") def main(args): .... source = Gst.ElementFactory.make("filesrc", "file-source") demux = Gst.ElementFactory.make("qtdemux", "demux") ... pipeline.add(source) pipeline.add(demux) pipeline.add(h264parser) ... demux.connect("pad-added", demux_pad_added, h264parser) ... source.link(demux) ...
Full Python source: deepstream_test_2.txt (10.9 KB)
Here is a full log of the output with GST_DEBUG=GST_CAPS:6.
deepstream_test_2.log (55.0 KB)