webrtcbin - `ERROR:gstwebrtcbin.c:2109:_update_transceiver_from_sdp_media: assertion failed: (pad->trans == rtp_trans)` when manually adding transceivers to the element
I was getting a random garbage SDP offer sent from the webrtcbin side to the browser (nonsense rtpmap), so tried adding an explicit transceiver to the webrtcbin
element (HEAD commit here https://github.com/aiden-ct/gstwebrtc-demos/commit/691da1bd4f0c06065090fea7c6093271660a977a). Before, the offer was defaulting to a=sendrecv
, which was also resulting in an extra, blank SDP offer to the browser.
However, when I run it, I get ERROR:gstwebrtcbin.c:2109:_update_transceiver_from_sdp_media: assertion failed: (pad->trans == rtp_trans
. Here is the full output:
$ GST_DEBUG=3,*webrtc*:7 gdb streaming-app-debug
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from streaming-app-debug...done.
(gdb) run
Starting program: /home/aiden/Work/mlb/software/gstwebrtc-demos/streamer/gst/streaming-app-debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Connecting to server...
[New Thread 0x7fffea2b8700 (LWP 19102)]
[New Thread 0x7fffe9ab7700 (LWP 19103)]
[New Thread 0x7fffe92b6700 (LWP 19104)]
[New Thread 0x7fffe8ab5700 (LWP 19105)]
0:00:00.253896981 19097 0x5555559d85e0 FIXME default gstutils.c:3963:gst_pad_create_stream_id_internal:<videotestsrc:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.254082364 19097 0x5555559d85e0 WARN vaapi gstvaapicontext.c:356:config_create: Failed to create vaConfig
0:00:00.254092116 19097 0x5555559d85e0 WARN vaapiencode gstvaapiencode.c:428:ensure_allowed_sinkpad_caps:<video_encoder> failed to get allowed surface formats
0:00:00.255943420 19097 0x5555559d85e0 WARN vaapi gstvaapicontext.c:356:config_create: Failed to create vaConfig
0:00:00.255956121 19097 0x5555559d85e0 WARN vaapiencode gstvaapiencode.c:428:ensure_allowed_sinkpad_caps:<video_encoder> failed to get allowed surface formats
0:00:00.257769859 19097 0x5555559d85e0 WARN vaapi gstvaapicontext.c:356:config_create: Failed to create vaConfig
0:00:00.257781762 19097 0x5555559d85e0 WARN vaapiencode gstvaapiencode.c:428:ensure_allowed_sinkpad_caps:<video_encoder> failed to get allowed surface formats
0:00:00.257964971 19097 0x5555559d85e0 WARN vaapi gstvaapicontext.c:356:config_create: Failed to create vaConfig
0:00:00.257976456 19097 0x5555559d85e0 WARN vaapiencode gstvaapiencode.c:428:ensure_allowed_sinkpad_caps:<video_encoder> failed to get allowed surface formats
0:00:00.258157040 19097 0x5555559d88f0 WARN vaapi gstvaapicontext.c:356:config_create: Failed to create vaConfig
0:00:00.258169531 19097 0x5555559d88f0 WARN vaapiencode gstvaapiencode.c:428:ensure_allowed_sinkpad_caps:<video_encoder> failed to get allowed surface formats
[New Thread 0x7fffdbfff700 (LWP 19106)]
[New Thread 0x7fffdb3a3700 (LWP 19107)]
[New Thread 0x7fffda995700 (LWP 19108)]
[New Thread 0x7fffd9b66700 (LWP 19109)]
[New Thread 0x7fffc6c6f700 (LWP 19115)]
> GET HTTP/1.1
> Soup-Debug-Timestamp: 1560953345
> Soup-Debug: SoupSession 1 (0x555555a08220), SoupMessage 1 (0x555555a250c0), SoupSocket 1 (0x55555580d4e0)
> Host: localhost:8443
> Upgrade: websocket
> Connection: Upgrade
> Sec-WebSocket-Key: rx5oMI4H/UOD7ET0JCWMtQ==
> Sec-WebSocket-Version: 13
> Accept-Encoding: gzip, deflate
< HTTP/1.1 101 Switching Protocols
< Soup-Debug-Timestamp: 1560953345
< Soup-Debug: SoupMessage 1 (0x555555a250c0)
< Upgrade: websocket
< Connection: Upgrade
< Sec-WebSocket-Accept: MWF+xbURM+N4oNU1+GsMGrgpwBA=
< Date: Wed, 19 Jun 2019 14:09:05 GMT
< Server: Python/3.6 websockets/7.0
Connected to signalling server
Registering with signalling server
Registered with server
[Thread 0x7fffc6c6f700 (LWP 19115) exited]
[New Thread 0x7fffc6c6f700 (LWP 19118)]
[New Thread 0x7fffc5332700 (LWP 19119)]
0: direction = 2
(streaming-app-debug:19097): GLib-GObject-WARNING **: 15:09:09.395: ../../../../gobject/gsignal.c:3492: signal name 'create-data-channel' is invalid for instance '0x5555560b81b0' of type 'GstWebRTCBin'
WARNING: Could not create data channel, is usrsctp available?
(streaming-app-debug:19097): GLib-GObject-WARNING **: 15:09:09.395: ../../../../gobject/gsignal.c:2523: signal 'on-data-channel' is invalid for instance '0x5555560b81b0' of type 'GstWebRTCBin'
0:00:04.754545576 19097 0x555555a4a670 DEBUG webrtcice gstwebrtcice.c:708:gst_webrtc_ice_set_property:<webrtcice0> setting stun server, stun://stun.l.google.com:19302
(streaming-app-debug:19097): GLib-GObject-WARNING **: 15:09:09.577: g_object_set_is_valid_property: object class 'GstWebRTCBin' has no property named 'bundle-policy'
0:00:04.936712878 19097 0x555555a4a670 DEBUG webrtcbin gstwebrtcbin.c:2918:gst_webrtc_bin_change_state: changing state: NULL => READY
0:00:04.946295029 19097 0x555555a4a670 LOG webrtcbin gstwebrtcbin.c:1014:_check_if_negotiation_is_needed:<webrtcbin_568> checking if negotiation is needed
0:00:04.946337593 19097 0x555555a4a670 LOG webrtcbin gstwebrtcbin.c:1026:_check_if_negotiation_is_needed:<webrtcbin_568> no local description set
0:00:04.946423693 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:1118:_check_need_negotiation_task:<webrtcbin_568> emitting on-negotiation-needed
0:00:04.946478232 19097 0x555555a4a670 DEBUG webrtcbin gstwebrtcbin.c:2918:gst_webrtc_bin_change_state: changing state: READY => PAUSED
0:00:04.946572395 19097 0x5555560b5400 INFO webrtcbin gstwebrtcbin.c:1720:_create_sdp_task:<webrtcbin_568> creating offer sdp with options (NULL)
0:00:04.946585502 19097 0x555555a4a670 DEBUG webrtcbin gstwebrtcbin.c:2918:gst_webrtc_bin_change_state: changing state: PAUSED => PLAYING
0:00:04.946699295 19097 0x5555560b5400 LOG webrtcbin gstwebrtcbin.c:1162:_find_codec_preferences:<webrtcbin_568> retreiving codec preferences from <webrtctransceiver0>
0:00:04.946767849 19097 0x5555560b5400 LOG webrtcbin gstwebrtcbin.c:1166:_find_codec_preferences:<webrtcbin_568> Using codec preferences: application/x-rtp, payload=(int)96, media=(string)video, encoding-name=(string)H264, clock-rate=(int)90000
0:00:04.946865580 19097 0x5555560b5400 DEBUG webrtcbin gstwebrtcbin.c:1378:sdp_media_from_transceiver:<webrtcbin_568> Adding 0-th caps application/x-rtp, payload=(int)96, media=(string)video, encoding-name=(string)H264, clock-rate=(int)90000, rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true to 0-th media
0:00:04.946986270 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:379:_find_transport_for_session:<webrtcbin_568> Found transport (NULL) for session 0
0:00:04.947079525 19097 0x555555a4a670 DEBUG webrtcbin gstwebrtcbin.c:166:gst_webrtc_bin_pad_new:<'':sink_0> new visible pad with direction sink
0:00:04.947127785 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:338:_find_transceiver_for_mline:<webrtcbin_568> Found transceiver (NULL) for mlineindex 0
0:00:04.947259049 19097 0x555555a4a670 INFO webrtcbin gstwebrtcbin.c:1852:_connect_input_stream:<'':sink_0> linking input stream 0
[New Thread 0x7fffbb927700 (LWP 19120)]
0:00:05.036365719 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:2784:on_rtpbin_pad_added:<webrtcbin_568> new rtpbin pad send_rtp_src_0
0:00:05.036409352 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:2784:on_rtpbin_pad_added:<webrtcbin_568> new rtpbin pad send_rtp_sink_0
0:00:05.036421749 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:379:_find_transport_for_session:<webrtcbin_568> Found transport (NULL) for session 0
0:00:05.278330391 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:268:_find_ice_stream_for_session:<webrtcbin_568> No ice stream available for session 0
0:00:05.278342311 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:268:_find_ice_stream_for_session:<webrtcbin_568> No ice stream available for session 0
0:00:05.278409277 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:279:_add_ice_stream_item:<webrtcbin_568> adding ice stream <webrtcicestream0> for session 0
0:00:05.278490678 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:279:_add_ice_stream_item:<webrtcbin_568> adding ice stream <webrtcicestream1> for session 0
0:00:05.279475426 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:2784:on_rtpbin_pad_added:<webrtcbin_568> new rtpbin pad recv_rtcp_sink_0
0:00:05.279533015 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:2784:on_rtpbin_pad_added:<webrtcbin_568> new rtpbin pad send_rtcp_src_0
0:00:05.279568334 19097 0x555555a4a670 TRACE webrtcbin gstwebrtcbin.c:1306:_create_transport_channel:<webrtcbin_568> Create transport <transportstream1> for session 0
0:00:05.279576669 19097 0x555555a4a670 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin1> changing state: NULL => READY
0:00:05.279602784 19097 0x555555a4a670 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin1> changing state: READY => PAUSED
** (streaming-app-debug:19097): WARNING **: 15:09:09.920: (gstwebrtcbin.c:1300):_create_transport_channel: code should not be reached
0:00:05.279625421 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:1306:_create_transport_channel:<webrtcbin_568> Create transport <transportstream0> for session 0
0:00:05.279635862 19097 0x5555560b5400 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin0> changing state: NULL => READY
0:00:05.279639707 19097 0x555555a4a670 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin1> changing state: PAUSED => PLAYING
0:00:05.279661998 19097 0x555555a4a670 DEBUG webrtctransportreceivebin transportreceivebin.c:187:transport_receive_bin_change_state: changing state: NULL => READY
0:00:05.279665595 19097 0x5555560b5400 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin0> changing state: READY => PAUSED
0:00:05.279723509 19097 0x5555560b5400 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin0> changing state: PAUSED => PLAYING
0:00:05.279744443 19097 0x5555560b5400 DEBUG webrtctransportreceivebin transportreceivebin.c:187:transport_receive_bin_change_state: changing state: NULL => READY
[New Thread 0x7fffbaf09700 (LWP 19131)]
[New Thread 0x7fffba708700 (LWP 19132)]
0:00:05.280088961 19097 0x555555fbc8f0 FIXME default gstutils.c:3963:gst_pad_create_stream_id_internal:<nicesrc1:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
[New Thread 0x7fffb9f07700 (LWP 19133)]
0:00:05.280112534 19097 0x555555fbc8f0 WARN GST_PADS gstpad.c:4224:gst_pad_peer_query:<nicesrc1:src> could not send sticky events
[New Thread 0x7fffb9706700 (LWP 19134)]
0:00:05.280217072 19097 0x555555a4a670 DEBUG webrtctransportreceivebin transportreceivebin.c:187:transport_receive_bin_change_state: changing state: READY => PAUSED
[New Thread 0x7fffb8f05700 (LWP 19135)]
0:00:05.280331998 19097 0x5555560b5400 DEBUG webrtctransportreceivebin transportreceivebin.c:187:transport_receive_bin_change_state: changing state: READY => PAUSED
0:00:05.280412285 19097 0x555555f41190 FIXME default gstutils.c:3963:gst_pad_create_stream_id_internal:<nicesrc2:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:05.280423687 19097 0x555555fbc9e0 FIXME default gstutils.c:3963:gst_pad_create_stream_id_internal:<nicesrc3:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:05.280432830 19097 0x555555fbc990 FIXME default gstutils.c:3963:gst_pad_create_stream_id_internal:<nicesrc4:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:05.280451427 19097 0x555555f41190 WARN GST_PADS gstpad.c:4224:gst_pad_peer_query:<nicesrc2:src> could not send sticky events
0:00:05.280451429 19097 0x555555fbc9e0 WARN GST_PADS gstpad.c:4224:gst_pad_peer_query:<nicesrc3:src> could not send sticky events
[New Thread 0x7fff9bfff700 (LWP 19136)]
0:00:05.280467781 19097 0x555555fbc990 WARN GST_PADS gstpad.c:4224:gst_pad_peer_query:<nicesrc4:src> could not send sticky events
0:00:05.280483824 19097 0x555555a4a670 DEBUG webrtctransportreceivebin transportreceivebin.c:187:transport_receive_bin_change_state: changing state: PAUSED => PLAYING
0:00:05.280592839 19097 0x555555a4a670 DEBUG webrtctransportsendbin transportsendbin.c:149:transport_send_bin_change_state:<transportsendbin1> changing state: PLAYING => PLAYING
0:00:05.280598406 19097 0x5555560b5400 DEBUG webrtctransportreceivebin transportreceivebin.c:187:transport_receive_bin_change_state: changing state: PAUSED => PLAYING
0:00:05.280727002 19097 0x5555560b5400 LOG webrtcbin gstwebrtcbin.c:1162:_find_codec_preferences:<webrtcbin_568> retreiving codec preferences from <webrtctransceiver1>
(streaming-app-debug:19097): GStreamer-CRITICAL **: 15:09:09.921: gst_mini_object_make_writable: assertion 'mini_object != NULL' failed
(streaming-app-debug:19097): GStreamer-CRITICAL **: 15:09:09.921: gst_caps_get_size: assertion 'GST_IS_CAPS (caps)' failed
0:00:05.280767726 19097 0x5555560b5400 WARN webrtcbin gstwebrtcbin.c:1365:sdp_media_from_transceiver:<webrtcbin_568> no caps available for transceiver, skipping
Sending offer:
v=0
o=- 3683714542561044098 0 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-options:trickle
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:vu2SymgXoPB+Rfywahd1qMThub9QFUAS
a=ice-pwd:/HWWLVGrmSUh5AcOCFqhuNO27bNr5Ek8
a=sendonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=mid:video0
a=fingerprint:sha-256 95:52:57:65:77:CE:9F:A1:0C:D7:15:03:0F:35:9D:F7:F9:F2:1A:70:07:E2:81:5A:43:EC:B8:D9:D2:68:D6:BA
0:00:05.280891453 19097 0x5555560b5400 INFO webrtcbin gstwebrtcbin.c:2286:_set_description_task:<webrtcbin_568> Attempting to set local offer in the stable state
0:00:05.280897726 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:2287:_set_description_task:<webrtcbin_568> SDP contents
v=0
o=- 3683714542561044098 0 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-options:trickle
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=setup:actpass
a=ice-ufrag:vu2SymgXoPB+Rfywahd1qMThub9QFUAS
a=ice-pwd:/HWWLVGrmSUh5AcOCFqhuNO27bNr5Ek8
a=sendonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=mid:video0
a=fingerprint:sha-256 95:52:57:65:77:CE:9F:A1:0C:D7:15:03:0F:35:9D:F7:F9:F2:1A:70:07:E2:81:5A:43:EC:B8:D9:D2:68:D6:BA
0:00:05.280917855 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:2407:_set_description_task:<webrtcbin_568> notify signaling-state from stable to have-local-offer
0:00:05.280925424 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:379:_find_transport_for_session:<webrtcbin_568> Found transport <transportstream1> for session 0
0:00:05.280931686 19097 0x5555560b5400 DEBUG webrtcice gstwebrtcice.c:547:gst_webrtc_ice_set_local_credentials:<webrtcice0> Setting local ICE credentials on ICE stream 1 ufrag:vu2SymgXoPB+Rfywahd1qMThub9QFUAS pwd:/HWWLVGrmSUh5AcOCFqhuNO27bNr5Ek8
0:00:05.280937940 19097 0x5555560b5400 DEBUG webrtcice gstwebrtcice.c:565:gst_webrtc_ice_gather_candidates:<webrtcice0> gather candidates for stream 1
0:00:05.280941824 19097 0x5555560b5400 DEBUG webrtcicestream icestream.c:177:gst_webrtc_ice_stream_gather_candidates:<webrtcicestream0> start gathering candidates
[New Thread 0x7fff9b7fe700 (LWP 19137)]
Received SDP answer:
v=0
o=- 6033211127276408481 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:/6E0
a=ice-pwd:g1BZJ/aMJhrEZUzC0R8U7Jew
a=ice-options:trickle
a=fingerprint:sha-256 CC:C3:2E:DE:57:A2:20:3D:A0:2B:FD:6B:A2:25:FC:00:BD:B4:C6:FC:4C:19:E3:BD:D5:67:31:36:C6:5C:5A:79
a=setup:active
a=mid:video0
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
0:00:05.299344692 19097 0x5555559d88a0 LOG webrtctransportsendbin transportsendbin.c:135:pad_block:<dtlssrtpenc1:rtp_sink_0> blocking pad with data bufferlist: 0x7fffd000b0c0, 3 buffers, pts 0:00:05.007244535, dts 0:00:05.007244535, size 3684
0:00:05.305203122 19097 0x5555560b5400 DEBUG webrtcnicetransport nicetransport.c:186:_on_component_state_changed:<webrtcnicetransport0> 1 1 gathering
0:00:05.305245828 19097 0x5555560b5400 DEBUG webrtcnicetransport nicetransport.c:186:_on_component_state_changed:<webrtcnicetransport3> 1 2 gathering
0:00:05.305256126 19097 0x5555560b5400 DEBUG webrtcice gstwebrtcice.c:565:gst_webrtc_ice_gather_candidates:<webrtcice0> gather candidates for stream 2
0:00:05.305262790 19097 0x5555560b5400 DEBUG webrtcicestream icestream.c:177:gst_webrtc_ice_stream_gather_candidates:<webrtcicestream1> start gathering candidates
0:00:05.310647222 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:762:_collate_ice_gathering_states:<webrtcbin_568> ICE gathering state: 0x0
0:00:05.310660308 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:772:_collate_ice_gathering_states:<webrtcbin_568> returning complete
0:00:05.310668807 19097 0x5555560b5400 INFO webrtcbin gstwebrtcbin.c:920:_update_ice_gathering_state_task:<webrtcbin_568> ICE gathering state change from new(0) to complete(2)
0:00:05.310750590 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:762:_collate_ice_gathering_states:<webrtcbin_568> ICE gathering state: 0x0
0:00:05.310762935 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:772:_collate_ice_gathering_states:<webrtcbin_568> returning complete
0:00:05.310822757 19097 0x5555560b5400 INFO webrtcbin gstwebrtcbin.c:2286:_set_description_task:<webrtcbin_568> Attempting to set remote answer in the have-local-offer state
0:00:05.310832123 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:2287:_set_description_task:<webrtcbin_568> SDP contents
v=0
o=- 6033211127276408481 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:/6E0
a=ice-pwd:g1BZJ/aMJhrEZUzC0R8U7Jew
a=ice-options:trickle
a=fingerprint:sha-256 CC:C3:2E:DE:57:A2:20:3D:A0:2B:FD:6B:A2:25:FC:00:BD:B4:C6:FC:4C:19:E3:BD:D5:67:31:36:C6:5C:5A:79
a=setup:active
a=mid:video0
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 H264/90000
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
0:00:05.310855875 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:2407:_set_description_task:<webrtcbin_568> notify signaling-state from have-local-offer to stable
0:00:05.310865611 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:1826:_find_transceiver_for_sdp_media:<webrtcbin_568> Found transceiver (NULL)
0:00:05.310875263 19097 0x5555560b5400 DEBUG webrtcbin gstwebrtcbin.c:2026:_update_transceiver_from_sdp_media:<webrtcbin_568> mapping sdp session level attributes to caps
0:00:05.310888231 19097 0x5555560b5400 DEBUG webrtcbin gstwebrtcbin.c:2028:_update_transceiver_from_sdp_media:<webrtcbin_568> mapping sdp media level attributes to caps
0:00:05.310904954 19097 0x5555560b5400 DEBUG webrtcbin gstwebrtcbin.c:2043:_update_transceiver_from_sdp_media:<webrtcbin_568> looking at 0 pt: 96
0:00:05.310969949 19097 0x5555560b5400 TRACE webrtcbin gstwebrtcbin.c:2097:_update_transceiver_from_sdp_media:<webrtcbin_568> transceiver direction change
0:00:05.310986436 19097 0x5555560b5400 DEBUG webrtcbin gstwebrtcbin.c:2108:_update_transceiver_from_sdp_media:<webrtcbin_568> found existing send pad <webrtcbin_568:sink_0> for transceiver <webrtctransceiver0>
**
ERROR:gstwebrtcbin.c:2109:_update_transceiver_from_sdp_media: assertion failed: (pad->trans == rtp_trans)
Thread 11 "gst-pc-ops" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffc6c6f700 (LWP 19118)]
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) backtrace
#0 0x00007ffff6844e97 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff6846801 in __GI_abort () at abort.c:79
#2 0x00007ffff6c6a0b5 in g_assertion_message () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007ffff6c6a11a in g_assertion_message_expr () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007fffc604b632 in _update_transceiver_from_sdp_media (webrtc=webrtc@entry=0x5555560b81b0, sdp=<optimised out>, media_idx=media_idx@entry=0, rtp_trans=rtp_trans@entry=0x7fffe00a4000)
at gstwebrtcbin.c:2109
#5 0x00007fffc604d589 in _update_transceivers_from_sdp (sdp=0x555555f8ad70, source=<optimised out>, webrtc=0x5555560b81b0) at gstwebrtcbin.c:2206
#6 0x00007fffc604d589 in _set_description_task (webrtc=0x5555560b81b0, sd=0x555555f8ad50) at gstwebrtcbin.c:2439
#7 0x00007fffc604704f in _execute_op (op=0x555555ed7040) at gstwebrtcbin.c:580
#8 0x00007ffff6c43185 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#9 0x00007ffff6c43550 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#10 0x00007ffff6c43862 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#11 0x00007fffc60471ea in _gst_pc_thread (webrtc=0x5555560b81b0) at gstwebrtcbin.c:531
#12 0x00007ffff6c6af15 in () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#13 0x00007ffff4d6c6db in start_thread (arg=0x7fffc6c6f700) at pthread_create.c:463
#14 0x00007ffff692788f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Note that this is in gstreamer 1.14 (have tried running in 1.16, the failure is different, but it still fails - 1.16 output). I must be using the transceiver incorrectly, but I can't find any documentation clearly explaining it. Can someone point me in the right direction?