PlainTransport Producer not receiving RTP packets - SSRC mismatch

Hi, I’m experiencing an issue with PlainTransport where incoming RTP packets are being rejected with “no suitable Producer for received RTP packet” warnings, despite setting the same ssrc.

Setup

I have a video routing application with the following flow:

Browser1 → WebRtcTransport → Mediasoup → PlainTransport_OUT → External_SDK
External_SDK → PlainTransport_IN → Mediasoup → WebRtcTransport → Browser1

Each user has their own LinuxSDK that receives video from Mediasoup via PlainTransport, processes it, and sends it back to Mediasoup via another PlainTransport (self-loopback for now).

// Works fine
const outTransport = await router.createPlainTransport(config.mediasoup.plainTransport);
await outTransport.connect({ ip: sdkIp, port: 42987 });

const consumer = await outTransport.consume({
producerId: webRtcProducer.id,
rtpCapabilities: router.rtpCapabilities,
paused: false,
});

// Mediasoup sends with SSRC: 937728398
const inTransport = await router.createPlainTransport(config.mediasoup.plainTransport);
await inTransport.connect({ ip: sdkIp, port: 42987 });

// Create producer WITHOUT specifying SSRC (relying on comedia)
const producer = await inTransport.produce({
kind: ‘video’,
rtpParameters: {
mid: ‘0’,
codecs: [{
mimeType: ‘video/VP8’,
payloadType: 96,
clockRate: 90000,
parameters: {},
rtcpFeedback: [
{ type: ‘transport-cc’, parameter: ‘’ },
{ type: ‘ccm’, parameter: ‘fir’ },
{ type: ‘nack’, parameter: ‘’ },
{ type: ‘nack’, parameter: ‘pli’ },
],
}],
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: {} },
],
encodings: [{
ssrc: 937728398,
}], // Empty to let comedia detect
rtcp: { cname: ‘linuxsdk-stream’, reducedSize: true },
}
});

Issue

The PlainTransport Producer is created successfully, but when RTP packets with SSRC 937728398 arrive from the LinuxSDK, they are rejected with “no suitable Producer” warnings.

Logs:

mediasoup:WARN:Channel [pid:29068] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:937728398, payloadType:96] +9ms

Environment

  • mediasoup: 3.19.3

  • Node.js: v18+

“Creating the producer without specifying SSRC because we rely on Comedia” is not a thing and never was.

You need to specify ssrc or mid ir rid in rtpParameters and those values must match what the RTP packet contains. So no issue here.

That is a comment that I wrote when I was trying different things. If you read the rest, you can see that I specify the ssrc

The ssrc and payload type of the Consumer are not the same as those in its associated Producer. You should use consumer.rtpParameters.

I don’t understand what do you mean with using consumer.rtpParameters.

Mediasoup-Server:

const producer = await inTransport.produce({

                kind: 'video',

                rtpParameters: {

                    codecs: [

                        {

                            mimeType: 'video/VP8',

                            clockRate: 90000,

                            payloadType: 96,

                            parameters: {

                                'x-google-start-bitrate': 1000,

                            },

                            rtcpFeedback: [

                                { type: 'transport-cc' },

                                { type: 'ccm', parameter: 'fir' },

                                { type: 'nack' },

                                { type: 'nack', parameter: 'pli' },

                            ],

                        },

                    ],

                    encodings: [{

                        ssrc: 937728398,

                    }],

                    rtcp: {

                        cname: peer.id + '/linuxsdk-stream',

                        reducedSize: true,

                    },

                }

            });




            if (!mediasoupRouter.canConsume({

                producerId: producer.id,

                rtpCapabilities,

            })) {

                console.error('Client cannot consume the stream');

                return;

            }




            const consumer = await transport.consume({

                producerId: producer.id,

                rtpCapabilities,

                paused: true

            });




            console.log('✅ WebRTC Consumer created:', {

                id: consumer.id,

                ssrc: consumer.rtpParameters.encodings[0]?.ssrc,

                rtxSsrc: consumer.rtpParameters.encodings[0]?.rtx?.ssrc

            });




            peer.addConsumer('in', consumer);





            return {

                remotePeerId: remotePeer,

                producerId: producer.id,

                id: consumer.id,

                kind: consumer.kind,

                rtpParameters: consumer.rtpParameters,

                type: consumer.type,

                producerPaused: consumer.producerPaused

            };

Mediasoup-client:

if (!resp.data) {

                console.error('No data in consume response');

                return;

            }




            const { remotePeerId, id, producerId, kind, rtpParameters, producerPaused } = resp.data;

            console.log('Consuming stream:', { kind, rtpParameters });




            try {

                const consumer = await (consumeTransport as Transport).consume({

                    id,

                    producerId,

                    kind,

                    rtpParameters,

                });




                console.log('Consumer created:', {

                    id: consumer.id,

                    track: consumer.track,

                    paused: consumer.paused,

                    producerPaused: producerPaused

                });




                consumer.resume();




                const remoteStream = new MediaStream();

                remoteStream.addTrack(consumer.track);




                console.log('Remote stream created:', {

                    tracks: remoteStream.getTracks().map(t => ({

                        kind: t.kind,

                        enabled: t.enabled,

                        readyState: t.readyState

                    }))

                });




                setStreams(prev => {

                    console.log('Setting stream for:', remotePeerId);

                    return { ...prev, [remotePeerId]: remoteStream };

                });




            } catch (err) {

                console.error('Error creating consumer:', err);

            }

This code section is correct? The result is still the same, mediasoup server logs printing no suitable Producer for received RTP packet and the client doesn’t have any errors/warnings but the stream just shows a gray background with a loading circle. In Chrome’s WebRTC Internals I can see that the client isn’t receiving any packets.

  • You create a Producer in mediasoup server side which has ssrc 1111 and payloadType 100 (for example).
  • You create a Consumer to send that stream to an endpoint.
  • Such a Consumer has different output RTP values, for example, its ssrc may be 2222 and its payloadType may be 105.
  • You can get those values from consumer.rtpParameters.
  • So if such a Consumer sends the stream to an endpoint that later sends the stream back to mediasoup via a new Producer (and it doesn’t modify the ssrc and payloadType of the packets), then the ssrc and payloadType of the new Producer must be 2222 and 105, this is, the values in the consumer.rtpParameters rather than the value sin the original producer.rtpParameters.

I’ve updated my code to work as you say, but still the same behaviour.

Produce:

const onProduce = async (event, ws, websock) => {

        const { kind, rtpParameters } = event;

        let room = rooms.get(event.room.id);

        let peer = room.getPeer(event.peerId);

        let transport = peer.getWebRtcTransport('out');

        let outProducer = await transport.produce({ kind, rtpParameters });

        peer.addProducer('out', outProducer);

        const resp = {

            id: outProducer.id,

        }




        const { transport: outTransport, outParams } = await createPlainTransport(mediasoupRouter);

        peer.addPlainTransport('out', outTransport);

        if (!outTransport.connected) {

            console.log(event.sdkInfo);




            await outTransport.connect({

                ip: event.sdkInfo.ip,

                port: event.sdkInfo.port,

            });

            outTransport.connected = true;

        }

        const consumer = await outTransport.consume({

            producerId: outProducer.id,

            rtpCapabilities: mediasoupRouter.rtpCapabilities,

            paused: false,

        });




        console.log('✅ PlainRTP Consumer created:', {

            id: consumer.id,

            ssrc: consumer.rtpParameters.encodings[0]?.ssrc,

            rtxSsrc: consumer.rtpParameters.encodings[0]?.rtx?.ssrc

        });




        ssrcMap.set(peer.id, consumer.rtpParameters);




        await consumer.resume();




        peer.addConsumer('out', consumer);




        send(ws, 'produced', resp);




        broadcast(websock, 'newProducer', { id: outProducer.id, roomId: event.room.id, peerId: event.peerId });

    };

Consume:

    const onConsume = async (event, ws) => {

        let room = rooms.get(event.room.id);

        let peer = room.getPeer(event.peerId);

        let inTransport = peer.getPlainTransport('in');

        let transport = peer.getWebRtcTransport('in');




        const res = await createConsumer(peer, inTransport, transport, event.rtpCapabilities, event.remotePeerId);

        send(ws, 'consumed', res);

    };




    const createConsumer = async (peer, inTransport, transport, rtpCapabilities, remotePeer) => {

        try {




            const rtpParameters = ssrcMap.get(remotePeer);




            const producer = await inTransport.produce({

                kind: 'video',

                rtpParameters: {

                    codecs: rtpParameters.codecs,

                    encodings: rtpParameters.encodings

                }

            });




            console.log('✅ PlainRTP Producer created:', {

                id: producer.id,

                transportId: inTransport.id,

                ssrc: rtpParameters.encodings[0]?.ssrc,

                rtxSsrc: rtpParameters.encodings[0]?.rtx?.ssrc

            });




            if (!mediasoupRouter.canConsume({

                producerId: producer.id,

                rtpCapabilities,

            })) {

                console.error('Client cannot consume the stream');

                return;

            }




            const consumer = await transport.consume({

                producerId: producer.id,

                rtpCapabilities,

                paused: true

            });




            console.log('✅ WebRTC Consumer created:', {

                id: consumer.id,

                ssrc: consumer.rtpParameters.encodings[0]?.ssrc,

                rtxSsrc: consumer.rtpParameters.encodings[0]?.rtx?.ssrc

            });




            peer.addConsumer('in', consumer);





            return {

                remotePeerId: remotePeer,

                producerId: producer.id,

                id: consumer.id,

                kind: consumer.kind,

                rtpParameters: consumer.rtpParameters,

                type: consumer.type,

                producerPaused: consumer.producerPaused

            };





        } catch (error) {

            console.error('Error in createConsumer:', error);

            return null;

        }

    };

Mediasoup logs:

mediasoup:Worker worker process running [pid:13576] +259ms
mediasoup:Worker createRouter() +1ms
mediasoup:Channel request() [method:WORKER_CREATE_ROUTER] +3ms
mediasoup:Channel request succeeded [method:WORKER_CREATE_ROUTER, id:1] +1ms
mediasoup:Router constructor() +0ms
{
type: ‘getRouterRtpCapabilities’,
room: { id: ‘NGUgmGfs4m’, type: 10 },
peerId: ‘sip:linux_u3@test.org’
}
{“type”:“routerRtpCapabilities”,“data”:{“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/H264”,“clockRate”:90000,“parameters”:{“level-asymmetry-allowed”:1},“rtcpFeedback”:[{“type”:“nack”,“parameter”:“”},{“type”:“nack”,“parameter”:“pli”},{“type”:“ccm”,“parameter”:“fir”},{“type”:“goog-remb”,“parameter”:“”},{“type”:“transport-cc”,“parameter”:“”}],“preferredPayloadType”:96},{“kind”:“video”,“mimeType”:“video/rtx”,“preferredPayloadType”:101,“clockRate”:90000,“parameters”:{“apt”:96},“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”:“https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension”,“preferredId”:8,“preferredEncrypt”:false,“direction”:“recvonly”},{“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”},{“kind”:“audio”,“uri”:“http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”,“preferredId”:14,“preferredEncrypt”:false,“direction”:“sendrecv”},{“kind”:“video”,“uri”:“http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”,“preferredId”:14,“preferredEncrypt”:false,“direction”:"sendrecv”``}]}}
{
type: ‘getRouterRtpCapabilities’,
room: { id: ‘NGUgmGfs4m’, type: 10 },
peerId: ‘sip:linux_u4@test.org’
}
{“type”:“routerRtpCapabilities”,“data”:{“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/H264”,“clockRate”:90000,“parameters”:{“level-asymmetry-allowed”:1},“rtcpFeedback”:[{“type”:“nack”,“parameter”:“”},{“type”:“nack”,“parameter”:“pli”},{“type”:“ccm”,“parameter”:“fir”},{“type”:“goog-remb”,“parameter”:“”},{“type”:“transport-cc”,“parameter”:“”}],“preferredPayloadType”:96},{“kind”:“video”,“mimeType”:“video/rtx”,“preferredPayloadType”:101,“clockRate”:90000,“parameters”:{“apt”:96},“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”:“https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension”,“preferredId”:8,“preferredEncrypt”:false,“direction”:“recvonly”},{“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”},{“kind”:“audio”,“uri”:“http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”,“preferredId”:14,“preferredEncrypt”:false,“direction”:“sendrecv”},{“kind”:“video”,“uri”:“http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”,“preferredId”:14,“preferredEncrypt”:false,“direction”:"sendrecv”``}]}}
{
type: ‘createProducerTransport’,
forceTcp: false,
rtpCapabilities: {
codecs: [ [Object], [Object], [Object] ],
headerExtensions: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object]
]
},
room: { id: ‘NGUgmGfs4m’ },
peerId: ‘sip:linux_u3@test.org’
}
mediasoup:Router createWebRtcTransport() +1m
mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT] +1m
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::WebRtcTransport() | UDP socket buffer sizes [send:64512, recv:65536] +1ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::WebRtcTransport() | TCP sockets buffer sizes [send:64512, recv:65536] +1ms
mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT, id:2] +0ms
mediasoup:Transport constructor() +0ms
mediasoup:WebRtcTransport constructor() +0ms
mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000] +0ms
mediasoup:Channel request() [method:TRANSPORT_SET_MAX_INCOMING_BITRATE] +4ms
mediasoup:Channel request succeeded [method:TRANSPORT_SET_MAX_INCOMING_BITRATE, id:3] +0ms
{“type”:“producerTransportCreated”,“data”:{“id”:“5c5240f1-c86a-4551-b4ca-b2380668e02e”,“iceParameters”:{“usernameFragment”:“geb97l012z6qq1vap38awaxi3wvfva4j”,“password”:“m0xfdv67058c8zl4bpqc6c7wdulh546l”,“iceLite”:true},“iceCandidates”:[{“foundation”:“udpcandidate”,“priority”:1076302079,“ip”:“censored”,“address”:“censored”,“protocol”:“udp”,“port”:10024,“type”:“host”},{“foundation”:“tcpcandidate”,“priority”:1076276479,“ip”:“censored”,“address”:“censored”,“protocol”:“tcp”,“port”:10063,“type”:“host”,“tcpType”:“passive”}],“dtlsParameters”:{“fingerprints”:[{“algorithm”:“sha-512”,“value”:“D1:11:A0:CF:09:77:C9:92:AC:2A:9E:2E:2B:77:26:C7:8A:99:B0:5E:49:AF:08:58:73:2D:5A:65:15:A8:3B:E0:70:46:81:D3:59:93:4E:AB:F4:00:EB:44:42:FE:D6:D2:50:EB:18:ED:47:3A:07:62:B6:8C:A6:21:52:2B:AA:1C”},{“algorithm”:“sha-1”,“value”:“12:10:A4:86:9E:7B:1A:AA:24:A3:AD:71:C6:82:DE:B9:53:8A:B0:40”},{“algorithm”:“sha-256”,“value”:“1F:CB:DF:66:2F:0D:42:E2:B4:07:F6:D0:47:78:BE:DE:7E:40:27:07:20:77:9D:80:88:87:E4:64:00:04:C2:AE”},{“algorithm”:“sha-224”,“value”:“1B:47:20:89:C5:15:4E:7C:90:13:F2:94:1F:3B:A1:65:F9:A3:24:35:41:89:3F:66:2D:23:98:76”},{“algorithm”:“sha-384”,“value”:“41:DB:5A:D3:82:EC:7D:A7:04:EA:E4:43:1E:C8:E2:DA:56:8B:3D:E7:9A:87:03:9F:E4:0E:CC:11:AE:68:32:97:7C:32:70:BA:F2:B2:C0:3C:34:83:24:A2:D3:37:F9:4C”}],“role”:“auto”}}}
{
type: ‘connectProducerTransport’,
dtlsParameters: { role: ‘client’, fingerprints: [ [Object] ] },
transportId: ‘5c5240f1-c86a-4551-b4ca-b2380668e02e’,
room: { id: ‘NGUgmGfs4m’ },
peerId: ‘sip:linux_u3@test.org’
}
mediasoup:WebRtcTransport connect() +602ms
mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +602ms
mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:4] +0ms
{“type”:“producerTransportConnected”,“data”:{}}
{
type: ‘produce’,
transportId: ‘5c5240f1-c86a-4551-b4ca-b2380668e02e’,
kind: ‘video’,
rtpParameters: {
mid: ‘0’,
codecs: [ [Object], [Object] ],
headerExtensions: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object]
],
encodings: [ [Object] ],
rtcp: { cname: ‘0arGBs0IjfKA2a+F’, reducedSize: true }
},
room: { id: ‘NGUgmGfs4m’ },
peerId: ‘sip:linux_u3@test.org’,
sdkInfo: { ip: ‘censored’, port: censored}
}
mediasoup:Transport produce() +614ms
mediasoup:Channel request() [method:TRANSPORT_PRODUCE] +15ms
mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE, id:5] +1ms
mediasoup:Producer constructor() +0ms
mediasoup:Router createPlainTransport() +627ms
mediasoup:Channel request() [method:ROUTER_CREATE_PLAINTRANSPORT] +2ms
mediasoup:Channel request succeeded [method:ROUTER_CREATE_PLAINTRANSPORT, id:6] +0ms
mediasoup:Transport constructor() +8ms
mediasoup:PlainTransport constructor() +0ms
{ ip: ‘censored’, port: censored }
mediasoup:PlainTransport connect() +1ms
mediasoup:Channel request() [method:PLAINTRANSPORT_CONNECT] +2ms
mediasoup:Channel request succeeded [method:PLAINTRANSPORT_CONNECT, id:7] +1ms
mediasoup:Transport consume() +2ms
mediasoup:Channel request() [method:TRANSPORT_CONSUME] +2ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | [ssrc:578082769, payloadType:96] +0ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | NACK supported +1ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | PLI supported +0ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | FIR supported +0ms
mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:8] +0ms
mediasoup:Consumer constructor() +0ms
✅ PlainRTP Consumer created: {
id: ‘e2897f75-b5a3-4bae-a1be-bf899f6dfc05’,
ssrc: 578082769,
rtxSsrc: 578082770
}
mediasoup:Consumer resume() +1ms
mediasoup:Channel request() [method:CONSUMER_RESUME] +2ms
mediasoup:Channel request succeeded [method:CONSUMER_RESUME, id:9] +0ms
{“type”:“produced”,“data”:{“id”:“21eab043-102e-4162-94bc-9c3256a7f94e”}}
{
type: ‘createConsumerTransport’,
forceTcp: false,
room: { id: ‘NGUgmGfs4m’ },
peerId: ‘sip:linux_u4@test.org’,
sdkInfo: { ip: ‘censored’, port: censored }
}
mediasoup:Router createWebRtcTransport() +11ms
mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT] +2ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::WebRtcTransport() | UDP socket buffer sizes [send:64512, recv:65536] +1ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::WebRtcTransport() | TCP sockets buffer sizes [send:64512, recv:65536] +0ms
mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT, id:10] +1ms
mediasoup:Transport constructor() +9ms
mediasoup:WebRtcTransport constructor() +31ms
mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000] +0ms
mediasoup:Channel request() [method:TRANSPORT_SET_MAX_INCOMING_BITRATE] +1ms
mediasoup:Channel request succeeded [method:TRANSPORT_SET_MAX_INCOMING_BITRATE, id:11] +0ms
mediasoup:Router createPlainTransport() +3ms
mediasoup:Channel request() [method:ROUTER_CREATE_PLAINTRANSPORT] +0ms
mediasoup:Channel request succeeded [method:ROUTER_CREATE_PLAINTRANSPORT, id:12] +1ms
mediasoup:Transport constructor() +2ms
mediasoup:PlainTransport constructor() +12ms
mediasoup:PlainTransport connect() +0ms
mediasoup:Channel request() [method:PLAINTRANSPORT_CONNECT] +1ms
mediasoup:Channel request succeeded [method:PLAINTRANSPORT_CONNECT, id:13] +0ms
{“type”:“consumerTransportCreated”,“data”:{“id”:“04129bd6-0793-4e6e-a1b2-2dc0ac9c3e0b”,“iceParameters”:{“usernameFragment”:“haj2iahz2lfg6wepav8fvreg3m8pfp3a”,“password”:“vklowwb9gfpe82ozcxap5d4epg6nl7tk”,“iceLite”:true},“iceCandidates”:[{“foundation”:“udpcandidate”,“priority”:1076302079,“ip”:“censored”,“address”:“censored”,“protocol”:“udp”,“port”:10093,“type”:“host”},{“foundation”:“tcpcandidate”,“priority”:1076276479,“ip”:“censored”,“address”:“censored”,“protocol”:“tcp”,“port”:10014,“type”:“host”,“tcpType”:“passive”}],“dtlsParameters”:{“fingerprints”:[{“algorithm”:“sha-512”,“value”:“D1:11:A0:CF:09:77:C9:92:AC:2A:9E:2E:2B:77:26:C7:8A:99:B0:5E:49:AF:08:58:73:2D:5A:65:15:A8:3B:E0:70:46:81:D3:59:93:4E:AB:F4:00:EB:44:42:FE:D6:D2:50:EB:18:ED:47:3A:07:62:B6:8C:A6:21:52:2B:AA:1C”},{“algorithm”:“sha-1”,“value”:“12:10:A4:86:9E:7B:1A:AA:24:A3:AD:71:C6:82:DE:B9:53:8A:B0:40”},{“algorithm”:“sha-256”,“value”:“1F:CB:DF:66:2F:0D:42:E2:B4:07:F6:D0:47:78:BE:DE:7E:40:27:07:20:77:9D:80:88:87:E4:64:00:04:C2:AE”},{“algorithm”:“sha-224”,“value”:“1B:47:20:89:C5:15:4E:7C:90:13:F2:94:1F:3B:A1:65:F9:A3:24:35:41:89:3F:66:2D:23:98:76”},{“algorithm”:“sha-384”,“value”:“41:DB:5A:D3:82:EC:7D:A7:04:EA:E4:43:1E:C8:E2:DA:56:8B:3D:E7:9A:87:03:9F:E4:0E:CC:11:AE:68:32:97:7C:32:70:BA:F2:B2:C0:3C:34:83:24:A2:D3:37:F9:4C”}],“role”:“auto”}}}
{
type: ‘consume’,
transportId: ‘04129bd6-0793-4e6e-a1b2-2dc0ac9c3e0b’,
room: { id: ‘NGUgmGfs4m’ },
peerId: ‘sip:linux_u4@test.org’,
remotePeerId: ‘sip:linux_u3@test.org’,
rtpCapabilities: {
codecs: [ [Object], [Object], [Object] ],
headerExtensions: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object]
]
}
}
mediasoup:Transport produce() +5ms
mediasoup:Channel request() [method:TRANSPORT_PRODUCE] +5ms
mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE, id:14] +1ms
mediasoup:Producer constructor() +23ms
✅ PlainRTP Producer created: {
id: ‘3d757381-4c6c-4162-bc12-e2069e75a388’,
transportId: ‘8a4a36d1-1f47-418b-b302-7906ac6d5883’,
ssrc: 578082769,
rtxSsrc: 578082770
}
mediasoup:Transport consume() +3ms
mediasoup:Channel request() [method:TRANSPORT_CONSUME] +2ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | [ssrc:931841448, payloadType:96] +0ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | FIR supported +1ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | NACK supported +0ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | PLI supported +0ms
mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:15] +0ms
mediasoup:Consumer constructor() +16ms
✅ WebRTC Consumer created: {
id: ‘9b1df618-574e-4c93-98f0-8a2b96a930b9’,
ssrc: 931841448,
rtxSsrc: 931841449
}
{“type”:“consumed”,“data”:{“``remotePeerId":"sip:linux_u3@test.org``”,“producerId”:“3d757381-4c6c-4162-bc12-e2069e75a388”,“id”:“9b1df618-574e-4c93-98f0-8a2b96a930b9”,“kind”:“video”,“rtpParameters”:{“codecs”:[{“mimeType”:“video/H264”,“payloadType”:96,“clockRate”:90000,“parameters”:{“level-asymmetry-allowed”:1,“packetization-mode”:0,“profile-level-id”:“42e01f”},“rtcpFeedback”:[{“type”:“transport-cc”,“parameter”:“”},{“type”:“ccm”,“parameter”:“fir”},{“type”:“nack”,“parameter”:“”},{“type”:“nack”,“parameter”:“pli”}]},{“mimeType”:“video/rtx”,“payloadType”:101,“clockRate”:90000,“parameters”:{“apt”:96},“rtcpFeedback”:}],“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”:“http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01”,“id”:5,“encrypt”:false,“parameters”:{}},{“uri”:“urn:3gpp:video-orientation”,“id”:11,“encrypt”:false,“parameters”:{}},{“uri”:“urn:ietf:params:rtp-hdrext:toffset”,“id”:12,“encrypt”:false,“parameters”:{}},{“uri”:“http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”,“id”:14,“encrypt”:false,“parameters”:{}}],“encodings”:[{“ssrc”:931841448,“rtx”:{“ssrc”:931841449}}],“rtcp”:{“cname”:“f553903b”,“reducedSize”:true},“mid”:“0”},“type”:“simple”,"producerPaused”:false``}}
{
type: ‘connectConsumerTransport’,
dtlsParameters: { role: ‘client’, fingerprints: [ [Object] ] },
transportId: ‘04129bd6-0793-4e6e-a1b2-2dc0ac9c3e0b’,
room: { id: ‘NGUgmGfs4m’ },
peerId: ‘sip:linux_u4@test.org’
}
mediasoup:WebRtcTransport connect() +20ms
mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +8ms
mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:16] +1ms
{“type”:“consumerTransportConnected”,“data”:{}}
mediasoup:Channel [pid:13576] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘new’ to ‘connected’ [hasUseCandidate:false, hasNomination:false, nomination:0] +10ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +1ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role ‘server’ +1ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting
+0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::Run() | running [role:server] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘before SSL initialization’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client hello’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server hello’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write key exchange’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate request’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client certificate’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client key exchange’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read certificate verify’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read change cipher spec’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read finished’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write change cipher spec’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write finished’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::GetNegotiatedSrtpCryptoSuite() | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM +0ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +0ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +1ms
mediasoup:Channel [pid:13576] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘new’ to ‘connected’ [hasUseCandidate:false, hasNomination:false, nomination:0] +9ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +1ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role ‘server’ +0ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting
+1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::Run() | running [role:server] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘before SSL initialization’] +0ms
mediasoup:WARN:Channel [pid:13576]
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client hello’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server hello’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write key exchange’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate request’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘SSLv3/TLS write server done’] +0ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +2ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client certificate’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client key exchange’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read certificate verify’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read change cipher spec’] +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read finished’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write change cipher spec’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write finished’] +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +0ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +1ms
mediasoup:Channel [pid:13576] RTC::DtlsTransport::RTC::DtlsTransport::GetNegotiatedSrtpCryptoSuite() | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM +0ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +0ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +1ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127] +2ms
mediasoup:Channel [pid:13576] RTC::Producer::RTC::Producer::GetRtpStream() | ignoring RTX packet for not yet created RtpStream (ssrc lookup) +29ms
mediasoup:WARN:Channel [pid:13576] RTC::Producer::RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:1411536650] +22ms
mediasoup:Channel [pid:13576] RTC::Producer::RTC::Producer::CreateRtpStream() | [encodingIdx:0, ssrc:1718950167, rid:, payloadType:108] +4ms
mediasoup:Channel [pid:13576] RTC::Producer::RTC::Producer::CreateRtpStream() | FIR supported +0ms
mediasoup:Channel [pid:13576] RTC::Producer::RTC::Producer::CreateRtpStream() | NACK supported +1ms
mediasoup:Channel [pid:13576] RTC::Producer::RTC::Producer::CreateRtpStream() | PLI supported +0ms
mediasoup:Channel [pid:13576] RTC::Producer::RTC::Producer::ReceiveRtpPacket() | key frame received [ssrc:1718950167, seq:28177] +0ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::SendRtpPacket() | sync key frame received [ssrc:541516544, seq:28177, ts:3054433867] +0ms
mediasoup:Channel [pid:13576] RTC::SimpleConsumer::RTC::SimpleConsumer::SendRtpPacket() | sending sync packet [ssrc:578082769, seq:8390, ts:3054433867] from original [seq:28177] +0ms
mediasoup:Channel [pid:13576] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘connected’ to ‘completed’ [hasUseCandidate:true, hasNomination:false, nomination:0] +1ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms
mediasoup:Channel [pid:13576] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘connected’ to ‘completed’ [hasUseCandidate:true, hasNomination:false, nomination:0] +18ms
mediasoup:Channel [pid:13576] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms
mediasoup:WARN:Channel [pid:13576] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:578082769, payloadType:96] +15ms

Chrome WebRTC Internals:

I’m afraid I cannot verify your whole code. But what you need to check is what that Externam SDK does. It’s hard to believe that it just receives RTP packets and then sends these same RTP packets back to mediasoup server. Probably that SDK is decoding those packets and them encoding the media and generating different RTP packets that sends to mediasoup, and hence those packets have different ssrc, payload type, etc, and those are the values you must pass on the rtpParameters when you call transport.produce() in mediasoup server side.

The SDK is just doing a RTP pass-through. This are the logs of the SDK.

Learned mediasoup address: censored, SSRC: 1234 (pass-through mode)
RTP relay [0]: PT=127, Seq=5444, TS=173742133, SSRC=1234 (unchanged)
RTP relay [16]: PT=96, Seq=8390, TS=3054433867, SSRC=578082769 (unchanged)
RTP relay [27]: PT=72, Seq=6, TS=578082769, SSRC=2688225 (unchanged)
RTP relay [28]: PT=96, Seq=8401, TS=3054469867, SSRC=578082769 (unchanged)
RTP relay [66]: PT=72, Seq=6, TS=578082769, SSRC=2688226 (unchanged)
RTP relay [67]: PT=96, Seq=8439, TS=3054577867, SSRC=578082769 (unchanged)
RTP relay [100]: PT=96, Seq=8472, TS=3054649867, SSRC=578082769 (unchanged)
RTP relay [121]: PT=72, Seq=6, TS=578082769, SSRC=2688228 (unchanged)
RTP relay [122]: PT=96, Seq=8493, TS=3054704587, SSRC=578082769 (unchanged)

I can show you some wireshark traffic if you want

The SDK is also re-forwarding the mediasoup special “probator” video stream (ssrc 1234). It shouldn’t. Or you can just ignore it but then of course you will get that wargning:

RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1234, payloadType:127]

You must ensure that you are calling transport.producer() with rtpParameters.encodings including this ssrc:

RTP relay [16]: PT=96, Seq=8390, TS=3054433867, SSRC=578082769

And such ssrc 578082769 is the ssrc of the consumer.rtpParameters.encoding as told in previous comments.

And must also include the ssrc of the RTX stream. Again, just must call transport.produce() with those consumer.rtpParameters. And then periodically check producer.getStats() and/or producer.dump() to see what’s going on.

Okey, in the SDK I will ignore the “probator”.

Right now I’m creating the producer with the consumer.rtpParameters, you can check on a previous reply. I’ll check the producer.getStats().

Mediasoup → SDK consumer

✅ PlainRTP Consumer created: {
id: ‘e2897f75-b5a3-4bae-a1be-bf899f6dfc05’,
ssrc: 578082769,
rtxSsrc: 578082770
}

SDK → Mediasoup producer

✅ PlainRTP Producer created: {
id: ‘3d757381-4c6c-4162-bc12-e2069e75a388’,
transportId: ‘8a4a36d1-1f47-418b-b302-7906ac6d5883’,
ssrc: 578082769,
rtxSsrc: 578082770
}

Now I’m ignoring the “probator” and I checked the producer.getStats() and plainTransport.getStats() but they are empty.

Code:

const createConsumer = async (peer, inTransport, transport, rtpCapabilities, remotePeer) => {

        try {

            const rtpParameters = ssrcMap.get(remotePeer);

            const producer = await inTransport.produce({

                kind: 'video',

                rtpParameters: rtpParameters

            });


            console.log('✅ PlainRTP Transport check:', JSON.stringify(inTransport, null, 2));

            console.log('✅ PlainRTP Producer created:', JSON.stringify({

                id: producer.id,

                kind: producer.kind,

                type: producer.type,

                paused: producer.paused,

                rtpParameters: producer.rtpParameters

            }, null, 2));

            console.log('🔍 Verification:', {

                'Producer ID': producer.id,

                'PlainTransport ID': inTransport.id,

                'Producer exists': !!producer,

                'Transport connected': inTransport.connected

            });

            setInterval(async () => {

                const producerStats = await producer.getStats();
                console.log('Producer stats:', producerStats);
                const transportStats = await inTransport.getStats();
                console.log('PlainTransport stats:', transportStats);

            }, 1000);


            if (!mediasoupRouter.canConsume({

                producerId: producer.id,

                rtpCapabilities,

            })) {

                console.error('Client cannot consume the stream');

                return;

            }


            const consumer = await transport.consume({

                producerId: producer.id,

                rtpCapabilities,

                paused: true

            });


            console.log('✅ WebRTC Consumer created:', {

                id: consumer.id,

                ssrc: consumer.rtpParameters.encodings[0]?.ssrc,

                rtxSsrc: consumer.rtpParameters.encodings[0]?.rtx?.ssrc

            });


            peer.addConsumer('in', consumer);


            return {

                remotePeerId: remotePeer,

                producerId: producer.id,

                id: consumer.id,

                kind: consumer.kind,

                rtpParameters: consumer.rtpParameters,

                type: consumer.type,

                producerPaused: consumer.producerPaused

            };

        } catch (error) {

            console.error('Error in createConsumer:', error);

            return null;

        }

    };

Logs:
{
type: ‘createConsumerTransport’,
forceTcp: false,
room: { id: ‘F9pYKLcSCv’ },
peerId: ‘sip:linux_u4@test.org’,
sdkInfo: { ip: ‘censored’, port: censored }
}
mediasoup:Router createWebRtcTransport() +14ms
mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT] +4ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::WebRtcTransport() | UDP socket buffer sizes [send:64512, recv:65536] +1ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::WebRtcTransport() | TCP sockets buffer sizes [send:64512, recv:65536] +1ms
mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT, id:10] +0ms
mediasoup:Transport constructor() +12ms
mediasoup:WebRtcTransport constructor() +33ms
mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000] +0ms
mediasoup:Channel request() [method:TRANSPORT_SET_MAX_INCOMING_BITRATE] +1ms
mediasoup:Channel request succeeded [method:TRANSPORT_SET_MAX_INCOMING_BITRATE, id:11] +0ms
mediasoup:Router createPlainTransport() +4ms
mediasoup:Channel request() [method:ROUTER_CREATE_PLAINTRANSPORT] +1ms
mediasoup:Channel request succeeded [method:ROUTER_CREATE_PLAINTRANSPORT, id:12] +0ms
mediasoup:Transport constructor() +2ms
mediasoup:PlainTransport constructor() +15ms
mediasoup:PlainTransport connect() +0ms
mediasoup:Channel request() [method:PLAINTRANSPORT_CONNECT] +1ms
mediasoup:Channel request succeeded [method:PLAINTRANSPORT_CONNECT, id:13] +1ms
✅ PlainRTP Transport created: {
“_events”: {},
“_eventsCount”: 7,
“_maxListeners”: null,
“internal”: {
“routerId”: “fd16d662-a746-4811-8f42-17b633d1eb91”,
“transportId”: “7f498465-5bf7-4a7f-aaf4-e61a2e0191ad”
},
“channel”: {
“_events”: {},
“_eventsCount”: 6,
“_maxListeners”: null
},
“consumers”: {},
“dataProducers”: {},
“dataConsumers”: {},
“connected”: true
}
{“type”:“consumerTransportCreated”,“data”:{“id”:“1dad8a34-fe1a-466b-9b87-f8270c2bcb49”,“iceParameters”:{“usernameFragment”:“p6z6qmx3q9jg68mtef4jnbik7i0dz5zi”,“password”:“j8dksc3h87tacqcb0te59dgi1oujljt4”,“iceLite”:true},“iceCandidates”:[{“foundation”:“udpcandidate”,“priority”:1076302079,“ip”:“censored”,“address”:“censored”,“protocol”:“udp”,“port”:10054,“type”:“host”},{“foundation”:“tcpcandidate”,“priority”:1076276479,“ip”:“censored”,“address”:“censored”,“protocol”:“tcp”,“port”:10061,“type”:“host”,“tcpType”:“passive”}],“dtlsParameters”:{“fingerprints”:[{“algorithm”:“sha-384”,“value”:“8B:98:4B:4D:F2:B6:C8:FB:B1:17:3A:6C:2E:52:9C:12:DA:51:20:B8:26:97:29:CE:91:10:A4:C8:E9:FE:0E:4D:84:CE:C5:F1:CD:39:2E:57:54:FD:DE:9F:F6:BF:90:2F”},{“algorithm”:“sha-1”,“value”:“F9:14:4F:0E:FF:3A:E9:44:8F:D9:F3:56:A9:CA:B0:41:7B:74:8D:DE”},{“algorithm”:“sha-224”,“value”:“2E:F8:16:A1:C5:4E:59:96:EE:4A:31:C0:80:1B:1A:4C:D8:14:63:E5:60:5F:97:14:57:13:E4:07”},{“algorithm”:“sha-512”,“value”:“E0:A3:EA:C7:61:73:6C:5C:BE:AA:3E:28:43:D0:6B:7B:74:CD:66:5B:A3:EA:98:B6:2E:6D:F5:45:05:BF:1D:E7:51:FB:15:35:F9:A8:1A:7B:DF:D4:9E:D3:6B:10:A3:47:DD:4C:35:6E:E4:27:AF:DD:66:97:02:47:48:F9:EE:BB”},{“algorithm”:“sha-256”,“value”:“35:5B:70:24:97:76:A7:56:DE:B8:07:1F:51:D1:34:0B:3D:35:F8:9F:C7:8B:F0:31:AD:A8:FE:76:BE:6C:4B:7B”}],“role”:“auto”}}}
{
type: ‘consume’,
transportId: ‘1dad8a34-fe1a-466b-9b87-f8270c2bcb49’,
room: { id: ‘F9pYKLcSCv’ },
peerId: ‘sip:linux_u4@test.org’,
remotePeerId: ‘sip:linux_u3@test.org’,
rtpCapabilities: {
codecs: [ [Object], [Object], [Object] ],
headerExtensions: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object]
]
}
}
mediasoup:Transport produce() +6ms
mediasoup:Channel request() [method:TRANSPORT_PRODUCE] +6ms
mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE, id:14] +0ms
mediasoup:Producer constructor() +27ms
✅ PlainRTP Transport check: {
“_events”: {},
“_eventsCount”: 7,
“_maxListeners”: null,
“internal”: {
“routerId”: “fd16d662-a746-4811-8f42-17b633d1eb91”,
“transportId”: “7f498465-5bf7-4a7f-aaf4-e61a2e0191ad”
},
“channel”: {
“_events”: {},
“_eventsCount”: 7,
“_maxListeners”: null
},
“consumers”: {},
“dataProducers”: {},
“dataConsumers”: {},
“connected”: true
}
✅ PlainRTP Producer created: {
“id”: “0fa8cf1e-7547-490d-ab3a-97209f312648”,
“kind”: “video”,
“type”: “simple”,
“paused”: false,
“rtpParameters”: {
“codecs”: [
{
“mimeType”: “video/H264”,
“payloadType”: 96,
“clockRate”: 90000,
“parameters”: {
“level-asymmetry-allowed”: 1,
“packetization-mode”: 0,
“profile-level-id”: “42e01f”
},
“rtcpFeedback”: [
{
“type”: “nack”,
“parameter”: “”
},
{
“type”: “nack”,
“parameter”: “pli”
},
{
“type”: “ccm”,
“parameter”: “fir”
},
{
“type”: “transport-cc”,
“parameter”: “”
}
]
},
{
“mimeType”: “video/rtx”,
“payloadType”: 101,
“clockRate”: 90000,
“parameters”: {
“apt”: 96
},
“rtcpFeedback”:
}
],
“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”: “``http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01”``,
“id”: 5,
“encrypt”: false,
“parameters”: {}
},
{
“uri”: “urn:3gpp:video-orientation”,
“id”: 11,
“encrypt”: false,
“parameters”: {}
},
{
“uri”: “urn:ietf:params:rtp-hdrext:toffset”,
“id”: 12,
“encrypt”: false,
“parameters”: {}
},
{
“uri”: “``http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time”``,
“id”: 13,
“encrypt”: false,
“parameters”: {}
},
{
“uri”: “``http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”``,
“id”: 14,
“encrypt”: false,
“parameters”: {}
}
],
“encodings”: [
{
“ssrc”: 187838411,
“rtx”: {
“ssrc”: 187838412
},
“dtx”: false
}
],
“rtcp”: {
“cname”: “+9KTgndhToyomd1v”,
“reducedSize”: true
},
“mid”: “0”
}
}
🔍 Verification: {
‘Producer ID’: ‘0fa8cf1e-7547-490d-ab3a-97209f312648’,
‘PlainTransport ID’: ‘7f498465-5bf7-4a7f-aaf4-e61a2e0191ad’,
‘Producer exists’: true,
‘Transport connected’: true
}
mediasoup:Transport consume() +8ms
mediasoup:Channel request() [method:TRANSPORT_CONSUME] +7ms
mediasoup:Channel [pid:26104] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | [ssrc:134486767, payloadType:96] +2ms
mediasoup:Channel [pid:26104] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | FIR supported +0ms
mediasoup:Channel [pid:26104] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | NACK supported +0ms
mediasoup:Channel [pid:26104] RTC::SimpleConsumer::RTC::SimpleConsumer::CreateRtpStream() | PLI supported +0ms
mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME, id:15] +1ms
mediasoup:Consumer constructor() +27ms
✅ WebRTC Consumer created: {
id: ‘2ac06512-1565-4fd4-b848-2b6504d91299’,
ssrc: 134486767,
rtxSsrc: 134486768
}
{“type”:“consumed”,“data”:{“``remotePeerId":"sip:linux_u3@test.org``”,“producerId”:“0fa8cf1e-7547-490d-ab3a-97209f312648”,“id”:“2ac06512-1565-4fd4-b848-2b6504d91299”,“kind”:“video”,“rtpParameters”:{“codecs”:[{“mimeType”:“video/H264”,“payloadType”:96,“clockRate”:90000,“parameters”:{“level-asymmetry-allowed”:1,“packetization-mode”:0,“profile-level-id”:“42e01f”},“rtcpFeedback”:[{“type”:“transport-cc”,“parameter”:“”},{“type”:“ccm”,“parameter”:“fir”},{“type”:“nack”,“parameter”:“”},{“type”:“nack”,“parameter”:“pli”}]},{“mimeType”:“video/rtx”,“payloadType”:101,“clockRate”:90000,“parameters”:{“apt”:96},“rtcpFeedback”:}],“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”:“http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01”,“id”:5,“encrypt”:false,“parameters”:{}},{“uri”:“urn:3gpp:video-orientation”,“id”:11,“encrypt”:false,“parameters”:{}},{“uri”:“urn:ietf:params:rtp-hdrext:toffset”,“id”:12,“encrypt”:false,“parameters”:{}},{“uri”:“http://www.webrtc.org/experiments/rtp-hdrext/playout-delay”,“id”:14,“encrypt”:false,“parameters”:{}}],“encodings”:[{“ssrc”:134486767,“rtx”:{“ssrc”:134486768}}],“rtcp”:{“cname”:“+9KTgndhToyomd1v”,“reducedSize”:true},“mid”:“0”},“type”:“simple”,"producerPaused”:false``}}
{
type: ‘connectConsumerTransport’,
dtlsParameters: { role: ‘client’, fingerprints: [ [Object] ] },
transportId: ‘1dad8a34-fe1a-466b-9b87-f8270c2bcb49’,
room: { id: ‘F9pYKLcSCv’ },
peerId: ‘sip:linux_u4@test.org’
}
mediasoup:WebRtcTransport connect() +27ms
mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +8ms
mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:16] +0ms
{“type”:“consumerTransportConnected”,“data”:{}}
mediasoup:Channel [pid:26104] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘new’ to ‘connected’ [hasUseCandidate:false, hasNomination:false, nomination:0] +11ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role ‘server’ +1ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::Run() | running [role:server] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘before SSL initialization’] +1ms
mediasoup:Channel [pid:26104] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘new’ to ‘connected’ [hasUseCandidate:false, hasNomination:false, nomination:0] +0ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +1ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::MayRunDtlsTransport() | running DTLS transport in local role ‘server’ +2ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnecting() | DTLS connecting +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::Run() | running [role:server] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake start +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘before SSL initialization’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client hello’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server hello’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write key exchange’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate request’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘before SSL initialization’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client hello’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server hello’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write key exchange’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write certificate request’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | role: server, waiting:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client certificate’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client key exchange’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read certificate verify’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read change cipher spec’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read finished’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write change cipher spec’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write finished’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::GetNegotiatedSrtpCryptoSuite() | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM +1ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write server done’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client certificate’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read client key exchange’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read certificate verify’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read change cipher spec’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS read finished’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write change cipher spec’] +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | [role:server, action:‘SSLv3/TLS write finished’] +1ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::OnSslInfo() | DTLS handshake done +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::CheckRemoteFingerprint() | valid remote fingerprint +0ms
mediasoup:Channel [pid:26104] RTC::DtlsTransport::RTC::DtlsTransport::GetNegotiatedSrtpCryptoSuite() | chosen SRTP crypto suite: SRTP_AEAD_AES_256_GCM +0ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnDtlsTransportConnected() | DTLS connected +0ms
mediasoup:Channel [pid:26104] RTC::Producer::RTC::Producer::GetRtpStream() | ignoring RTX packet for not yet created RtpStream (ssrc lookup) +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Producer::RTC::Producer::ReceiveRtpPacket() | no stream found for received packet [ssrc:1982669892] +0ms
mediasoup:Channel [pid:26104] RTC::Producer::RTC::Producer::CreateRtpStream() | [encodingIdx:0, ssrc:134283648, rid:, payloadType:108] +1ms
mediasoup:Channel [pid:26104] RTC::Producer::RTC::Producer::CreateRtpStream() | FIR supported +1ms
mediasoup:Channel [pid:26104] RTC::Producer::RTC::Producer::CreateRtpStream() | NACK supported +0ms
mediasoup:Channel [pid:26104] RTC::Producer::RTC::Producer::CreateRtpStream() | PLI supported +0ms
mediasoup:Channel [pid:26104] RTC::Producer::RTC::Producer::ReceiveRtpPacket() | key frame received [ssrc:134283648, seq:9481] +0ms
mediasoup:Channel [pid:26104] RTC::SimpleConsumer::RTC::SimpleConsumer::SendRtpPacket() | sync key frame received [ssrc:391738667, seq:9481, ts:2718455265] +1ms
mediasoup:Channel [pid:26104] RTC::SimpleConsumer::RTC::SimpleConsumer::SendRtpPacket() | sending sync packet [ssrc:187838411, seq:14302, ts:2718455265] from original [seq:9481] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +16ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +15ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +4ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +8ms
mediasoup:Channel [pid:26104] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘connected’ to ‘completed’ [hasUseCandidate:true, hasNomination:false, nomination:0] +42ms
mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +1ms
mediasoup:Channel [pid:26104] RTC::IceServer::RTC::IceServer::HandleTuple() | transition from state ‘connected’ to ‘completed’ [hasUseCandidate:true, hasNomination:false, nomination:0] +0ms mediasoup:Channel [pid:26104] RTC::WebRtcTransport::RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +11ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +19ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +60ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +68ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +15ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +68ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +37ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +34ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +21ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +42ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +89ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +4ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +61ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +40ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +35ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +30ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +34ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +29ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +36ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +35ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +40ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +25ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +43ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +1ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +14ms
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +14ms
mediasoup:Producer getStats() +1s
mediasoup:Channel request() [method:PRODUCER_GET_STATS] +919ms
mediasoup:Channel request succeeded [method:PRODUCER_GET_STATS, id:17] +0ms
Producer stats:
mediasoup:WARN:Channel [pid:26104] RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] +58ms

mediasoup:PlainTransport getStats() +1s
mediasoup:Channel request() [method:TRANSPORT_GET_STATS] +1ms
mediasoup:Channel request succeeded [method:TRANSPORT_GET_STATS, id:20] +0ms
PlainTransport stats: [
{
transportId: ‘b4763184-59cb-4ff1-9865-02b10c12c53a’,
timestamp: 3036252608,
sctpState: undefined,
bytesReceived: 0,
recvBitrate: 0,
bytesSent: 0,
sendBitrate: 0,
rtpBytesReceived: 0,
rtpRecvBitrate: 0,
rtpBytesSent: 0,
rtpSendBitrate: 0,
rtxBytesReceived: 0,
rtxRecvBitrate: 0,
rtxBytesSent: 0,
rtxSendBitrate: 0,
probationBytesSent: 0,
probationSendBitrate: 0,
availableOutgoingBitrate: undefined,
availableIncomingBitrate: 0,
maxIncomingBitrate: undefined,
maxOutgoingBitrate: undefined,
minOutgoingBitrate: undefined,
rtpPacketLossReceived: 0,
rtpPacketLossSent: undefined,
type: ‘plain-rtp-transport’,
rtcpMux: true,
comedia: false,
tuple: {
localIp: ‘censored’,
localAddress: ‘censored’,
localPort: 10067,
remoteIp: ‘censored’,
remotePort: censored,
protocol: ‘udp’
},
rtcpTuple: undefined
}
]

I insist that I cannot check/verify your code.

You are getting this error:

RTC::Transport::RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:187838411, payloadType:96] 

So, what I would do is:

  1. Ensure that your SDK client is sending RTP to the IP and port in which your mediasoup PlainTransport is listening for RTP. This is, plainTransport.tuple.localAddress and plainTransport.tuple.localPort.
  2. Ensure that the Producer you are creating in the mediasoup PlainTransport has RTP parameters matching that SSRC and payload type.
  3. Using wireshark or a similar tool, verify that the RTP packets that your SDK client sends to mediasoup have that SSRC and payload type and verify that those packets are being sent to the local IP and port of the PlainTransport where you are calling produce().