PlainRTP Not outputting on UDP PORT

Hello, I am trying to get plainrtp as an outgoing rtp endpoint to be captured by an external program. Here is my code:

type or paste const mediasoup = require('mediasoup');
const fs = require('fs');
const https = require('https');
const express = require('express');
const socketIO = require('socket.io');
const config = require('./config');

// Global variables
let worker;
let webServer;
let socketServer;
let expressApp;
let producer;
let consumer;
let producerTransport;
let consumerTransport;
let mediasoupRouter;

(async () => {
  try {
    await runExpressApp();
    await runWebServer();
    await runSocketServer();
    await runMediasoupWorker();
  } catch (err) {
    console.error(err);
  }
})();

async function runExpressApp() {
  expressApp = express();
  expressApp.use(express.json());
  expressApp.use(express.static(__dirname));

  expressApp.use((error, req, res, next) => {
    if (error) {
      console.warn('Express app error,', error.message);

      error.status = error.status || (error.name === 'TypeError' ? 400 : 500);

      res.statusMessage = error.message;
      res.status(error.status).send(String(error));
    } else {
      next();
    }
  });
}

async function runWebServer() {
  const { sslKey, sslCrt } = config;
  if (!fs.existsSync(sslKey) || !fs.existsSync(sslCrt)) {
    console.error('SSL files are not found. check your config.js file');
    process.exit(0);
  }
  const tls = {
    cert: fs.readFileSync(sslCrt),
    key: fs.readFileSync(sslKey),
  };
  webServer = https.createServer(tls, expressApp);
  webServer.on('error', (err) => {
    console.error('starting web server failed:', err.message);
  });

  await new Promise((resolve) => {
    const { listenIp, listenPort } = config;
    webServer.listen(listenPort, listenIp, () => {
      const listenIps = config.mediasoup.webRtcTransport.listenIps[0];
      const ip = listenIps.announcedIp || listenIps.ip;
      console.log('server is running');
      console.log(`open https://${ip}:${listenPort} in your web browser`);
      resolve();
    });
  });
}

async function runSocketServer() {
  socketServer = socketIO(webServer, {
    serveClient: false,
    path: '/server',
    log: false,
  });

  socketServer.on('connection', (socket) => {
    console.log('client connected');

    // inform the client about existence of producer
    if (producer) {
      socket.emit('newProducer');
    }

    socket.on('disconnect', () => {
      console.log('client disconnected');
    });

    socket.on('connect_error', (err) => {
      console.error('client connection error', err);
    });

    socket.on('getRouterRtpCapabilities', (data, callback) => {
      callback(mediasoupRouter.rtpCapabilities);
    });
    
   socket.on('startRecording', async (data, callback) => {
      callback(await startRecording());
    });

    socket.on('createProducerTransport', async (data, callback) => {
      try {
        const { transport, params } = await createWebRtcTransport();
        producerTransport = transport;
        callback(params);
      } catch (err) {
        console.error(err);
        callback({ error: err.message });
      }
    });

    socket.on('createConsumerTransport', async (data, callback) => {
      try {
        const { transport, params } = await createWebRtcTransport();
        consumerTransport = transport;
        callback(params);
      } catch (err) {
        console.error(err);
        callback({ error: err.message });
      }
    });

    socket.on('connectProducerTransport', async (data, callback) => {
      await producerTransport.connect({ dtlsParameters: data.dtlsParameters });
      callback();
    });

    socket.on('connectConsumerTransport', async (data, callback) => {
      await consumerTransport.connect({ dtlsParameters: data.dtlsParameters });
      callback();
    });

    socket.on('produce', async (data, callback) => {
      const {kind, rtpParameters} = data;
      producer = await producerTransport.produce({ kind, rtpParameters });
      callback({ id: producer.id });

      // inform clients about new producer
      socket.broadcast.emit('newProducer');
    });

    socket.on('consume', async (data, callback) => {
      callback(await createConsumer(producer, data.rtpCapabilities));
    });

    socket.on('resume', async (data, callback) => {
      await consumer.resume();
      callback();
    });
  });
}

async function runMediasoupWorker() {
  worker = await mediasoup.createWorker({
    logLevel: config.mediasoup.worker.logLevel,
    logTags: config.mediasoup.worker.logTags,
    rtcMinPort: config.mediasoup.worker.rtcMinPort,
    rtcMaxPort: config.mediasoup.worker.rtcMaxPort,
  });

  worker.on('died', () => {
    console.error('mediasoup worker died, exiting in 2 seconds... [pid:%d]', worker.pid);
    setTimeout(() => process.exit(1), 2000);
  });

  const mediaCodecs = config.mediasoup.router.mediaCodecs;
  mediasoupRouter = await worker.createRouter({ mediaCodecs });
}

async function createWebRtcTransport() {
  const {
    maxIncomingBitrate,
    initialAvailableOutgoingBitrate
  } = config.mediasoup.webRtcTransport;

  const transport = await mediasoupRouter.createWebRtcTransport({
    listenIps: config.mediasoup.webRtcTransport.listenIps,
    enableUdp: true,
    enableTcp: true,
    preferUdp: true,
    initialAvailableOutgoingBitrate,
  });
  if (maxIncomingBitrate) {
    try {
      await transport.setMaxIncomingBitrate(maxIncomingBitrate);
    } catch (error) {
    }
  }
  return {
    transport,
    params: {
      id: transport.id,
      iceParameters: transport.iceParameters,
      iceCandidates: transport.iceCandidates,
      dtlsParameters: transport.dtlsParameters
    },
  };
}

async function createConsumer(producer, rtpCapabilities) {
  if (!mediasoupRouter.canConsume(
    {
      producerId: producer.id,
      rtpCapabilities,
    })
  ) {
    console.error('can not consume');
    return;
  }
  try {
    consumer = await consumerTransport.consume({
      producerId: producer.id,
      rtpCapabilities,
      paused: producer.kind === 'video',
    });
  } catch (error) {
    console.error('consume failed', error);
    return;
  }

  if (consumer.type === 'simulcast') {
    await consumer.setPreferredLayers({ spatialLayer: 2, temporalLayer: 2 });
  }

  return {
    producerId: producer.id,
    id: consumer.id,
    kind: consumer.kind,
    rtpParameters: consumer.rtpParameters,
    type: consumer.type,
    producerPaused: consumer.producerPaused
  };
}



async function startRecording() {
  const router = config.mediasoup.router;

  // Start mediasoup's RTP consumer(s)

    const rtpTransport = await mediasoupRouter.createPlainTransport({
      // No RTP will be received from the remote side
      comedia: false,

      // FFmpeg and GStreamer don't support RTP/RTCP multiplexing ("a=rtcp-mux" in SDP)
      rtcpMux: false,

      ...config.mediasoup.plainRtpTransport
    });
    router.videoTransport = rtpTransport;

    await rtpTransport.connect({
      ip: config.mediasoup.recording.ip,
      port: config.mediasoup.recording.videoPort,
      rtcpPort: config.mediasoup.recording.videoPortRtcp
    });

    console.log(
      "mediasoup VIDEO RTP SEND transport connected: %s:%d <--> %s:%d (%s)",
      rtpTransport.tuple.localIp,
      rtpTransport.tuple.localPort,
      rtpTransport.tuple.remoteIp,
      rtpTransport.tuple.remotePort,
      rtpTransport.tuple.protocol
    );

    console.log(
      "mediasoup VIDEO RTCP SEND transport connected: %s:%d <--> %s:%d (%s)",
      rtpTransport.rtcpTuple.localIp,
      rtpTransport.rtcpTuple.localPort,
      rtpTransport.rtcpTuple.remoteIp,
      rtpTransport.rtcpTuple.remotePort,
      rtpTransport.rtcpTuple.protocol
    );
    const rtpConsumer = await rtpTransport.consume({
      producerId: producer.id,
      rtpCapabilities: mediasoupRouter.rtpCapabilities, // Assume the recorder supports same formats as mediasoup's router
      paused: false
    });

    router.videoConsumer = rtpConsumer;

    console.log(
      "mediasoup VIDEO RTP SEND consumer created, kind: %s, type: %s, paused: %s, SSRC: %s CNAME: %s",
      rtpConsumer.kind,
      rtpConsumer.type,
      rtpConsumer.paused,
      rtpConsumer.rtpParameters.encodings[0].ssrc,
      rtpConsumer.rtpParameters.rtcp.cname
    );

 //  const consumer = router.videoConsumer;
    router.videoConsumer.resume();


}

I am able to connect, publish, but when i try to record i get this and nothing is sent to the UDP ports. I checked netstat -an | grep 500 to see if the ports are being consumed but i get nothing on the data ports. Am i missing anything in the startRecording() function ? Thank you

LOGS seen on NODE CONSOLE:

client connected
mediasoup VIDEO RTP SEND transport connected: 127.0.0.1:10099 <–> 127.0.0.1:5006 (udp)
mediasoup VIDEO RTCP SEND transport connected: 127.0.0.1:10051 <–> 127.0.0.1:5007 (udp)
mediasoup VIDEO RTP SEND consumer created, kind: video, type: simple, paused: false, SSRC: 490767103 CNAME: v0DsId7KomagyQsQ

netstat -an | grep 10017
udp 0 0 127.0.0.1:10017 0.0.0.0:*
root@cdn-03:/opt/mediasoup-sample-app# netstat -an | grep 10057
udp 0 0 127.0.0.1:10057 0.0.0.0:*
root@cdn-03:/opt/mediasoup-sample-app# netstat -an | grep 10057
udp 0 0 127.0.0.1:10057 0.0.0.0:*

netstat -an | grep 5005 -> NOTHING
netstat -an | grep 5006 -> NOTHING
netstat -an | grep 5007 -> NOTHING

Can you please attach the rtc statistics of the following:
rtpTransport, rtpConsumer

You can do the following to get the rtc stats,
await rtpTransport.getStats()

Hello,
I added that unde mediasoupRouter.videoConsumer.resume();
await console.log(rtpTransport.getStats())

Console.log shows:
Promise { pending }

Do the following,

Console.log(JSON.stringify(await rtpTransport.getStats()))

Console.log(JSON.stringify(await rtpConsumer.getStats()))

@OG-RTC,

You should better check the mediasoup logs instead of relying on your own ones.

Hello, here are the console.log output, @jmillan can you please advise how to get mediasoup logs?
Thanks to all

[{“availableOutgoingBitrate”:600000,“bytesReceived”:0,“bytesSent”:452,“comedia”:false,“probationBytesSent”:452,“probationSendBitrate”:36160,“recvBitrate”:0,“rtcpMux”:false,“rtcpTuple”:{“localIp”:“127.0.0.1”,“localPort”:10044,“protocol”:“udp”,“remoteIp”:“127.0.0.1”,“remotePort”:5007},“rtpBytesReceived”:0,“rtpBytesSent”:0,“rtpRecvBitrate”:0,“rtpSendBitrate”:0,“rtxBytesReceived”:0,“rtxBytesSent”:0,“rtxRecvBitrate”:0,“rtxSendBitrate”:0,“sendBitrate”:3616,“timestamp”:806801681,“transportId”:“1e7c0c7c-28fc-4125-ab88-1475d82a8537”,“tuple”:{“localIp”:“127.0.0.1”,“localPort”:10057,“protocol”:“udp”,“remoteIp”:“127.0.0.1”,“remotePort”:5006},“type”:“plain-rtp-transport”}]
[{“bitrate”:0,“byteCount”:0,“firCount”:0,“fractionLost”:0,“kind”:“video”,“mimeType”:“video/VP8”,“nackCount”:0,“nackPacketCount”:0,“packetCount”:0,“packetsDiscarded”:0,“packetsLost”:0,“packetsRepaired”:0,“packetsRetransmitted”:0,“pliCount”:0,“rtxSsrc”:910713631,“score”:10,“ssrc”:200020988,“timestamp”:806801683,“type”:“outbound-rtp”},{“bitrate”:337398,“byteCount”:105437,“firCount”:0,“fractionLost”:0,“jitter”:69788,“kind”:“video”,“mimeType”:“video/VP8”,“nackCount”:0,“nackPacketCount”:0,“packetCount”:103,“packetsDiscarded”:0,“packetsLost”:0,“packetsRepaired”:0,“packetsRetransmitted”:17,“pliCount”:1,“roundTripTime”:85.4644775390625,“rtxSsrc”:113258065,“score”:10,“ssrc”:3673380016,“timestamp”:806801683,“type”:“inbound-rtp”}]

There is a whole section in the documentation about it. Please read the docs, troubleshot yourself and come with specific questions and detailed information about what should work according to the doc and is not working in your case.

Thank you for pointing me to the documentation,
I will troubleshoot myself and get familiar with the documentation. What i am trying to achieve here is simple, broadcast from a webbrowser as a publisher, create a plaintransport and consume from it to an rtp endpoint. Here is the below log in the meantime, i will revert back with any findings thank you

mediasoup:Router createWebRtcTransport() +34s
mediasoup:Channel request() [method:router.createWebRtcTransport, id:2] +34s
mediasoup:Channel request succeeded [method:router.createWebRtcTransport, id:2] +3ms
mediasoup:Transport constructor() +0ms
mediasoup:WebRtcTransport constructor() +0ms
mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000] +0ms
mediasoup:Channel request() [method:transport.setMaxIncomingBitrate, id:3] +2ms
mediasoup:Channel request succeeded [method:transport.setMaxIncomingBitrate, id:3] +0ms
mediasoup:WebRtcTransport connect() +1s
mediasoup:Channel request() [method:transport.connect, id:4] +1s
mediasoup:Channel request succeeded [method:transport.connect, id:4] +1ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1846471201, payloadType:96] +0ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +7ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +8ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +6ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +6ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +7ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +8ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +7ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +7ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +6ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +7ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +6ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +3ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1179715781, payloadType:97] +7ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1846471201, payloadType:96] +39ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1846471201, payloadType:96] +6ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1846471201, payloadType:96] +51ms
mediasoup:WARN:Channel [pid:23614] RTC::Transport::ReceiveRtpPacket() | no suitable Producer for received RTP packet [ssrc:1846471201, payloadType:96] +66ms
mediasoup:Transport produce() +2s
mediasoup:Channel request() [method:transport.produce, id:5] +850ms
mediasoup:Channel request succeeded [method:transport.produce, id:5] +1ms
mediasoup:Producer constructor() +0ms
Producer id generated!e31d7a0c-c12a-4979-8a75-0ed6f91cd349

client connected
mediasoup:Router createPlainTransport() +1m
mediasoup:Channel request() [method:router.createPlainTransport, id:6] +1m
mediasoup:Channel request succeeded [method:router.createPlainTransport, id:6] +2ms
mediasoup:Transport constructor() +1m
mediasoup:PlainTransport constructor() +0ms
mediasoup:PlainTransport connect() +2ms
mediasoup:Channel request() [method:transport.connect, id:7] +3ms
mediasoup:Channel request succeeded [method:transport.connect, id:7] +2ms
mediasoup VIDEO RTP SEND transport connected: 127.0.0.1:10095 <–> 127.0.0.1:5006 (udp)
mediasoup VIDEO RTCP SEND transport connected: 127.0.0.1:10071 <–> 127.0.0.1:5007 (udp)
PRoducer ID: e31d7a0c-c12a-4979-8a75-0ed6f91cd349
mediasoup:Transport consume() +7ms
mediasoup:Channel request() [method:transport.consume, id:8] +5ms
mediasoup:Channel request succeeded [method:transport.consume, id:8] +6ms
mediasoup:Consumer constructor() +0ms
mediasoup VIDEO RTP SEND consumer created, kind: video, type: simple, paused: true, SSRC: 142110404 CNAME: CBiL7tN8k1ZZTVGv
mediasoup:Consumer resume() +3ms
mediasoup:Channel request() [method:consumer.resume, id:9] +4ms
mediasoup:PlainTransport getStats() +18ms
mediasoup:Channel request() [method:transport.getStats, id:10] +1ms
Promise { }
mediasoup:Channel request succeeded [method:consumer.resume, id:9] +5ms
mediasoup:Channel request succeeded [method:transport.getStats, id:10] +0ms

What are you using as your external program? Are you sure the problem is not there?

If you check those stats:

[
  {
    “bitrate”: 0,
    “byteCount”: 0,
    “firCount”: 0,
    “fractionLost”: 0,
    “kind”: “video”,
    “mimeType”: “video/VP8”,
    “nackCount”: 0,
    “nackPacketCount”: 0,
    “packetCount”: 0,
    “packetsDiscarded”: 0,
    “packetsLost”: 0,
    “packetsRepaired”: 0,
    “packetsRetransmitted”: 0,
    “pliCount”: 0,
    “rtxSsrc”: 910713631,
    “score”: 10,
    “ssrc”: 200020988,
    “timestamp”: 806801683,
    “type”: “outbound-rtp”
  },
  {
    “bitrate”: 337398,
    “byteCount”: 105437,
    “firCount”: 0,
    “fractionLost”: 0,
    “jitter”: 69788,
    “kind”: “video”,
    “mimeType”: “video/VP8”,
    “nackCount”: 0,
    “nackPacketCount”: 0,
    “packetCount”: 103,
    “packetsDiscarded”: 0,
    “packetsLost”: 0,
    “packetsRepaired”: 0,
    “packetsRetransmitted”: 17,
    “pliCount”: 1,
    “roundTripTime”: 85.4644775390625,
    “rtxSsrc”: 113258065,
    “score”: 10,
    “ssrc”: 3673380016,
    “timestamp”: 806801683,
    “type”: “inbound-rtp”
  }
]

…the “outbound-rtp” stats have 0 bitrate. By checking your code I don’t know if you are properly calling consumer.resume() or not. But it seems the Consumer is paused. Just check it by printing consumer.paused.

Good morning Everyone,

I am still troubleshooting the issue, i forced the pause: false in

 const rtpConsumer = await rtpTransport.consume({
     producerId: producer.id,
     rtpCapabilities: mediasoupRouter.rtpCapabilities, // Assume the recorder supports same formats as mediasoup's router
     **paused: false**
**```**

which should be ok but still bitrate is 0 in the rtp-outgoing, i am running out of ideas 
   console.log('Consumed Paused?  '+mediasoupRouter.videoConsumer.paused); shows false so it is not paused

 mediasoup:Channel request() [method:router.createPlainTransport, id:6] +9s
 mediasoup:Channel request succeeded [method:router.createPlainTransport, id:6] +1ms
 mediasoup:Transport constructor() +9s
 mediasoup:PlainTransport constructor() +0ms
 mediasoup:PlainTransport connect() +1ms
 mediasoup:Channel request() [method:transport.connect, id:7] +1ms
 mediasoup:Channel request succeeded [method:transport.connect, id:7] +0ms
mediasoup VIDEO RTP SEND transport connected: 127.0.0.1:10059 <--> 127.0.0.1:5006 (udp)
mediasoup VIDEO RTCP SEND transport connected: 127.0.0.1:10081 <--> 127.0.0.1:5007 (udp)
PRoducer ID: a66561a7-4a0f-45ab-88c2-7c4dbfc42cf8
 mediasoup:Transport consume() +2ms
 mediasoup:Channel request() [method:transport.consume, id:8] +2ms
 mediasoup:Channel request succeeded [method:transport.consume, id:8] +2ms
 mediasoup:Consumer constructor() +0ms
mediasoup VIDEO RTP SEND consumer created, kind: video, type: simple, paused: false, SSRC: 767427111 CNAME: iav+KASFmjdnbcQm
 mediasoup:Consumer resume() +1ms
 mediasoup:Channel request() [method:consumer.resume, id:9] +1ms
 mediasoup:PlainTransport getStats() +6ms
 mediasoup:Channel request() [method:transport.getStats, id:10] +1ms
 mediasoup:Channel request succeeded [method:consumer.resume, id:9] +0ms
 mediasoup:Channel request succeeded [method:transport.getStats, id:10] +1ms
[{"availableOutgoingBitrate":600000,"bytesReceived":0,"bytesSent":452,"comedia":false,"probationBytesSent":452,"probationSendBitrate":36160,"recvBitrate":0,"rtcpMux":false,"rtcpTuple":{"localIp":"127.0.0.1","localPort":10081,"protocol":"udp","remoteIp":"127.0.0.1","remotePort":5007},"rtpBytesReceived":0,"rtpBytesSent":0,"rtpRecvBitrate":0,"rtpSendBitrate":0,"rtxBytesReceived":0,"rtxBytesSent":0,"rtxRecvBitrate":0,"rtxSendBitrate":0,"sendBitrate":3616,"timestamp":865098511,"transportId":"7d853384-c5e4-44fb-9402-0c0510bc9263","tuple":{"localIp":"127.0.0.1","localPort":10059,"protocol":"udp","remoteIp":"127.0.0.1","remotePort":5006},"type":"plain-rtp-transport"}]
 mediasoup:Consumer getStats() +2ms
 mediasoup:Channel request() [method:consumer.getStats, id:11] +1ms
 mediasoup:Channel request succeeded [method:consumer.getStats, id:11] +0ms
[{"bitrate":0,"byteCount":0,"firCount":0,"fractionLost":0,"kind":"video","mimeType":"video/VP8","nackCount":0,"nackPacketCount":0,"packetCount":0,"packetsDiscarded":0,"packetsLost":0,"packetsRepaired":0,"packetsRetransmitted":0,"pliCount":0,"rtxSsrc":412460918,"score":10,"ssrc":767427111,"timestamp":865098513,"type":"outbound-rtp"},{"bitrate":267498,"byteCount":329921,"firCount":0,"fractionLost":6,"jitter":26,"kind":"video","mimeType":"video/VP8","nackCount":20,"nackPacketCount":35,"packetCount":346,"packetsDiscarded":0,"packetsLost":16,"packetsRepaired":17,"packetsRetransmitted":32,"pliCount":1,"roundTripTime":129.21142578125,"rtxSsrc":3713738877,"score":9,"ssrc":1836299778,"timestamp":865098513,"type":"inbound-rtp"}]
Consumed Paused?  false

Yes i am sure its something inside mediasoup context because i am doing a netstat -an and i am not seeing medisoup outputting data on any of the given UDP ports 5006 and 5007

Please run and paste the result of transport.dump() and consumer.dump() (same as you do with getStats()).

Here you go;

client connected
mediasoup VIDEO RTP SEND transport connected: 127.0.0.1:10044 <–> 127.0.0.1:5006 (udp)
mediasoup VIDEO RTCP SEND transport connected: 127.0.0.1:10029 <–> 127.0.0.1:5007 (udp)
PRoducer ID: 9abcb962-1457-4c6e-851c-9939f4a0a7de
mediasoup VIDEO RTP SEND consumer created, kind: video, type: simple, paused: false, SSRC: 360527023 CNAME: tyVtMdyW8V4xyWCT
[{“availableOutgoingBitrate”:600000,“bytesReceived”:0,“bytesSent”:452,“comedia”:false,“probationBytesSent”:452,“probationSendBitrate”:36160,“recvBitrate”:0,“rtcpMux”:false,“rtcpTuple”:{“localIp”:“127.0.0.1”,“localPort”:10029,“protocol”:“udp”,“remoteIp”:“127.0.0.1”,“remotePort”:5007},“rtpBytesReceived”:0,“rtpBytesSent”:0,“rtpRecvBitrate”:0,“rtpSendBitrate”:0,“rtxBytesReceived”:0,“rtxBytesSent”:0,“rtxRecvBitrate”:0,“rtxSendBitrate”:0,“sendBitrate”:3616,“timestamp”:871804801,“transportId”:“c5e5d01d-5a1a-485e-89b2-0d4679a6ba4c”,“tuple”:{“localIp”:“127.0.0.1”,“localPort”:10044,“protocol”:“udp”,“remoteIp”:“127.0.0.1”,“remotePort”:5006},“type”:“plain-rtp-transport”}]
[{“bitrate”:0,“byteCount”:0,“firCount”:0,“fractionLost”:0,“kind”:“video”,“mimeType”:“video/VP8”,“nackCount”:0,“nackPacketCount”:0,“packetCount”:0,“packetsDiscarded”:0,“packetsLost”:0,“packetsRepaired”:0,“packetsRetransmitted”:0,“pliCount”:0,“rtxSsrc”:913228265,“score”:10,“ssrc”:360527023,“timestamp”:871804803,“type”:“outbound-rtp”},{“bitrate”:657066,“byteCount”:421994,“firCount”:0,“fractionLost”:0,“jitter”:8,“kind”:“video”,“mimeType”:“video/VP8”,“nackCount”:2,“nackPacketCount”:2,“packetCount”:440,“packetsDiscarded”:0,“packetsLost”:1,“packetsRepaired”:1,“packetsRetransmitted”:16,“pliCount”:1,“roundTripTime”:79.345703125,“rtxSsrc”:1216451375,“score”:9,“ssrc”:3861727152,“timestamp”:871804803,“type”:“inbound-rtp”}]
Consumed Paused? false
Transport Dump starting:
{ comedia: false,
consumerIds: [ ‘cd12dc04-6d59-4f55-a624-ad2fa8a22266’ ],
dataConsumerIds: [],
dataProducerIds: [],
id: ‘c5e5d01d-5a1a-485e-89b2-0d4679a6ba4c’,
mapRtxSsrcConsumerId: { ‘913228265’: ‘cd12dc04-6d59-4f55-a624-ad2fa8a22266’ },
mapSsrcConsumerId: { ‘360527023’: ‘cd12dc04-6d59-4f55-a624-ad2fa8a22266’ },
producerIds: [],
recvRtpHeaderExtensions: {},
rtcpMux: false,
rtcpTuple:
{ localIp: ‘127.0.0.1’,
localPort: 10029,
protocol: ‘udp’,
remoteIp: ‘127.0.0.1’,
remotePort: 5007 },
rtpListener: { midTable: {}, ridTable: {}, ssrcTable: {} },
traceEventTypes: ‘’,
tuple:
{ localIp: ‘127.0.0.1’,
localPort: 10044,
protocol: ‘udp’,
remoteIp: ‘127.0.0.1’,
remotePort: 5006 } }
Consumer Dump starting:
{ consumableRtpEncodings: [ { ssrc: 159165803 } ],
id: ‘cd12dc04-6d59-4f55-a624-ad2fa8a22266’,
kind: ‘video’,
paused: false,
priority: 1,
producerPaused: false,
rtpParameters:
{ codecs: [ [Object], [Object] ],
encodings: [ [Object] ],
headerExtensions:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object] ],
mid: ‘0’,
rtcp: { cname: ‘tyVtMdyW8V4xyWCT’, reducedSize: true } },
rtpStream:
{ params:
{ clockRate: 90000,
cname: ‘tyVtMdyW8V4xyWCT’,
mimeType: ‘video/VP8’,
payloadType: 101,
rtxPayloadType: 102,
rtxSsrc: 913228265,
spatialLayers: 1,
ssrc: 360527023,
temporalLayers: 1,
useDtx: false,
useFir: true,
useInBandFec: false,
useNack: true,
usePli: true },
rtxStream: { params: [Object] },
score: 10 },
supportedCodecPayloadTypes: [ 101 ],
traceEventTypes: ‘’,
type: ‘simple’ }

Please format them in JSON using also markdown, otherwise it’s impossible to check them.

RTP Transport:

RTP Consumer:



Honestly I don’t know what is wrong in your code, but I’ve added the following code when a Producer is created and it works fine:

const plainTransport = await this._mediasoupRouter.createPlainTransport(
	{
		listenIp : '127.0.0.1'
	});

await plainTransport.connect({ ip: '127.0.0.1', port: 5555 })

const consumer = await plainTransport.consume(
	{
		producerId      : producer.id,
		rtpCapabilities : this._mediasoupRouter.rtpCapabilities
	});

setInterval(() =>
{
	consumer.getStats()
		.then(stats => console.warn(stats));
}, 2000);

Printed stats clearly show proper bitrate:

[
  {
    bitrate: 525622,
    byteCount: 1465525,
    firCount: 0,
    fractionLost: 0,
    kind: 'video',
    mimeType: 'video/VP8',
    nackCount: 0,
    nackPacketCount: 0,
    packetCount: 1595,
    packetsDiscarded: 0,
    packetsLost: 0,
    packetsRepaired: 0,
    packetsRetransmitted: 0,
    pliCount: 0,
    rtxSsrc: 160992685,
    score: 10,
    ssrc: 821271611,
    timestamp: 180961530,
    type: 'outbound-rtp'
  },
  {
    bitrate: 530755,
    bitrateByLayer: { '0.0': 320256, '0.1': 530755, '0.2': 0 },
    byteCount: 1640558,
    firCount: 0,
    fractionLost: 0,
    jitter: 0,
    kind: 'video',
    mimeType: 'video/VP8',
    nackCount: 0,
    nackPacketCount: 0,
    packetCount: 1764,
    packetsDiscarded: 0,
    packetsLost: 0,
    packetsRepaired: 0,
    packetsRetransmitted: 21,
    pliCount: 1,
    rid: 'r1',
    roundTripTime: 0.2288818359375,
    rtxSsrc: 3458094926,
    score: 10,
    ssrc: 1891830378,
    timestamp: 180961530,
    type: 'inbound-rtp'
  }
]

Hello,
I implemented your code above and i can see data flowing correctly as the bitrate value is none 0. Never the less if i do a sudo netstat -tulpn | grep 5555 i dont see any UDP port 5555 open on my linux machine is that something normal ? The external program needs to read from the port 5555 to consume data

Enable warn logs / tags in the mediasoup Worker. I have no idea but you may be trying to send packets to an address/port and your Linux net routes reject them. No idea. Try with “1.2.3.4” instead to see if you get sent bitrate.

DEBUG LEVEL:
Media soup version: 3.5.5 [40/1896]
client connected
mediasoup:Router createWebRtcTransport() +4s
mediasoup:Channel request() [method:router.createWebRtcTransport, id:2] +4s
mediasoup:Channel request succeeded [method:router.createWebRtcTransport, id:2] +3ms
mediasoup:Transport constructor() +0ms
mediasoup:WebRtcTransport constructor() +0ms
mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000] +3ms
mediasoup:Channel request() [method:transport.setMaxIncomingBitrate, id:3] +6ms
mediasoup:Channel request succeeded [method:transport.setMaxIncomingBitrate, id:3] +1ms
mediasoup:WebRtcTransport connect() +248ms
mediasoup:Channel request() [method:transport.connect, id:4] +245ms
mediasoup:Channel request succeeded [method:transport.connect, id:4] +3ms
mediasoup:Transport produce() +360ms
mediasoup:Channel request() [method:transport.produce, id:5] +115ms
mediasoup:Channel request succeeded [method:transport.produce, id:5] +3ms
mediasoup:Producer constructor() +0ms
Producer id generated!3a9dd279-d2d5-463c-a573-9a09f4f8043f
Media soup version: 3.5.5
client connected
mediasoup:Router createPlainTransport() +2s
mediasoup:Channel request() [method:router.createPlainTransport, id:6] +2s
mediasoup:Channel request succeeded [method:router.createPlainTransport, id:6] +2ms
mediasoup:Transport constructor() +2s
mediasoup:PlainTransport constructor() +0ms
mediasoup:PlainTransport connect() +2ms
mediasoup:Channel request() [method:transport.connect, id:7] +5ms
mediasoup:Channel request succeeded [method:transport.connect, id:7] +1ms
mediasoup:Transport consume() +7ms
mediasoup:Channel request() [method:transport.consume, id:8] +5ms
mediasoup:Channel request succeeded [method:transport.consume, id:8] +4ms
mediasoup:Consumer constructor() +0ms
mediasoup:Consumer getStats() +2s
mediasoup:Channel request() [method:consumer.getStats, id:9] +2s
mediasoup:Channel request succeeded [method:consumer.getStats, id:9] +2ms

Stats:

[ { bitrate: 746192,
byteCount: 7388087,
firCount: 0,
fractionLost: 0,
kind: ‘video’,
mimeType: ‘video/VP8’,
nackCount: 0,
nackPacketCount: 0,
packetCount: 6932,
packetsDiscarded: 0,
packetsLost: 0,
packetsRepaired: 0,
packetsRetransmitted: 0,
pliCount: 0,
rtxSsrc: 674713168,
score: 10,
ssrc: 812353972,
timestamp: 964987280,
type: ‘outbound-rtp’ },
{ bitrate: 740483,
byteCount: 7405623,
firCount: 0,
fractionLost: 0,
jitter: 11,
kind: ‘video’,
mimeType: ‘video/VP8’,
nackCount: 31,
nackPacketCount: 70,
packetCount: 7005,
packetsDiscarded: 0,
packetsLost: 34,
packetsRepaired: 34,
packetsRetransmitted: 58,
pliCount: 2,
roundTripTime: 72.967529296875,
rtxSsrc: 1648790262,
score: 10,
ssrc: 1826919684,
timestamp: 964987280,
type: ‘inbound-rtp’ } ]

netstat shows mediasoup outputting data from source PORT 100067 into 0.0.0.0: which should be 127.0.0.1:5555*

udp 0 0 127.0.0.1:10017 0.0.0.0:* 20003/mediasoup-wor