<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">Thanks, I will have a play with adding
to the pipeline on that event.</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Terry<br>
</div>
<div class="moz-cite-prefix">On 02/10/2024 08:26, Gareth Alldread
via gstreamer-devel wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAENg58qyeVDbzdJwNwdQ2pcxxajL2QN=U9KabvDqBV17R6ZhfQ@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div>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.</div>
<div><br>
</div>
<div> g_signal_connect(m_sourceElement, "pad-added",
G_CALLBACK(&SynxRTSPPipeline::onPadAdded), this);<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, 2 Oct 2024 at 07:30,
Terry Barnaby via gstreamer-devel <<a
href="mailto:gstreamer-devel@lists.freedesktop.org"
moz-do-not-send="true" class="moz-txt-link-freetext">gstreamer-devel@lists.freedesktop.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>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.</p>
<p>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.</p>
<p>I need some way to handle the playback of these MP4 files
that may or may not have MP3 audio streams.<br>
</p>
<p>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):<br>
</p>
<pre>gst-launch-1.0 -v filesrc location=temp.mp4 ! qtdemux name=demux</pre>
<pre> demux.video_0 ! queue ! h264parse ! openh264dec ! glimagesink</pre>
<pre> demux.audio_0 ! queue ! decodebin ! audioconvert ! pulsesink</pre>
<p>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.</p>
<p>So I think I need to:</p>
<p>1. Maybe there is some gstreamer element or attribute
that can ignore the audio stream if not present somehow ?</p>
<p>2. Check if the MP4 file has an audio stream before
creating the gstreamer pipeline in C++.</p>
<p>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.<br>
</p>
Any ideas on the simplest/most CPU efficient way of doing
this with gstreamer ?<br>
<p><br>
</p>
</div>
</blockquote>
</div>
</blockquote>
<p><br>
</p>
</body>
</html>