GStreamer playback of MP4 files with and without audio

Terry Barnaby terry1 at beam.ltd.uk
Wed Oct 2 14:51:14 UTC 2024


Thanks, I will have a play with adding to the pipeline on that event.

Terry
On 02/10/2024 08:26, Gareth Alldread via gstreamer-devel wrote:
> I would add a handler for the "pad-added" event on the filesrc element 
> and only create/add the audio part of the pipeline if you get an audio 
> pad created.  That is what I have done to handle rtspsrc streams that 
> may or may not have audio.  Reply if you want more details.
>
> g_signal_connect(m_sourceElement, "pad-added", 
> G_CALLBACK(&SynxRTSPPipeline::onPadAdded), this);
>
> On Wed, 2 Oct 2024 at 07:30, Terry Barnaby via gstreamer-devel 
> <gstreamer-devel at lists.freedesktop.org> wrote:
>
>     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/0765f915/attachment.htm>


More information about the gstreamer-devel mailing list