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