<div dir="ltr">Hi Zachary,<div>Thanks for your quick reply. Sounds like a very good idea. Let me try your approach and will get back to you with the results.</div><div><br></div><div>Thanks,</div><div>Vladimir</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 14, 2020 at 12:46 PM Zachary Hueras <<a href="mailto:ZHueras@amdtelemedicine.com">ZHueras@amdtelemedicine.com</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 dir="ltr" style="font-size:10pt;color:rgb(0,0,0);background-color:rgb(255,255,255);font-family:Calibri,Arial,Helvetica,sans-serif">
<p>​I would recommend something akin to your latter approach. When a call comes in, you would modify the pipeline to include a new webrtcbin to handle it. Insert a tee element after capsfilter and link that to your webrtcbins<br>
</p>
<p><br>
</p>
<p>When a call comes in, grab a new pad from the tee. Create a queue, rtph264pay, and a webrtcbin; add them to your pipeline, and link them together (queue -> rtph264pay -> webrtcbin). Link the pad from the tee to the queue's src pad. Do all your normal webrtc
 setup, and finally call gst_element_sync_state_with_parent on the queue, rtph264pay, and webrtcbin elements.​<br>
</p>
<p> <br>
</p>
<div id="gmail-m_7426984886817790897Signature">
<div name="divtagdefaultwrapper">
<font size="2"><span style="color:rgb(33,33,33);background-color:rgb(255,255,255)"><font>Zachary Hueras</font></span>
</font>
<div><font size="2">Principal Software Engineer<br style="color:rgb(33,33,33);background-color:rgb(255,255,255)">
<span style="color:rgb(33,33,33);background-color:rgb(255,255,255)">AMD Global Telemedicine, Inc.</span><br style="color:rgb(33,33,33);background-color:rgb(255,255,255)">
<span style="color:rgb(33,33,33);background-color:rgb(255,255,255)">Cell : 978-660-3812</span><br style="color:rgb(33,33,33);background-color:rgb(255,255,255)">
<span style="color:rgb(33,33,33);background-color:rgb(255,255,255)"><a href="mailto:zhueras@amdtelemedicine.com" target="_blank">zhueras@amdtelemedicine.com</a></span><br style="color:rgb(33,33,33);background-color:rgb(255,255,255)">
<a href="http://www.amdtelemedicine.com/" style="background-color:rgb(255,255,255)" id="gmail-m_7426984886817790897NoLP" target="_blank">www.amdtelemedicine.com</a><span style="color:rgb(33,33,33);background-color:rgb(255,255,255)"> | Follow us on LinkedIn</span></font></div>
</div>
</div>
<div style="color:rgb(33,33,33)">
<hr style="display:inline-block;width:98%">
<div id="gmail-m_7426984886817790897divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> gstreamer-devel <<a href="mailto:gstreamer-devel-bounces@lists.freedesktop.org" target="_blank">gstreamer-devel-bounces@lists.freedesktop.org</a>> on behalf of Vladimir Tyutin <<a href="mailto:vladimir.tyutin@gmail.com" target="_blank">vladimir.tyutin@gmail.com</a>><br>
<b>Sent:</b> Monday, December 14, 2020 3:58 AM<br>
<b>To:</b> <a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<b>Subject:</b> How to restart webrtcbin plugin without stopping whole pipeline</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div dir="ltr">Hello gstreamer experts,
<div>I need your advice on the issue below. </div>
<div>I have a pipeline that records mpeg ts files (2 different video resolutions and audio) and webrtc (please see pipeline below. v536videosrc is my plugin that produces h264 encoded frames). </div>
<div>Everything works fine for the first webrtc call. Now when the call is over I need somehow to reset webrtc to the initial state to be prepared for the new call. </div>
<div>I tried two approaches:</div>
<div>1. Block capsfilter src before webrtc and move webrtcbin to state NULL and PLAYING again and unblock capsfilter.</div>
<div>2. Block capsfilter src before webrtc, remove webrtcbin from pipeline recreate it and add to pipeline again, link and unblock capsfilter. </div>
<div><br>
</div>
<div>Both approaches do not work. The major issue I observe is that when webrtc moves to NULL state it tries to set NULL state to all plugins inside webrtcbin. And it hangs somewhere in rtpjittbuffer or so despite I do everything on a separate thread (not main
 loop thread). </div>
<div><br>
</div>
<div>Please advise what is the correct way to reset webrtcbin to initial state and get it ready for a new incoming call without stopping the whole pipeline. </div>
<div><br>
</div>
<div>Here is my pipeline example:</div>
<div>
<div>#define PIPELINE    "webrtcbin name=webrtc " STUN_SERVER_PROP "=" STUN_1 " " STUN_SERVER_PROP "=" STUN_2 " " STUN_SERVER_PROP "=" STUN_3 " " \</div>
<div>                    STUN_SERVER_PROP "=" STUN_4 " " STUN_SERVER_PROP "=" STUN_5 " " TURN_SERVER_PROP "=" TURN_1 " " \</div>
<div>                    "mpegtsmux name=fullhdts ! hlssink max-files=100 target-duration=10 location=/mnt/ramdisk/fullhd_%09d.ts " \</div>
<div>                    "mpegtsmux name=vgats ! hlssink max-files=100 target-duration=10 location=/mnt/ramdisk/vga_%09d.ts " \</div>
<div>                    "v536videosrc sys-init=false device=1 channel=0 encoder=0 format=H264 width=1920 height=1080 ! video/x-h264, stream-format=byte-stream, alignment=au, profile=baseline ! queue ! h264parse ! fullhdts. " \</div>
<div>                    "v536videosrc sys-init=false device=1 channel=1 encoder=1 format=H264 width=640 height=480 ! video/x-h264, stream-format=byte-stream, alignment=au, profile=baseline ! tee name=tv ! queue ! h264parse ! vgats. " \</div>
<div>                    "alsasrc ! tee name=t ! queue ! avenc_aac ! aacparse ! fullhdts. " \</div>
<div>                    "t. ! queue ! avenc_aac ! aacparse ! vgats. " \</div>
<div>                    "tv. ! queue name=videoqueue leaky=downstream max-size-buffers=25 ! rtph264pay name=vrtp ! capsfilter name=vrtpcaps caps=" RTP_CAPS_H264 "96 ! webrtc. " \</div>
<div>                    "t. ! queue name=audioqueue leaky=downstream ! audioconvert name=aconvert ! opusenc ! rtpopuspay name=artp ! capsfilter name=artpcaps caps=" RTP_CAPS_OPUS "97 ! webrtc. "</div>
</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Vladimir</div>
<div> </div>
</div>
</div>
</div>
</div>
</div>

_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div>