<html><head>
<style>pre,code,address {
margin: 0px;
}
h1,h2,h3,h4,h5,h6 {
margin-top: 0.2em;
margin-bottom: 0.2em;
}
ol,ul {
margin-top: 0em;
margin-bottom: 0em;
}
blockquote {
margin-top: 0em;
margin-bottom: 0em;
}
</style></head>
<body><div>Hi Terry,</div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div>1. Maybe there is some gstreamer element or attribute that can ignore the audio stream if not present somehow ?</div></blockquote><div><br></div><div>Have you tried the <a href="https://gstreamer.freedesktop.org/documentation/playback/playbin3.html?gi-language=c#playbin3-page">playbin3</a> element yet?</div><div><br></div><div>You just set the file location in form of a URI (<a href="https://gstreamer.freedesktop.org/documentation/gstreamer/gsturihandler.html?gi-language=c#gst_filename_to_uri">gst_filename_to_uri()</a>) on it via the "uri" property, and it will figure out the demuxer/parsers/decoders itself.</div><div><br></div><div>If there's video it will plug video decoders and a video sink, otherwise not.</div><div><br></div><div>If there's audio it will plug audio decoders and an audio sink, otherwise not.</div><div><br></div><div>You can configure specific sinks via the audio-sink and video-sink properties as well.</div><div><br></div><div>You can see how it behaves with the gst-play-1.0 command line utility for what it's worth, which is a wrapper around playbin/playbin3.</div><div><br></div><div>Cheers</div><div> Tim</div><div><br></div><div>PS: most discussion has shifted from the mailing list to our shiny new <a href="https://discourse.gstreamer.org/">Discourse forum</a> these days.</div><div><br></div><div>On Wed, 2024-10-02 at 07:21 +0100, Terry Barnaby via gstreamer-devel wrote:</div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div> </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><div> </div><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><div> </div><p>I need some way to handle the playback of these MP4 files that may or may not have MP3 audio streams.<br> </p><div> </div><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><div> </div><pre>gst-launch-1.0 -v filesrc location=temp.mp4 ! qtdemux name=demux</pre><div> </div><pre> demux.video_0 ! queue ! h264parse ! openh264dec ! glimagesink</pre><div> </div><pre> demux.audio_0 ! queue ! decodebin ! audioconvert ! pulsesink</pre><div> </div><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><div> </div><p>So I think I need to:</p><div> </div><p>1. Maybe there is some gstreamer element or attribute that can ignore the audio stream if not present somehow ?</p><div> </div><p>2. Check if the MP4 file has an audio stream before creating the gstreamer pipeline in C++.</p><div> </div><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><div> Any ideas on the simplest/most CPU efficient way of doing this with gstreamer ?<br> </div><p><br> </p><div> </div></blockquote><div><br></div><div><span></span></div></body></html>