WebRTC: Possible medias length assertion with webrtcbin

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

WebRTC: Possible medias length assertion with webrtcbin

Mandar Joshi
Hello everyone,
I am trying to build a conference engine with WebRTC using GStremer 1.14.5 on Ubuntu 18.04. Been referring to the webrtc-sendrecv.c as an example.
Right now, I am trying to stream audio and video to and from the same Linux box.

I am having trouble with set-remote-description on webrtcbin. I get this error after receiving a SDP Answer from the browser.

ERROR:gstwebrtcbin.c:1152:_check_if_negotiation_is_needed: assertion failed: (trans->mline < gst_sdp_message_medias_len (webrtc->current_remote_description->sdp))
  >Aborted (core dumped)

A GStreamer peer to GStreamer peer works when both have equal number of streams (medias, is it?) i.e. Just video or just audio or both audio and video.

Here is the SDP Answer received from the browser. I think I am messing up the negotiation somewhere. I would really appreciate some help understanding what’s happening.

v=0
o=mozilla...THIS_IS_SDPARTA-82.0 810706521954309706 0 IN IP4 0.0.0.0
s=-
t=0 0
a=fingerprint:sha-256 C6:C3:86:8E:CB:D2:14:9C:C1:4A:B8:72:8D:60:00:08:34:51:33:79:FE:2D:39:4A:7C:E6:F5:97:92:5D:97:C4
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=sendrecv
a=fmtp:96 max-fs=12288;max-fr=60
a=ice-pwd:4d7d2212bcd5f1f467855683f036f700
a=ice-ufrag:0594f02a
a=mid:video0
a=msid:{1d029bf1-6123-4b39-be26-68202dad363f} {7c72666b-94ec-422b-8cc6-5010b8aa73ab}
a=rtcp-fb:96 nack pli
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=setup:active
a=ssrc:1864073429 cname:{4dad80e7-eb43-4706-8934-4a2d51202c21}
m=audio 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=sendrecv
a=fmtp:97 maxplaybackrate=48000;stereo=1;useinbandfec=1
a=ice-pwd:4d7d2212bcd5f1f467855683f036f700
a=ice-ufrag:0594f02a
a=mid:audio1
a=msid:{1d029bf1-6123-4b39-be26-68202dad363f} {4607068a-ba2b-4d70-8561-12f13013b345}
a=rtcp-mux
a=rtpmap:97 opus/48000/2
a=setup:active
a=ssrc:4273581052 cname:{4dad80e7-eb43-4706-8934-4a2d51202c21}

Here is the C code I’m using for set-remote-description.

static void c_peer_set_sdp_answer (CPeer *cpeer, Conference *conf, gchar *sdp_answer) {
{
  g_message ("Setting SDP Answer: %s", sdp_answer);
  int ret;
  GstSDPMessage *sdp;
  GstWebRTCSessionDescription *answer;
  GstPromise *promise;

  ret = gst_sdp_message_new (&sdp);
  g_assert_cmphex (ret, ==, GST_SDP_OK);
  ret = gst_sdp_message_parse_buffer ((guint8 *) sdp_answer, strlen (sdp_answer), sdp);
  g_assert_cmphex (ret, ==, GST_SDP_OK);

  answer = gst_webrtc_session_description_new (GST_WEBRTC_SDP_TYPE_ANSWER, sdp);
  g_assert_nonnull (answer);

  promise = gst_promise_new ();

  //This is where things go wrong
  g_signal_emit_by_name (conf->webrtcbin, "set-remote-description", answer, promise);

  gst_promise_interrupt (promise);
  gst_promise_unref (promise);
}

Is there something I could be missing in the process before set-remote-description?
May be in set-local-description?

From the GST_DEBUG=4 level logs, is this something I need to look into?
0:00:41.148395569  9264 0x55dc1f3b9590 INFO               webrtcbin gstwebrtcbin.c:2795:_set_description_task:<webrtcbin> Attempting to set remote answer in the have-local-offer state

Here is the link to the what seems to be the relevant section of the logs https://pastebin.com/aiPMsZgG

Regards
Mandar


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: WebRTC: Possible medias length assertion with webrtcbin

Matthew Waters
I would very much suggest trying the latest stable release branch of GStreamer, 1.18.  Many issues have been fixed in webrtcbin since 1.14.5

Cheers
-Matt

On 2/11/20 2:45 pm, Mandar Joshi wrote:
Hello everyone,
I am trying to build a conference engine with WebRTC using GStremer 1.14.5 on Ubuntu 18.04. Been referring to the webrtc-sendrecv.c as an example.
Right now, I am trying to stream audio and video to and from the same Linux box.

I am having trouble with set-remote-description on webrtcbin. I get this error after receiving a SDP Answer from the browser.

ERROR:gstwebrtcbin.c:1152:_check_if_negotiation_is_needed: assertion failed: (trans->mline < gst_sdp_message_medias_len (webrtc->current_remote_description->sdp))
  >Aborted (core dumped)

A GStreamer peer to GStreamer peer works when both have equal number of streams (medias, is it?) i.e. Just video or just audio or both audio and video.

Here is the SDP Answer received from the browser. I think I am messing up the negotiation somewhere. I would really appreciate some help understanding what’s happening.

v=0
o=mozilla...THIS_IS_SDPARTA-82.0 810706521954309706 0 IN IP4 0.0.0.0
s=-
t=0 0
a=fingerprint:sha-256 C6:C3:86:8E:CB:D2:14:9C:C1:4A:B8:72:8D:60:00:08:34:51:33:79:FE:2D:39:4A:7C:E6:F5:97:92:5D:97:C4
a=ice-options:trickle
a=msid-semantic:WMS *
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=sendrecv
a=fmtp:96 max-fs=12288;max-fr=60
a=ice-pwd:4d7d2212bcd5f1f467855683f036f700
a=ice-ufrag:0594f02a
a=mid:video0
a=msid:{1d029bf1-6123-4b39-be26-68202dad363f} {7c72666b-94ec-422b-8cc6-5010b8aa73ab}
a=rtcp-fb:96 nack pli
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=setup:active
a=ssrc:1864073429 cname:{4dad80e7-eb43-4706-8934-4a2d51202c21}
m=audio 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=sendrecv
a=fmtp:97 maxplaybackrate=48000;stereo=1;useinbandfec=1
a=ice-pwd:4d7d2212bcd5f1f467855683f036f700
a=ice-ufrag:0594f02a
a=mid:audio1
a=msid:{1d029bf1-6123-4b39-be26-68202dad363f} {4607068a-ba2b-4d70-8561-12f13013b345}
a=rtcp-mux
a=rtpmap:97 opus/48000/2
a=setup:active
a=ssrc:4273581052 cname:{4dad80e7-eb43-4706-8934-4a2d51202c21}

Here is the C code I’m using for set-remote-description.

static void c_peer_set_sdp_answer (CPeer *cpeer, Conference *conf, gchar *sdp_answer) {
{
  g_message ("Setting SDP Answer: %s", sdp_answer);
  int ret;
  GstSDPMessage *sdp;
  GstWebRTCSessionDescription *answer;
  GstPromise *promise;

  ret = gst_sdp_message_new (&sdp);
  g_assert_cmphex (ret, ==, GST_SDP_OK);
  ret = gst_sdp_message_parse_buffer ((guint8 *) sdp_answer, strlen (sdp_answer), sdp);
  g_assert_cmphex (ret, ==, GST_SDP_OK);

  answer = gst_webrtc_session_description_new (GST_WEBRTC_SDP_TYPE_ANSWER, sdp);
  g_assert_nonnull (answer);

  promise = gst_promise_new ();

  //This is where things go wrong
  g_signal_emit_by_name (conf->webrtcbin, "set-remote-description", answer, promise);

  gst_promise_interrupt (promise);
  gst_promise_unref (promise);
}

Is there something I could be missing in the process before set-remote-description?
May be in set-local-description?

From the GST_DEBUG=4 level logs, is this something I need to look into?
0:00:41.148395569  9264 0x55dc1f3b9590 INFO               webrtcbin gstwebrtcbin.c:2795:_set_description_task:<webrtcbin> Attempting to set remote answer in the have-local-offer state

Here is the link to the what seems to be the relevant section of the logs https://pastebin.com/aiPMsZgG

Regards
Mandar


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

OpenPGP_signature (505 bytes) Download Attachment