<div dir="ltr"><div>I haven't got experience with filesrc - but I attached my example doing something similar with uridecodebin (which will work with an video file btw).  I have stripped this out of my app - so it is encapsulated inside a class - but I'm sure you get the idea.<br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 2 Oct 2024 at 17:46, Terry Barnaby via gstreamer-devel <<a href="mailto:gstreamer-devel@lists.freedesktop.org">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"><u></u>

  
    
  
  <div>
    <div>I have tried using
      g_signal_connect(m_sourceElement, "pad-added", ...) and within
      that adding a sub pipeline to the main pipeline, but I am getting
      something wrong when I add the sub pipeline.</div>
    <div><br>
    </div>
    <div>My simple program attached, sees the
      signal callback, but when I add the sub pipeline and link it to
      the new pad, the displayed video just freezes.</div>
    <div>I've looked at the "Basic tutorial 3:
      Dynamic pipelines" and it looks like I am doing the right thing
      and no errors are seen.</div>
    <div><br>
    </div>
    <div>Any ideas on what I am ding wrong ?<br>
    </div>
    <div><br>
    </div>
    <div><br>
    </div>
    <div>On 02/10/2024 08:26, Gareth Alldread
      via gstreamer-devel wrote:<br>
    </div>
    <blockquote type="cite">
      
      <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" target="_blank">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>
  </div>

</blockquote></div>