WebRTC: browser offers to receive only, webrtcbin endlessly signals on-negotiation-needed

Michiel Konstapel michiel at aanmelder.nl
Wed Jul 14 12:59:40 UTC 2021


I'm trying to have the browser send an offer to my webrtcbin without 
tracks, just offerToReceiveVideo = offerToReceiveAudio = true. This is 
Chrome's offer:

type: offer, sdp: v=0
o=- 3378399417305009623 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:RR+k
a=ice-pwd:7rdM4ehFUxYT5eBJOHjD+QR4
a=ice-options:trickle
a=fingerprint:sha-256 2B:A6:0D:4E:DD:A6:70:C9:22:A1:20:00:F0:1C:28:B1:8D:6F:4A:B8:00:D8:B0:B0:71:76:63:DE:75:1D:91:2C
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 35 36 124 119 123 37
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:RR+k
a=ice-pwd:7rdM4ehFUxYT5eBJOHjD+QR4
a=ice-options:trickle
a=fingerprint:sha-256 2B:A6:0D:4E:DD:A6:70:C9:22:A1:20:00:F0:1C:28:B1:8D:6F:4A:B8:00:D8:B0:B0:71:76:63:DE:75:1D:91:2C
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:122 VP9/90000
a=rtcp-fb:122 goog-remb
a=rtcp-fb:122 transport-cc
a=rtcp-fb:122 ccm fir
a=rtcp-fb:122 nack
a=rtcp-fb:122 nack pli
a=fmtp:122 profile-id=1
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:35 AV1X/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:124 red/90000
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 ulpfec/90000
a=rtpmap:37 flexfec-03/90000
a=rtcp-fb:37 goog-remb
a=rtcp-fb:37 transport-cc
a=fmtp:37 repair-window=10000000


I have a webrtcbin with H.264 video and OPUS audio feeding into it. When 
started, it signals on-negotiation-needed:

0:00:19.521085415  5088 0x7f72a4034de0 DEBUG              webrtcbin 
gstwebrtcbin.c:279:gst_webrtcbin_sink_event:<webrtcbin:spk_42-view> On 
<webrtcbin:spk_42-view:sink_1> checking negotiation? 1, caps 
application/x-rtp, media=(string)audio, clock-rate=(int)48000, 
encoding-name=(string)OPUS, sprop-maxcapturerate=(string)48000, 
sprop-stereo=(string)0, payload=(int)96, encoding-params=(string)2, 
ssrc=(uint)1698041367, timestamp-offset=(uint)2332231012, 
seqnum-offset=(uint)4427
0:00:19.573505689  5088      0x2363400 DEBUG webrtcbin 
gstwebrtcbin.c:279:gst_webrtcbin_sink_event:<webrtcbin:spk_42-view> On 
<webrtcbin:spk_42-view:sink_0> checking negotiation? 1, caps 
application/x-rtp, media=(string)video, clock-rate=(int)90000, 
encoding-name=(string)H264, packetization-mode=(string)1, 
sprop-parameter-sets=(string)"Z0LAKJWgHgCJ+XAWoCAgKAAAH0AABhqEIA\=\=\,aM48gA\=\=", 
payload=(int)97, seqnum-offset=(uint)4023, 
timestamp-offset=(uint)3581144498, ssrc=(uint)1818410027, 
a-framerate=(string)25

I set the remote description to the offer, and ask for an answer, but 
the first answer only has VP8 video:

0:00:14.965521108  5262 0x7f3a90024640 DEBUG              webrtcbin 
gstwebrtcbin.c:319:gst_webrtc_bin_pad_new:<'':sink_0> new visible pad 
with direction sink
0:00:14.965896644  5262 0x7f3a90024640 DEBUG webrtcbin 
gstwebrtcbin.c:319:gst_webrtc_bin_pad_new:<'':sink_1> new visible pad 
with direction sink
0:00:14.966645866  5262 0x7f3a90024640 DEBUG webrtcbin 
gstwebrtcbin.c:5737:gst_webrtc_bin_change_state: changing state: NULL => 
READY
0:00:14.967108331  5262 0x7f3a90024640 DEBUG webrtcbin 
gstwebrtcbin.c:5737:gst_webrtc_bin_change_state: changing state: READY 
=> PAUSED
0:00:14.967213263  5262 0x7f3a90024640 DEBUG webrtcbin 
gstwebrtcbin.c:5737:gst_webrtc_bin_change_state: changing state: PAUSED 
=> PLAYING
0:00:14.967255398  5262 0x7f3a90024640 DEBUG webrtcbin 
gstwebrtcbin.c:5737:gst_webrtc_bin_change_state: changing state: PLAYING 
=> PLAYING
0:00:14.982021409  5262      0x34b1400 DEBUG webrtcbin 
gstwebrtcbin.c:279:gst_webrtcbin_sink_event:<webrtcbin:spk_42-view> On 
<webrtcbin:spk_42-view:sink_1> checking negotiation? 1, caps 
application/x-rtp, media=(string)audio, clock-rate=(int)48000, 
encoding-name=(string)OPUS, sprop-maxcapturerate=(string)48000, 
sprop-stereo=(string)0, payload=(int)96, encoding-params=(string)2, 
ssrc=(uint)1715306335, timestamp-offset=(uint)3970215235, 
seqnum-offset=(uint)25746
0:00:15.061982594  5262 0x7f3a80012c00 DEBUG webrtcbin 
gstwebrtcbin.c:279:gst_webrtcbin_sink_event:<webrtcbin:spk_42-view> On 
<webrtcbin:spk_42-view:sink_0> checking negotiation? 1, caps 
application/x-rtp, media=(string)video, clock-rate=(int)90000, 
encoding-name=(string)H264, packetization-mode=(string)1, 
sprop-parameter-sets=(string)"Z0LAKJWgHgCJ+XAWoCAgKAAAH0AABhqEIA\=\=\,aM48gA\=\=", 
payload=(int)97, seqnum-offset=(uint)4349, 
timestamp-offset=(uint)4239337664, ssrc=(uint)3751326270, 
a-framerate=(string)25
2021-07-14 14:38:51,444 INFO srtutils on-negotiation-needed
0:00:15.064742301  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:4325:_set_description_task:<webrtcbin:spk_42-view> 
Attempting to set remote offer in the stable state
0:00:15.064806297  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:4492:_set_description_task:<webrtcbin:spk_42-view> we are 
in ice controlling mode: true
0:00:15.157264085  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: NULL => READY
0:00:15.158004327  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: READY => PAUSED
0:00:15.158279424  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PAUSED => PLAYING
0:00:15.158497190  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: NULL => READY
0:00:15.159535181  5262 0x7f3a6c0190a0 FIXME default 
gstutils.c:4026:gst_pad_create_stream_id_internal:<nicesrc0:src> 
Creating random stream-id, consider implementing a deterministic way of 
creating a stream-id
0:00:15.159590895  5262 0x7f3a6c0190a0 WARN GST_PADS 
gstpad.c:4303:gst_pad_peer_query:<nicesrc0:src> could not send sticky events
0:00:15.162837000  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: READY => PAUSED
0:00:15.164229948  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PAUSED => PLAYING
0:00:15.165576050  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:746:gst_webrtc_ice_set_remote_credentials:<webrtcbin0:ice> 
Setting remote ICE credentials on ICE stream 1 ufrag:UEdf 
pwd:cmYR4+mJlv7JhfaK310sCKCi
0:00:15.165738843  5262 0x7f3a7c031630 FIXME default 
gstutils.c:4026:gst_pad_create_stream_id_internal:<nicesrc1:src> 
Creating random stream-id, consider implementing a deterministic way of 
creating a stream-id
0:00:15.172050742  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: NULL => READY
0:00:15.172797073  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: READY => PAUSED
0:00:15.173253881  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PAUSED => PLAYING
0:00:15.173637336  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: NULL => READY
0:00:15.176088379  5262 0x7f3a7c0045e0 FIXME default 
gstutils.c:4026:gst_pad_create_stream_id_internal:<nicesrc2:src> 
Creating random stream-id, consider implementing a deterministic way of 
creating a stream-id
0:00:15.176342014  5262 0x7f3a7c0045e0 WARN GST_PADS 
gstpad.c:4303:gst_pad_peer_query:<nicesrc2:src> could not send sticky events
0:00:15.178527641  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: READY => PAUSED
0:00:15.179807284  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PAUSED => PLAYING
0:00:15.181126192  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:746:gst_webrtc_ice_set_remote_credentials:<webrtcbin0:ice> 
Setting remote ICE credentials on ICE stream 2 ufrag:UEdf 
pwd:cmYR4+mJlv7JhfaK310sCKCi
2021-07-14 14:38:51,564 INFO srtutils remote description set: 
<GstWebRTC.WebRTCSessionDescription object at 0x7f3af741a888 
(GstWebRTCSessionDescription at 0x7f3aa4118580)>
0:00:15.182790012  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:3323:_create_sdp_task:<webrtcbin:spk_42-view> creating 
answer sdp with options (NULL)
0:00:15.182948017  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.183010238  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.183775093  5262 0x7f3a6c031c00 FIXME default 
gstutils.c:4026:gst_pad_create_stream_id_internal:<nicesrc3:src> 
Creating random stream-id, consider implementing a deterministic way of 
creating a stream-id
0:00:15.183929748  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:1600:_find_codec_preferences:<webrtctransceiver2> Could 
not find caps for mline 2
0:00:15.184138884  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.184200679  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
2021-07-14 14:38:51,567 INFO srtutils on_answer_created:

v=0
o=- 1542449444684893457 2 IN IP4 0.0.0.0
s=-
t=0 0
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=ice-ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n
a=ice-pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
a=mid:0
a=rtcp-mux
a=setup:active
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=inactive
a=fingerprint:sha-256 
1D:29:E3:99:15:B7:90:D3:D7:4B:C7:AB:6D:FE:A6:C4:F5:CC:D2:FA:07:0B:A3:3D:6A:B3:15:A1:C1:56:8D:AE
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=ice-ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n
a=ice-pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
a=mid:1
a=rtcp-mux
a=setup:active
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 ccm fir
a=inactive
a=fingerprint:sha-256 
1D:29:E3:99:15:B7:90:D3:D7:4B:C7:AB:6D:FE:A6:C4:F5:CC:D2:FA:07:0B:A3:3D:6A:B3:15:A1:C1:56:8D:AE

How did it decide on VP8 when its input is H.264? Then, if I set that as 
the local description, it fires on-negotiation-needed again:


0:00:15.188359523  5262      0x3ad6850 INFO               webrtcbin 
gstwebrtcbin.c:4325:_set_description_task:<webrtcbin:spk_42-view> 
Attempting to set local answer in the have-remote-offer state
0:00:15.189970596  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:4492:_set_description_task:<webrtcbin:spk_42-view> we are 
in ice controlling mode: false
0:00:15.190002306  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.190028273  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.190068370  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3731:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp session level attributes to caps
0:00:15.190073242  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3733:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp media level attributes to caps
0:00:15.190085717  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3746:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
looking at 0 pt: 111
0:00:15.190142867  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3892:_update_transceiver_from_sdp_media:<webrtcbin:spk_42-view> 
transceiver <webrtctransceiver0> direction change from none to inactive
0:00:15.190158887  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:329:_on_notify_dtls_client_status:<transportsendbin0> 
DTLS-SRTP encoder configured. Unlocking it and changing state <dtlssrtpenc0>
0:00:15.193798362  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:329:_on_notify_dtls_client_status:<transportsendbin0> 
DTLS-SRTP encoder configured. Unlocking it and changing state <dtlssrtpenc1>
0:00:15.195598812  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.195628443  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.195866037  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3731:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp session level attributes to caps
0:00:15.195875558  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3733:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp media level attributes to caps
0:00:15.195997110  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3746:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
looking at 0 pt: 96
0:00:15.196124436  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3892:_update_transceiver_from_sdp_media:<webrtcbin:spk_42-view> 
transceiver <webrtctransceiver1> direction change from none to inactive
0:00:15.196155894  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:329:_on_notify_dtls_client_status:<transportsendbin1> 
DTLS-SRTP encoder configured. Unlocking it and changing state <dtlssrtpenc2>
0:00:15.197359817  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:329:_on_notify_dtls_client_status:<transportsendbin1> 
DTLS-SRTP encoder configured. Unlocking it and changing state <dtlssrtpenc3>
0:00:15.198049151  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:3495:_connect_input_stream:<webrtcbin:spk_42-view:sink_0> 
linking input stream 0
0:00:15.198721321  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.198929452  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:3495:_connect_input_stream:<webrtcbin:spk_42-view:sink_1> 
linking input stream 1
0:00:15.199184951  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.199252142  5262 0x7f3a80012c00 INFO webrtcbin 
gstwebrtcbin.c:5632:on_rtpbin_new_sender_ssrc:<webrtcbin:spk_42-view> 
session 0 ssrc 3751326270 new sender ssrc
0:00:15.199598925  5262      0x34b1400 INFO webrtcbin 
gstwebrtcbin.c:5632:on_rtpbin_new_sender_ssrc:<webrtcbin:spk_42-view> 
session 1 ssrc 1715306335 new sender ssrc
0:00:15.199821121  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.199963080  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.202803810  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:805:gst_webrtc_ice_set_local_credentials:<webrtcbin0:ice> 
Setting local ICE credentials on ICE stream 1 
ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
0:00:15.202993633  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.203208710  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.203509293  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:805:gst_webrtc_ice_set_local_credentials:<webrtcbin0:ice> 
Setting local ICE credentials on ICE stream 2 
ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
0:00:15.205188305  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:823:gst_webrtc_ice_gather_candidates:<webrtcbin0:ice> 
gather candidates for stream 1
0:00:15.205396429  5262      0x3ad6850 DEBUG webrtcicestream 
icestream.c:177:gst_webrtc_ice_stream_gather_candidates:<webrtcicestream0> 
start gathering candidates
0:00:15.207012230  5262      0x3ad6850 DEBUG webrtcnicetransport 
nicetransport.c:186:_on_component_state_changed:<webrtcnicetransport0> 1 
1 gathering
0:00:15.208067985  5262      0x3ad6850 DEBUG webrtcnicetransport 
nicetransport.c:186:_on_component_state_changed:<webrtcnicetransport1> 1 
2 gathering
0:00:15.208646506  5262      0x3ad6850 DEBUG webrtcicestream 
icestream.c:116:_on_candidate_gathering_done:<webrtcicestream0> 1 
gathering done
0:00:15.208806734  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:823:gst_webrtc_ice_gather_candidates:<webrtcbin0:ice> 
gather candidates for stream 2
0:00:15.208961307  5262      0x3ad6850 DEBUG webrtcicestream 
icestream.c:177:gst_webrtc_ice_stream_gather_candidates:<webrtcicestream1> 
start gathering candidates
0:00:15.210687994  5262      0x3ad6850 DEBUG webrtcnicetransport 
nicetransport.c:186:_on_component_state_changed:<webrtcnicetransport2> 2 
1 gathering
0:00:15.211877308  5262      0x3ad6850 DEBUG webrtcnicetransport 
nicetransport.c:186:_on_component_state_changed:<webrtcnicetransport3> 2 
2 gathering
0:00:15.212072519  5262      0x3ad6850 DEBUG webrtcicestream 
icestream.c:116:_on_candidate_gathering_done:<webrtcicestream1> 2 
gathering done
2021-07-14 14:38:51,604 INFO srtutils on-negotiation-needed


That triggers my "set offer, ask for answer" code again, but this time, 
the answer does have H.264 video.


0:00:15.228541017  5262      0x3ad6850 INFO               webrtcbin 
gstwebrtcbin.c:1295:_update_peer_connection_state_task:<webrtcbin:spk_42-view> 
Peer connection state change from new(0) to connecting(1)
0:00:15.230429205  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:1225:_update_ice_gathering_state_task:<webrtcbin:spk_42-view> 
ICE gathering state change from new(0) to gathering(1)
0:00:15.232160720  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:1225:_update_ice_gathering_state_task:<webrtcbin:spk_42-view> 
ICE gathering state change from gathering(1) to complete(2)
0:00:15.232414793  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:4325:_set_description_task:<webrtcbin:spk_42-view> 
Attempting to set remote offer in the stable state
0:00:15.232567868  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:4492:_set_description_task:<webrtcbin:spk_42-view> we are 
in ice controlling mode: false
0:00:15.232687305  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.232853212  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.233006585  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:746:gst_webrtc_ice_set_remote_credentials:<webrtcbin0:ice> 
Setting remote ICE credentials on ICE stream 1 ufrag:UEdf 
pwd:cmYR4+mJlv7JhfaK310sCKCi
0:00:15.233113869  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.233262634  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.233406570  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:746:gst_webrtc_ice_set_remote_credentials:<webrtcbin0:ice> 
Setting remote ICE credentials on ICE stream 2 ufrag:UEdf 
pwd:cmYR4+mJlv7JhfaK310sCKCi
2021-07-14 14:38:51,617 INFO srtutils remote description set: 
<GstWebRTC.WebRTCSessionDescription object at 0x7f3af741af48 
(GstWebRTCSessionDescription at 0x7f3aa416c490)>
0:00:15.235706028  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:3323:_create_sdp_task:<webrtcbin:spk_42-view> creating 
answer sdp with options (NULL)
2021-07-14 14:38:51,620 INFO srtutils on_answer_created:

v=0
o=- 1542449444684893457 2 IN IP4 0.0.0.0
s=-
t=0 0
m=video 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=ice-ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n
a=ice-pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
a=mid:0
a=rtcp-mux
a=setup:active
a=rtpmap:97 H264/90000
a=framerate:25
a=fmtp:97 
packetization-mode=1;sprop-parameter-sets=Z0LAKJWgHgCJ+XAWoCAgKAAAH0AABhqEIA==,aM48gA==
a=ssrc:3751326270 msid:user2625019075 at host-23f83448 webrtctransceiver0
a=ssrc:3751326270 cname:user2625019075 at host-23f83448
a=sendonly
a=fingerprint:sha-256 
1D:29:E3:99:15:B7:90:D3:D7:4B:C7:AB:6D:FE:A6:C4:F5:CC:D2:FA:07:0B:A3:3D:6A:B3:15:A1:C1:56:8D:AE
m=audio 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=ice-ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n
a=ice-pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
a=mid:1
a=rtcp-mux
a=setup:active
a=rtpmap:96 OPUS/48000/2
a=fmtp:96 sprop-maxcapturerate=48000;sprop-stereo=0
a=ssrc:1715306335 msid:user2625019075 at host-23f83448 webrtctransceiver1
a=ssrc:1715306335 cname:user2625019075 at host-23f83448
a=sendonly
a=fingerprint:sha-256 
1D:29:E3:99:15:B7:90:D3:D7:4B:C7:AB:6D:FE:A6:C4:F5:CC:D2:FA:07:0B:A3:3D:6A:B3:15:A1:C1:56:8D:AE

2021-07-14 14:38:51,621 INFO srtutils setting local description
0:00:15.239510653  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:4325:_set_description_task:<webrtcbin:spk_42-view> 
Attempting to set local answer in the have-remote-offer state
0:00:15.239699831  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:4492:_set_description_task:<webrtcbin:spk_42-view> we are 
in ice controlling mode: false
0:00:15.239776376  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.239999841  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.240105900  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3731:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp session level attributes to caps
0:00:15.240114334  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3733:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp media level attributes to caps
0:00:15.240221854  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3746:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
looking at 0 pt: 97
0:00:15.240275660  5262      0x3ad6850 FIXME webrtcbin 
gstwebrtcbin.c:3841:_update_transceiver_from_sdp_media:<webrtcbin:spk_42-view> 
implement transceiver direction changes
0:00:15.240306760  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.240356443  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.240414495  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3731:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp session level attributes to caps
0:00:15.240420499  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3733:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
mapping sdp media level attributes to caps
0:00:15.240557729  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:3746:_update_transport_ptmap_from_media:<webrtcbin:spk_42-view> 
looking at 0 pt: 96
0:00:15.240610060  5262      0x3ad6850 FIXME webrtcbin 
gstwebrtcbin.c:3841:_update_transceiver_from_sdp_media:<webrtcbin:spk_42-view> 
implement transceiver direction changes
0:00:15.240619145  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.240680122  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.240729844  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:805:gst_webrtc_ice_set_local_credentials:<webrtcbin0:ice> 
Setting local ICE credentials on ICE stream 1 
ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
0:00:15.240738618  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.240946413  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.240996130  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:805:gst_webrtc_ice_set_local_credentials:<webrtcbin0:ice> 
Setting local ICE credentials on ICE stream 2 
ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
0:00:15.241003763  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:823:gst_webrtc_ice_gather_candidates:<webrtcbin0:ice> 
gather candidates for stream 1
0:00:15.241023932  5262      0x3ad6850 DEBUG webrtcicestream 
icestream.c:177:gst_webrtc_ice_stream_gather_candidates:<webrtcicestream0> 
start gathering candidates
0:00:15.241030587  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:823:gst_webrtc_ice_gather_candidates:<webrtcbin0:ice> 
gather candidates for stream 2
0:00:15.241034939  5262      0x3ad6850 DEBUG webrtcicestream 
icestream.c:177:gst_webrtc_ice_stream_gather_candidates:<webrtcicestream1> 
start gathering candidates
2021-07-14 14:38:51,623 INFO srtutils on-negotiation-needed
0:00:15.241607769  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:4325:_set_description_task:<webrtcbin:spk_42-view> 
Attempting to set remote offer in the stable state
0:00:15.241677069  5262      0x3ad6850 DEBUG webrtcbin 
gstwebrtcbin.c:4492:_set_description_task:<webrtcbin:spk_42-view> we are 
in ice controlling mode: false
0:00:15.241743688  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin0> 
changing state: PLAYING => PLAYING
0:00:15.241835549  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.241928179  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:746:gst_webrtc_ice_set_remote_credentials:<webrtcbin0:ice> 
Setting remote ICE credentials on ICE stream 1 ufrag:UEdf 
pwd:cmYR4+mJlv7JhfaK310sCKCi
0:00:15.241939628  5262      0x3ad6850 DEBUG webrtctransportsendbin 
transportsendbin.c:195:transport_send_bin_change_state:<transportsendbin1> 
changing state: PLAYING => PLAYING
0:00:15.242105492  5262      0x3ad6850 DEBUG webrtctransportreceivebin 
transportreceivebin.c:236:transport_receive_bin_change_state: changing 
state: PLAYING => PLAYING
0:00:15.242487623  5262      0x3ad6850 DEBUG webrtcice 
gstwebrtcice.c:746:gst_webrtc_ice_set_remote_credentials:<webrtcbin0:ice> 
Setting remote ICE credentials on ICE stream 2 ufrag:UEdf 
pwd:cmYR4+mJlv7JhfaK310sCKCi
2021-07-14 14:38:51,625 INFO srtutils remote description set: 
<GstWebRTC.WebRTCSessionDescription object at 0x7f3af741aee8 
(GstWebRTCSessionDescription at 0x7f3aa401fed0)>
0:00:15.243474103  5262      0x3ad6850 INFO webrtcbin 
gstwebrtcbin.c:3323:_create_sdp_task:<webrtcbin:spk_42-view> creating 
answer sdp with options (NULL)
2021-07-14 14:38:51,628 INFO srtutils on_answer_created:

v=0
o=- 1542449444684893457 2 IN IP4 0.0.0.0
s=-
t=0 0
m=video 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 0.0.0.0
a=ice-ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n
a=ice-pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
a=mid:0
a=rtcp-mux
a=setup:active
a=rtpmap:97 H264/90000
a=framerate:25
a=fmtp:97 
packetization-mode=1;sprop-parameter-sets=Z0LAKJWgHgCJ+XAWoCAgKAAAH0AABhqEIA==,aM48gA==
a=ssrc:3751326270 msid:user2625019075 at host-23f83448 webrtctransceiver0
a=ssrc:3751326270 cname:user2625019075 at host-23f83448
a=sendonly
a=fingerprint:sha-256 
1D:29:E3:99:15:B7:90:D3:D7:4B:C7:AB:6D:FE:A6:C4:F5:CC:D2:FA:07:0B:A3:3D:6A:B3:15:A1:C1:56:8D:AE
m=audio 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=ice-ufrag:LoyecsyyVzcyyCGDeABWAulrIpKDmH4n
a=ice-pwd:ZNdBoFhJ0ry93Ajc8Pq901irjOmbPdXQ
a=mid:1
a=rtcp-mux
a=setup:active
a=rtpmap:96 OPUS/48000/2
a=fmtp:96 sprop-maxcapturerate=48000;sprop-stereo=0
a=ssrc:1715306335 msid:user2625019075 at host-23f83448 webrtctransceiver1
a=ssrc:1715306335 cname:user2625019075 at host-23f83448
a=sendonly
a=fingerprint:sha-256 
1D:29:E3:99:15:B7:90:D3:D7:4B:C7:AB:6D:FE:A6:C4:F5:CC:D2:FA:07:0B:A3:3D:6A:B3:15:A1:C1:56:8D:AE

It just keeps signalling on-negotiation-needed. This doesn't happen when 
the webrtcbin creates the offer, nor when the browser is sending an 
offer to send audio/video. If I try to skip the set-remote-description 
the second time, and only ask for a new answer, it just says

ERROR              webrtcbin 
gstwebrtcbin.c:2913:_create_answer_task:<webrtcbin:spk_42-view> Asked to 
create an answer without a remote description

What am I doing wrong?

Kind regards,
Michiel


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20210714/bd2b67c8/attachment-0001.htm>


More information about the gstreamer-devel mailing list