versatica / mediasoup-client

mediasoup client side JavaScript library
https://mediasoup.org
ISC License
582 stars 237 forks source link

Failed to execute 'setRemoteDescription' on 'RTCPeerConnection' #291

Closed kalan4iki closed 7 months ago

kalan4iki commented 7 months ago

Bug Report

Your environment

Issue description

The problem with the new chrome update is reproduced even on the demo: DOMException: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: Media section has more than one track specified with a=ssrc lines which is not supported with Unified Plan. изображение

ibc commented 7 months ago

Please specify how to reproduce. Is this when activating the camera? Or when consuming media?

kalan4iki commented 7 months ago

When consuming microphone

ibc commented 7 months ago

Can you please enable debug logs and paste here the failing remote SDP? You should see a log line before the error with content "setRemoteDescription()" and the full SDP.

kalan4iki commented 7 months ago

mediasoup-client:Chrome55 receive() | calling pc.setRemoteDescription() [offer:

v=0
o=mediasoup-client 10000 4 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-lite
a=fingerprint:sha-256 04:B1:4E:DB:7D:0A:4B:79:C6:6E:66:36:47:EF:27:2D:56:FE:4B:98:7C:C0:68:2B:FC:CB:F1:52:4E:19:7D:1D
a=msid-semantic: WMS *
a=group:BUNDLE audio
m=audio 7 UDP/TLS/RTP/SAVPF 100
c=IN IP4 127.0.0.1
a=rtpmap:100 opus/48000/2
a=fmtp:100 maxplaybackrate=48000;stereo=1;useinbandfec=1;sprop-stereo=1;usedtx=1
a=rtcp-fb:100 nack 
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:13 http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time
a=setup:actpass
a=mid:audio
a=sendonly
a=ice-ufrag:47fjmsj2cl7lnij85kkcv9ov1icm8fgh
a=ice-pwd:q1l9wmx8qb1vdkpuneyi932dz8qk6xqz
a=candidate:udpcandidate 1 udp 1076302079 192.168.1.81 10009 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:861658784 cname:{1f5eee17-586b-410a-b230-86175184b39b}
a=ssrc:861658784 msid:q3mhSYAR-4nc1mIzAAAD-videoType 361ed17e-857f-4d7f-95a7-1af0831fba5e
a=ssrc:253623017 cname:{1f5eee17-586b-410a-b230-86175184b39b}
a=ssrc:253623017 msid:q3mhSYAR-4nc1mIzAAAD-videoType 48b5376d-5f75-4dc2-a624-14272804f565
a=rtcp-mux
a=rtcp-rsize
ibc commented 7 months ago

a=ssrc:861658784 cname:{1f5eee17-586b-410a-b230-86175184b39b} a=ssrc:861658784 msid:q3mhSYAR-4nc1mIzAAAD-videoType 361ed17e-857f-4d7f-95a7-1af0831fba5e a=ssrc:253623017 cname:{1f5eee17-586b-410a-b230-86175184b39b} a=ssrc:253623017 msid:q3mhSYAR-4nc1mIzAAAD-videoType 48b5376d-5f75-4dc2-a624-14272804f565

So this is wrong, there should be only one ssrc value. Issue probably triggered by the usage of NACK for OPUS. Will check later.

ibc commented 7 months ago

But if in the meantime you could log and paste here the parameters given to recvTransport.consume() that would help.

kalan4iki commented 7 months ago
{
    producerId: '78e71dbf-9b2d-4a57-85e5-125dcac50fa6',
    rtpCapabilities: {
        codecs: [
            {
                kind: 'audio',
                mimeType: 'audio/opus',
                clockRate: 48000,
                channels: 2,
                rtcpFeedback: [
                    { type: 'nack', parameter: '' },
                    { type: 'transport-cc', parameter: '' },
                ],
                parameters: {},
                preferredPayloadType: 100,
            },
            {
                kind: 'video',
                mimeType: 'video/VP8',
                clockRate: 90000,
                rtcpFeedback: [
                    { type: 'nack', parameter: '' },
                    { type: 'nack', parameter: 'pli' },
                    { type: 'ccm', parameter: 'fir' },
                    { type: 'goog-remb', parameter: '' },
                    { type: 'transport-cc', parameter: '' },
                ],
                parameters: { 'x-google-start-bitrate': 2000 },
                preferredPayloadType: 101,
            },
            {
                kind: 'video',
                mimeType: 'video/rtx',
                preferredPayloadType: 102,
                clockRate: 90000,
                parameters: { apt: 101 },
                rtcpFeedback: [],
            },
        ],
        headerExtensions: [
            {
                kind: 'audio',
                uri: 'urn:ietf:params:rtp-hdrext:sdes:mid',
                preferredId: 1,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'urn:ietf:params:rtp-hdrext:sdes:mid',
                preferredId: 1,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id',
                preferredId: 2,
                preferredEncrypt: false,
                direction: 'recvonly',
            },
            {
                kind: 'video',
                uri: 'urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id',
                preferredId: 3,
                preferredEncrypt: false,
                direction: 'recvonly',
            },
            {
                kind: 'audio',
                uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time',
                preferredId: 4,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time',
                preferredId: 4,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'audio',
                uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01',
                preferredId: 5,
                preferredEncrypt: false,
                direction: 'recvonly',
            },
            {
                kind: 'video',
                uri: 'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01',
                preferredId: 5,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07',
                preferredId: 6,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'urn:ietf:params:rtp-hdrext:framemarking',
                preferredId: 7,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'audio',
                uri: 'urn:ietf:params:rtp-hdrext:ssrc-audio-level',
                preferredId: 10,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'urn:3gpp:video-orientation',
                preferredId: 11,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'urn:ietf:params:rtp-hdrext:toffset',
                preferredId: 12,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'audio',
                uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time',
                preferredId: 13,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
            {
                kind: 'video',
                uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time',
                preferredId: 13,
                preferredEncrypt: false,
                direction: 'sendrecv',
            },
        ],
    },
    appData: {
        type: 'audioType',
        peer: {
            id: 'BBYFwfgI7raO-OK9AAAD',
            data: {
                user: {
                    color: '#0c57b9',
                    first_name: 'A',
                    id: 'ff87eb78-efc2-4b9e-a12e-2072f5091ed1',
                    last_name: 'Admin',
                    middle_name: 'D',
                    online: true,
                    full_name: 'Admin A D',
                    last_online: 'None',
                    username: 'admin_user',
                    external_id: '6b80fed3-bc39-4e35-a19d-de5c07057fe7',
                    email: 'admin_user@quarta.su',
                    token:
                        'CC3CB0A1ED456A4CDF9EA287587AFE3CE2F7ADA1958C5E1856EC50888F228500',
                },
                custom_id: 'ff87eb78-efc2-4b9e-a12e-2072f5091ed1',
            },
            connected_at: 1707909679346,
            session_id: '6d57d9c9-badf-46d5-a8d1-f03829cb9a7e',
            disconnected_at: null,
            custom_id: 'ff87eb78-efc2-4b9e-a12e-2072f5091ed1',
        },
    },
    enableRtx: true,
    paused: false,
}
ibc commented 7 months ago

Sorry, I meant in mediasoup-client side.

kalan4iki commented 7 months ago

jsonformatter.txt

{ "id": "a1e93d9c-7003-4082-9f6e-41cae71554d5", "producerId": "8968bbe3-2ff0-4a16-bfea-b2bdd977f6ae", "kind": "audio", "rtpParameters": { "codecs": [ { "mimeType": "audio/opus", "payloadType": 100, "clockRate": 48000, "channels": 2, "parameters": { "maxplaybackrate": 48000, "stereo": 1, "useinbandfec": 1, "sprop-stereo": 1, "usedtx": 1 }, "rtcpFeedback": [ { "type": "nack", "parameter": "" } ] } ], "headerExtensions": [ { "uri": "urn:ietf:params:rtp-hdrext:sdes:mid", "id": 1, "encrypt": false, "parameters": {} }, { "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time", "id": 4, "encrypt": false, "parameters": {} }, { "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level", "id": 10, "encrypt": false, "parameters": {} }, { "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time", "id": 13, "encrypt": false, "parameters": {} } ], "encodings": [ { "ssrc": 251983012 } ], "rtcp": { "cname": "{acc4f34c-9116-40b7-b9af-16eb21200aa7}", "reducedSize": true }, "mid": "2" }, "appData": { "type": "audioType", "peer": { "id": "16WTY-U6COCia3CAAAAD", "data": { "user": { "id": "ff87eb78-efc2-4b9e-a12e-2072f5091ed1", "external_id": "6b80fed3-bc39-4e35-a19d-de5c07057fe7", "first_name": "A", "last_name": "Admin", "middle_name": "D", "email": "admin_user@quarta.su", "username": "admin_user", "online": true, "last_online": null, "full_name": "Admin A D", "token": "CC3CB0A1ED456A4CDF9EA287587AFE3CE2F7ADA1958C5E1856EC50888F228500", "color": "#0c57b9" }, "custom_id": "ff87eb78-efc2-4b9e-a12e-2072f5091ed1" }, "connected_at": 1707910313317, "session_id": "6d57d9c9-badf-46d5-a8d1-f03829cb9a7e", "disconnected_at": null, "custom_id": "ff87eb78-efc2-4b9e-a12e-2072f5091ed1" } }, "streamId": "16WTY-U6COCia3CAAAAD-videoType" }

ibc commented 7 months ago

Thanks. The bug is in mediasoup-client when calling consume() with OPUS codec and enableRtx:true. Will fix soon.

ibc commented 7 months ago

I cannot reproduce the issue with very similar settngs and Chrome 121.0.6167.184. The remote SDP that mediasoup-client generates only has a a=ssrc line as expected.

v=0
o=mediasoup-client 10000 2 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-lite
a=fingerprint:sha-224 3F:C5:76:3A:23:DA:9D:D1:90:BB:93:2D:74:D2:C6:98:9A:C8:BB:03:00:12:68:9B:E6:D6:5F:D8
a=msid-semantic: WMS *
a=group:BUNDLE datachannel 0
m=application 7 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 127.0.0.1
a=setup:actpass
a=mid:datachannel
a=ice-ufrag:87ist39j6rg9sosjdgrp60y43ohyltpc
a=ice-pwd:ypw2jlvh4xyzqie9ralboqk6l6b0r3z6
a=candidate:udpcandidate 1 udp 1076302079 192.168.1.38 44444 typ host
a=candidate:tcpcandidate 1 tcp 1076276479 192.168.1.38 44444 typ host tcptype passive
a=end-of-candidates
a=ice-options:renomination
a=sctp-port:5000
a=max-message-size:262144
m=audio 7 UDP/TLS/RTP/SAVPF 100
c=IN IP4 127.0.0.1
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;useinbandfec=1;sprop-stereo=1;usedtx=1
a=rtcp-fb:100 nack 
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:actpass
a=mid:0
a=msid:ygestolh-mic-webcam 8caa1fcb-0822-4f02-9bb1-4ac03a97649b
a=sendonly
a=ice-ufrag:87ist39j6rg9sosjdgrp60y43ohyltpc
a=ice-pwd:ypw2jlvh4xyzqie9ralboqk6l6b0r3z6
a=candidate:udpcandidate 1 udp 1076302079 192.168.1.38 44444 typ host
a=candidate:tcpcandidate 1 tcp 1076276479 192.168.1.38 44444 typ host tcptype passive
a=end-of-candidates
a=ice-options:renomination
a=ssrc:434378758 cname:yD9jP5w0Yl4NDece
a=rtcp-mux
a=rtcp-rsize

But now I see that you are using Chrome55 SUPER OLD handler, why? Are you calling device = new Device({ handlerName: 'Chrome55' })? and why?

mediasoup-client:Chrome55 receive() | calling pc.setRemoteDescription()

ibc commented 7 months ago

Closing since the bug is invalid. Chrome55 handler doesn't work on Chrome 121 because Chrome55 mediasoup-client handler uses Plan-B which is no longer available in modern Chrome versions.