livekitwebrtcsink: Signalling error: Error: Server disconnected
Description
After 15-20 seconds of the Gstreamer pipeline running, an error occurs. Sink: livekitwebrtcsink
Below are the debug logs for GST_DEBUG=webrtcsink:6.
gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,width=640,height=480 ! x264enc ! queue ! livekitwebrtcsink signaller::ws-url=<livekit_url> signaller::auth-token=<access_token>
Use Windows high-resolution clock, precision: 1 ms
Setting pipeline to PAUSED ...
0:00:00.072884000 17220 0000025A978807B0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1483:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::prepare:<livekitwebrtcsink0> preparing
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
0:00:00.272534000 17220 0000025A978443C0 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:3132:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::sink_event:<livekitwebrtcsink0:video_0> Received caps event Caps { seqnum: Seqnum(63), running-time-offset: 0, structure: Some(GstEventCaps { caps: (GstCaps) video/x-h264, codec_data=(buffer)01f4001effe1001e67f4001e90d9b281407b602d41818190000003001000000303c8f162d96001000568ebec4480, stream-format=(string)avc, alignment=(string)au, level=(string)3, profile=(string)high-4:4:4, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt601, chroma-site=(string)jpeg, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono }), caps: Caps(video/x-h264(memory:SystemMemory) { codec_data: (GstBuffer) ((GstBuffer*) 0000025A978FB480), stream-format: (gchararray) "avc", alignment: (gchararray) "au", level: (gchararray) "3", profile: (gchararray) "high-4:4:4", width: (gint) 640, height: (gint) 480, pixel-aspect-ratio: (GstFraction) 1/1, framerate: (GstFraction) 30/1, interlace-mode: (gchararray) "progressive", colorimetry: (gchararray) "bt601", chroma-site: (gchararray) "jpeg", multiview-mode: (gchararray) "mono", multiview-flags: (GstVideoMultiviewFlagsSet) 0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono }) }
0:00:00.309443000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:3018:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::lookup_caps::{{closure}}:<livekitwebrtcsink0> Stream is already encoded with codec H264, still need to payload it
Redistribute latency...
0:00:00.314359000 17220 0000025A97D17B40 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2855:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::run_discovery_pipeline::{{closure}}:<livekitwebrtcsink0> Running discovery pipeline for input caps video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3, profile=(string)high-4:4:4, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt601, chroma-site=(string)jpeg, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono and output caps ANY with codec Codec { name: "H264", caps: Caps(video/x-h264(memory:SystemMemory)), stream_type: StreamType(VIDEO), payload_type: Some(97), decoding_info: Some(DecodingInfo { has_decoder: true }), encoding_info: Some(EncodingInfo { encoder: ElementFactory { inner: TypedObjectRef { inner: 0x25a9769b000, type: GstElementFactory } }, payloader: ElementFactory { inner: TypedObjectRef { inner: 0x25a976a77e0, type: GstElementFactory } }, output_filter: None }) }
0:00:00.337052000 17220 0000025A97D17B40 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2861:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::run_discovery_pipeline::{{closure}}:<livekitwebrtcsink0> Running discovery pipeline
0:00:00.349079000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2966:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::run_discovery_pipeline::{{closure}}: Discovery pipeline got caps Caps(application/x-rtp(memory:SystemMemory) { media: (gchararray) "video", clock-rate: (gint) 90000, encoding-name: (gchararray) "H264", packetization-mode: (gchararray) "1", sprop-parameter-sets: (gchararray) "Z/QAHpDZsoFAe2AtQYGBkAAAAwAQAAADA8jxYtlg,aOvsRIA=", profile-level-id: (gchararray) "f4001e", profile: (gchararray) "high-4:4:4", payload: (gint) 97, ssrc: (guint) 1147621430, timestamp-offset: (guint) 2814551685, seqnum-offset: (guint) 5229, a-framerate: (gchararray) "30", extmap-1: (gchararray) "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" })
0:00:00.363514000 17220 0000025A97D17B40 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2982:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::run_discovery_pipeline::{{closure}}:<livekitwebrtcsink0> Codec discovery pipeline for caps video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)3, profile=(string)high-4:4:4, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt601, chroma-site=(string)jpeg, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono with codec Codec { name: "H264", caps: Caps(video/x-h264(memory:SystemMemory)), stream_type: StreamType(VIDEO), payload_type: Some(97), decoding_info: Some(DecodingInfo { has_decoder: true }), encoding_info: Some(EncodingInfo { encoder: ElementFactory { inner: TypedObjectRef { inner: 0x25a9769b000, type: GstElementFactory } }, payloader: ElementFactory { inner: TypedObjectRef { inner: 0x25a976a77e0, type: GstElementFactory } }, output_filter: None }) } succeeded: application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)f4001e, profile=(string)high-4:4:4, payload=(int)97, extmap-1=(string)http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01;
0:00:03.009183000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2040:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session:<livekitwebrtcsink0> Adding session: unique for peer: unique
0:00:03.021579000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:1438:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::request_webrtcbin_pad::{{closure}}:<livekitwebrtcsink0> Requesting WebRTC pad with caps application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)f4001e, profile=(string)high-4:4:4, payload=(int)97, extmap-1=(string)http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01, ssrc=(uint)2865118788
0:00:03.033926000 17220 0000025A97D17B40 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1917:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::negotiate:<livekitwebrtcsink0> Negotiating for session unique
0:00:03.040745000 17220 0000025A97D17B40 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1940:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::negotiate: Creating offer for session unique
0:00:03.045533000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:03.050052000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:03.061416000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:03.062370000 17220 0000025AA0797040 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1943:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::negotiate::{{closure}}: Created offer for session unique
0:00:03.143521000 17220 0000025AA0797040 LOG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2243:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<livekitwebrtcsink0> Ice gathering state in session unique (peer unique) changed: Gathering
0:00:03.391019000 17220 0000025AA0797040 WARN webrtcsink net\webrtc\src\webrtcsink\imp.rs:2120:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}::{{closure}}: rtprtxsend doesn't have a `stuffing-kbps` property, stuffing disabled
0:00:03.399641000 17220 0000025AA0797040 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2814:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::handle_sdp_answer::{{closure}}: received reply Ok(None)
0:00:03.404223000 17220 0000025AA0797040 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:1076:gstrswebrtc::webrtcsink::imp::Session::connect_input_stream:<livekitwebrtcsink0> Connecting input stream video_0 for consumer unique and media 0
0:00:03.411455000 17220 0000025AA0797040 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1097:gstrswebrtc::webrtcsink::imp::Session::connect_input_stream:<livekitwebrtcsink0> Picking codec from local offer
0:00:03.416467000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:03.435270000 17220 0000025AA0797040 LOG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2243:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<livekitwebrtcsink0> Ice gathering state in session unique (peer unique) changed: Complete
0:00:03.435662000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:03.441829000 17220 0000025AA0797040 LOG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2206:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<livekitwebrtcsink0> Ice connection state in session unique (peer unique) changed: Checking
0:00:03.451193000 17220 0000025AA0797040 LOG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2172:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<livekitwebrtcsink0> Connection state in session unique (peer unique) changed: Connecting
0:00:03.728601000 17220 0000025AA0797040 LOG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2206:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<livekitwebrtcsink0> Ice connection state in session unique (peer unique) changed: Completed
0:00:03.733924000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:03.954061000 17220 0000025AA0797040 LOG webrtcsink net\webrtc\src\webrtcsink\imp.rs:2172:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<livekitwebrtcsink0> Connection state in session unique (peer unique) changed: Connected
0:00:04.202197000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:04.214001000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:05.002929000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
0:00:05.013715000 17220 0000025A97D17B40 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:2347:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::start_session::{{closure}}:<session-pipeline-unique> Recalculating latency
ERROR: from element /GstPipeline:pipeline0/GstLiveKitWebRTCSink:livekitwebrtcsink0: GStreamer encountered a general stream error.
Additional debug info:
net\webrtc\src\webrtcsink\imp.rs(1573): gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::connect_signaller::{{closure}}::{{closure}} (): /GstPipeline:pipeline0/GstLiveKitWebRTCSink:livekitwebrtcsink0:
Signalling error: Error: Server disconnected
Execution ended after 0:00:17.967301000
Setting pipeline to NULL ...
0:00:18.050845000 17220 0000025A978807B0 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:1498:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> unpreparing
0:00:18.054825000 17220 0000025A978807B0 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:930:gstrswebrtc::webrtcsink::imp::State::finalize_session: Ending session unique
0:00:18.058572000 17220 0000025A978807B0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1522:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> Waiting for codec discoveries to finish
0:00:18.063490000 17220 0000025A978807B0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1529:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> No codec discovery is running anymore
0:00:18.067467000 17220 0000025A978807B0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1540:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> Ending sessions
0:00:18.071122000 17220 0000025AA082FCC0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:962:gstrswebrtc::webrtcsink::imp::State::finalize_session::{{closure}}: Session unique ended
0:00:18.072244000 17220 0000025A978807B0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1544:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> All sessions have started finalizing
0:00:18.079282000 17220 0000025A978807B0 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:1547:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> Stopping signaller
0:00:18.083450000 17220 0000025A978807B0 INFO webrtcsink net\webrtc\src\webrtcsink\imp.rs:1549:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> Stopped signaller
0:00:18.087033000 17220 0000025A978807B0 DEBUG webrtcsink net\webrtc\src\webrtcsink\imp.rs:1560:gstrswebrtc::webrtcsink::imp::BaseWebRTCSink::unprepare:<livekitwebrtcsink0> All sessions are done finalizing
Freeing pipeline ...
Setup
- Operating System: Windows 11
- Device: Computer
- gst-plugins-rs Version: 0.11
- GStreamer Version: GStreamer 1.22.6 (gst-launch-1.0 version 1.22.6)
-
Command line:
gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,width=640,height=480 ! x264enc ! queue ! livekitwebrtcsink signaller::ws-url=<livekit_url> signaller::auth-token=<access_token>
Steps to reproduce the bug
- build webrtc plugin according: https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs
- create livekit access token:
livekit-cli create-token --api-key <api_key> --api-secret <api_secret> --join --room <room> --create --identity <user_id> --valid-for 24h
- run pipeline:
gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,width=640,height=480 ! x264enc ! queue ! livekitwebrtcsink signaller::ws-url=<livekit_url> signaller::auth-token=<access_token>
Additional Information
Pipeline with livekit api key and api secret works fine:
gst-launch-1.0 -e videotestsrc ! videoconvert ! video/x-raw,width=640,height=480 ! x264enc ! queue ! livekitwebrtcsink signaller::ws-url=<livekit_url> signaller::api-key=<api_key> signaller::secret-key=<api_secret> signaller::room-name=<room>