How to restart webrtcbin plugin without stopping whole pipeline

Vladimir Tyutin vladimir.tyutin at gmail.com
Mon Dec 14 08:58:50 UTC 2020


Hello gstreamer experts,
I need your advice on the issue below.
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).
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.
I tried two approaches:
1. Block capsfilter src before webrtc and move webrtcbin to state NULL and
PLAYING again and unblock capsfilter.
2. Block capsfilter src before webrtc, remove webrtcbin from pipeline
recreate it and add to pipeline again, link and unblock capsfilter.

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).

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.

Here is my pipeline example:
#define PIPELINE    "webrtcbin name=webrtc " STUN_SERVER_PROP "=" STUN_1 "
" STUN_SERVER_PROP "=" STUN_2 " " STUN_SERVER_PROP "=" STUN_3 " " \
                    STUN_SERVER_PROP "=" STUN_4 " " STUN_SERVER_PROP "="
STUN_5 " " TURN_SERVER_PROP "=" TURN_1 " " \
                    "mpegtsmux name=fullhdts ! hlssink max-files=100
target-duration=10 location=/mnt/ramdisk/fullhd_%09d.ts " \
                    "mpegtsmux name=vgats ! hlssink max-files=100
target-duration=10 location=/mnt/ramdisk/vga_%09d.ts " \
                    "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. " \
                    "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. " \
                    "alsasrc ! tee name=t ! queue ! avenc_aac ! aacparse !
fullhdts. " \
                    "t. ! queue ! avenc_aac ! aacparse ! vgats. " \
                    "tv. ! queue name=videoqueue leaky=downstream
max-size-buffers=25 ! rtph264pay name=vrtp ! capsfilter name=vrtpcaps
caps=" RTP_CAPS_H264 "96 ! webrtc. " \
                    "t. ! queue name=audioqueue leaky=downstream !
audioconvert name=aconvert ! opusenc ! rtpopuspay name=artp ! capsfilter
name=artpcaps caps=" RTP_CAPS_OPUS "97 ! webrtc. "

Thanks,
Vladimir
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20201214/82408552/attachment.htm>


More information about the gstreamer-devel mailing list