<div dir="ltr">Hi,<br><div>I am building a pipeline for an rtsp stream where there will be video and an audio and data channel.</div><div>I connected the rtspsrc plugin to the stream and added a connect_pad_added signal.</div><div>I detect if the received pad is an audio channel and then I add the audio decoder and then add a connect_pad_added signal to it to receive the `src_pad` for it which is dynamic.</div><div><br></div><div>For some reason the I receive the callback for the rtspsrc `connect_pad_added`, but I dont receive the callback that I connect the audio channel with.</div><div>Am I missing something?</div><div><br></div><div>I appreciate any help with this.</div><div>Here is a code snippet.</div><div><br></div><div>```</div><div><pre style="background-color:rgb(40,44,52);color:rgb(171,178,191);font-family:"JetBrains Mono",monospace;font-size:11.3pt"><span style="color:rgb(198,120,221)">match </span>gst::<span style="color:rgb(255,198,109)">parse_launch</span>(<span style="color:rgb(209,154,102)">pipeline_str</span>) {<br>    <span style="color:rgb(209,154,102)">Ok</span>(pipe_elem) => {<br>        <span style="color:rgb(255,198,109)">set_pipeline_elem</span>(<span style="color:rgb(209,154,102)">Some</span>(pipe_elem));<br>        <span style="color:rgb(198,120,221)">let </span>media_info = <span style="color:rgb(255,198,109)">get_probe_info</span>();<br><br>      {<br>            // the elem object is a pipeline element object created with parse_launch<br>            <span style="color:rgb(198,120,221)">let </span>pipeline = elem.<span style="color:rgb(255,198,109)">downcast</span>::<gst::<span style="color:rgb(229,192,123)">Pipeline</span>>().<span style="color:rgb(255,198,109)">unwrap</span>();<br>            <span style="color:rgb(198,120,221)">let </span>rtspsrc = <span style="color:rgb(198,120,221)">match </span>pipeline.<span style="color:rgb(255,198,109)">by_name</span>(<span style="color:rgb(152,195,121)">"basesrc"</span>) {<br>                <span style="color:rgb(209,154,102)">Some</span>(rtspsrc) => rtspsrc,<br>                <span style="color:rgb(209,154,102)">None </span>=> {<br>                    log::<span style="color:rgb(97,175,239)">error!</span>(<span style="color:rgb(152,195,121)">"could not find audio_decoder"</span>);<br>                    <span style="color:rgb(198,120,221)">return</span>;<br>                }<br>            };<br><br>            rtspsrc.<span style="color:rgb(255,198,109)">connect_pad_added</span>(<span style="color:rgb(198,120,221)">move </span>|<span style="color:rgb(209,154,102)">src</span>, <span style="color:rgb(209,154,102)">src_pad</span>| {<br>                <span style="color:rgb(198,120,221)">let mut </span>audio = <span style="color:rgb(198,120,221)">false</span>;<br>                <span style="color:rgb(198,120,221)">match </span><span style="color:rgb(209,154,102)">src_pad</span>.<span style="color:rgb(255,198,109)">current_caps</span>() {<br>                    <span style="color:rgb(209,154,102)">Some</span>(caps) => {<br>                        <span style="color:rgb(198,120,221)">let </span>new_pad_struct = caps.<span style="color:rgb(255,198,109)">structure</span>(<span style="color:rgb(209,154,102)">0</span>).<span style="color:rgb(255,198,109)">expect</span>(<span style="color:rgb(152,195,121)">"Failed to get first structure of caps for audio"</span>);<br>                        <span style="color:rgb(198,120,221)">for </span>i <span style="color:rgb(198,120,221)">in </span><span style="color:rgb(209,154,102)">0</span>..new_pad_struct.<span style="color:rgb(255,198,109)">n_fields</span>() {<br>                            <span style="color:rgb(198,120,221)">match </span>new_pad_struct.<span style="color:rgb(255,198,109)">nth_field_name</span>(i).<span style="color:rgb(255,198,109)">unwrap</span>() {<br>                                <span style="color:rgb(152,195,121)">"media" </span>=> {<br>                                    log::<span style="color:rgb(97,175,239)">info!</span>(<span style="color:rgb(152,195,121)">"media struct=</span><span style="color:rgb(86,182,194)">{:#?}</span><span style="color:rgb(152,195,121)">"</span>, new_pad_struct);<br>                                    <span style="color:rgb(198,120,221)">let </span>media_type = new_pad_struct.<span style="color:rgb(255,198,109)">value</span>(<span style="color:rgb(152,195,121)">"media"</span>).<span style="color:rgb(255,198,109)">unwrap</span>();<br>                                    <span style="color:rgb(198,120,221)">let </span>field_value = media_type.<span style="color:rgb(255,198,109)">get</span>::<&<span style="color:rgb(229,192,123)">str</span>>().<span style="color:rgb(255,198,109)">unwrap</span>();<br>                                    audio = field_value.<span style="color:rgb(255,198,109)">starts_with</span>(<span style="color:rgb(152,195,121)">"audio"</span>);<br>                                    <span style="color:rgb(198,120,221)">break</span>;<br>                                }<br>                                _ => {}<br>                            }<br>                        }<br>                    }<br>                    _ => {}<br>                }<br>                <span style="color:rgb(198,120,221)">if </span>!audio {<br>                    <span style="color:rgb(198,120,221)">return</span>;<br>                }<br>                log::<span style="color:rgb(97,175,239)">info!</span>(<span style="color:rgb(152,195,121)">"it is an audio pad!!"</span>);<br>                <span style="color:rgb(198,120,221)">let </span>decoder = <span style="color:rgb(229,192,123)">ElementFactory</span>::<span style="color:rgb(97,175,239)">make</span>(<span style="color:rgb(152,195,121)">"decodebin"</span>, <span style="color:rgb(209,154,102)">None</span>).<span style="color:rgb(255,198,109)">unwrap</span>();<br>                pipeline.<span style="color:rgb(255,198,109)">add</span>(&decoder).<span style="color:rgb(255,198,109)">unwrap</span>();<br><br>                <span style="color:rgb(209,154,102)">src_pad</span>.<span style="color:rgb(255,198,109)">link</span>(&decoder.<span style="color:rgb(255,198,109)">static_pad</span>(<span style="color:rgb(152,195,121)">"sink"</span>).<span style="color:rgb(255,198,109)">unwrap</span>()).<span style="color:rgb(255,198,109)">unwrap</span>();<br>                log::<span style="color:rgb(97,175,239)">info!</span>(<span style="color:rgb(152,195,121)">"linked rtspsrc.audio->decoder.sink!!"</span>);<br><br>                <span style="color:rgb(198,120,221)">let </span>pipeline_weak = pipeline.<span style="color:rgb(255,198,109)">downgrade</span>();<br><br>                decoder.<span style="color:rgb(255,198,109)">connect_pad_added</span>(<span style="color:rgb(198,120,221)">move </span>|<span style="color:rgb(209,154,102)">src</span>, <span style="color:rgb(209,154,102)">pad</span>| {<br>                    log::<span style="color:rgb(97,175,239)">info!</span>(<span style="color:rgb(152,195,121)">"recieved connect_pad added signal!!"</span>);<br>                    <span style="color:rgb(198,120,221)">if </span><span style="color:rgb(209,154,102)">pad</span>.<span style="color:rgb(255,198,109)">direction</span>() == gst::<span style="color:rgb(229,192,123)">PadDirection</span>::<span style="color:rgb(209,154,102)">Src </span>{<br>                        <span style="color:rgb(92,99,112)">// received the src pad for the decoder!!<br></span><span style="color:rgb(92,99,112)">                        </span>log::<span style="color:rgb(97,175,239)">info!</span>(<span style="color:rgb(152,195,121)">"GUGURURURU received decoder pad from src!!!"</span>);<br>                    }<br>                });<br><br>            });</pre></div></div>