Decode rtsp stream to appsink and writing video to file

Hello!
I’m trying run pipeline for decode rtsp stream to appsink and writing video to file.

Two different pipelines run with success:

self.pipeline = Gst.parse_launch(
            f"rtspsrc name=m_rtspsrc ! rtph264depay ! h264parse ! matroskamux ! filesink 
            location=data/streams/{self.config.camera_name}_{str(datetime.datetime.now()).replace(' ', '_')}.mkv"
)

and

self.pipeline = Gst.parse_launch(
            "rtspsrc name=m_rtspsrc ! rtph264depay ! h264parse ! nvv4l2decoder disable-dpb=true enable-max-performance=true ! 
            nvvidconv ! capsfilter name=m_capsfilter1 ! videoconvert ! appsink name=m_appsink"
)

But when i try run pipeline with parallel two sinks, then creates empty .mkv file and has no images from appsink. Pipeline:

self.pipeline = Gst.parse_launch(
            "rtspsrc name=m_rtspsrc ! rtph264depay ! h264parse ! "
            "tee name=mytee ! queue ! nvv4l2decoder disable-dpb=true enable-max-performance=true ! nvvidconv ! capsfilter name=m_capsfilter1 ! videoconvert ! appsink name=m_appsink mytee. ! "
            f"queue ! matroskamux ! filesink location=data/streams/{self.config.camera_name}_{str(datetime.datetime.now()).replace(' ', '_')}.mkv"
        )

How can I solve my problem?

• Hardware Platform (Jetson Xavier NX)
• Gstreamer Version 1.14.5
• JetPack Version (4.6)
• Docker image nvcr.io/nvidia/l4t-ml:r32.6.1-py3

We suggest you can use gst-launch-1.0 command to tune the pipeline first.

The decoder uses byte-stream H264 format, but matroska would use avc H264 format.
Try adding h264parse in both subpipes after tee:

self.pipeline = Gst.parse_launch(
            "rtspsrc name=m_rtspsrc ! rtph264depay ! "
            "tee name=mytee ! queue ! h264parse ! video/x-h264,stream-format=byte-stream ! nvv4l2decoder disable-dpb=true enable-max-performance=true ! nvvidconv ! capsfilter name=m_capsfilter1 ! videoconvert ! appsink name=m_appsink mytee. ! "
            f"queue ! h264parse ! video/x-h264,stream-format=avc ! matroskamux ! filesink location=data/streams/{self.config.camera_name}_{str(datetime.datetime.now()).replace(' ', '_')}.mkv"
        )
1 Like

Thank you very much! It’s really solved my problem!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.