<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none"><!-- p { margin-top: 0px; margin-bottom: 0px; }--></style>
</head>
<body dir="ltr" style="font-size:10pt;color:#000000;background-color:#FFFFFF;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="Signature">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<font size="2"><span style="color:rgb(33,33,33); background-color:rgb(255,255,255)"><font>Zachary Hueras</font></span>
</font>
<div style=""><font size="2" style="">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)">zhueras@amdtelemedicine.com</span><br style="color:rgb(33,33,33); background-color:rgb(255,255,255)">
<a tabindex="0" href="http://www.amdtelemedicine.com/" target="_blank" style="background-color:rgb(255,255,255)" id="NoLP">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 tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> gstreamer-devel <gstreamer-devel-bounces@lists.freedesktop.org> on behalf of Vladimir Tyutin <vladimir.tyutin@gmail.com><br>
<b>Sent:</b> Monday, December 14, 2020 3:58 AM<br>
<b>To:</b> gstreamer-devel@lists.freedesktop.org<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>
</body>
</html>