GStreamer playback of MP4 files with and without audio

Terry Barnaby terry1 at beam.ltd.uk
Wed Oct 2 06:21:25 UTC 2024


I am developing a C++ video inspection program that creates MP4/H264/MP3 
files and needs to play them back with the video stream processed by 
various gstreamer elements and audio separately.

In general this has been working fine when just video was being 
recorded/played back, but I am just adding audio to the mix. Some MP4 
files will contain only a video stream and some will contain both video 
and audio streams.

I need some way to handle the playback of these MP4 files that may or 
may not have MP3 audio streams.

As a simple idea if I use something like (The real C++ code constructs 
the gstreamer piple line and tees the video stream to various gstreamer 
sub pipelines):

gst-launch-1.0 -v filesrc location=temp.mp4 ! qtdemux name=demux

  demux.video_0 ! queue ! h264parse ! openh264dec ! glimagesink

  demux.audio_0 ! queue ! decodebin ! audioconvert ! pulsesink

This plays back the video and audio streams fine (not sure how well 
synchronised?) from an MP4 with video and audio streams, but hangs if 
the MP4 only has a video stream.

So I think I need to:

1. Maybe there is some gstreamer element or attribute that can ignore 
the audio stream if not present somehow ?

2. Check if the MP4 file has an audio stream before creating the 
gstreamer pipeline in C++.

3. Create the basic C++ pipleline in C++ and interrogate pads or 
something somehow and add the "demux.audio_0 ! queue ! decodebin ! 
audioconvert ! pulsesink" sub pipeline if it is seen an audio stream is 
present.

Any ideas on the simplest/most CPU efficient way of doing this with 
gstreamer ?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20241002/e6d4fb2e/attachment.htm>


More information about the gstreamer-devel mailing list