# Router cannot consume producer data

**URL:** <https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668>\
**Category:** mediasoup libraries\
**Created:** [August 30, 2020, 2:14pm UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668 "2020-08-30T14:14:34Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![martintan](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/martintan/32/554_2.png) [@martintan](https://mediasoup.discourse.group/u/martintan)\
**Post date:** [August 30, 2020, 2:14pm UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/1 "2020-08-30T14:14:34Z")

</div>

Hi, I have a problem where my `router.canConsume(data)` is returning false. I read the two threads UnsupportedError: cannot consume this Producer and the other one but they did not help me at all to find the cause of the problem.

```auto
async function createConsumer(socket, transport, producer, rtpCapabilities) {
  const router = getRoom(socket).router;
  console.log("Room router:", router);
  console.log("Create Consumer Producer:", producer);
  console.log("Create Consumer RTP Capabilities:", rtpCapabilities);
  const data = { producerId: producer.id, rtpCapabilities };
  if (!router.canConsume(data)) {
    console.error('can not consume');
    return;
  }
  // ...

```

I am following the code of this example project [mkhahani](https://github.com/mkhahani)/ **[mediasoup-sample-app](https://github.com/mkhahani/mediasoup-sample-app)** but my app is written in Vue.js. I keep double checking and cross checking my own code with his and I can’t seem to figure out why my router cannot consume but his can (I ran the project in my own machine and it works).

I also compared our `producer` and `rtpCapabilities` objects and they are almost exactly the same (the producers are slightly different but the `rtpCapabilities` are exactly the same).

Here is my `rtpCapabilities` object:

```auto
{ codecs:
   [ { mimeType: 'audio/opus',
       kind: 'audio',
       preferredPayloadType: 100,
       clockRate: 48000,
       channels: 2,
       parameters: [Object],
       rtcpFeedback: [Array] },
     { mimeType: 'video/VP8',
       kind: 'video',
       preferredPayloadType: 101,
       clockRate: 90000,
       parameters: {},
       rtcpFeedback: [Array] },
     { mimeType: 'video/rtx',
       kind: 'video',
       preferredPayloadType: 102,
       clockRate: 90000,
       parameters: [Object],
       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: '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: 'video',
       uri:
        'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01',
       preferredId: 5,
       preferredEncrypt: false,
       direction: 'sendrecv' },
     { kind: 'video',
       uri:
        'http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07',
       preferredId: 6,
       preferredEncrypt: false,
       direction: 'sendrecv' },
     { kind: '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' } ] }

```

```auto
{
  "codecs": [
    {
      "mimeType": "audio/opus",
      "payloadType": 111,
      "clockRate": 48000,
      "channels": 2,
      "parameters": {
        "minptime": 10,
        "useinbandfec": 1
      },
      "rtcpFeedback": [
        {
          "type": "transport-cc",
          "parameter": ""
        }
      ]
    }
  ],
  "headerExtensions": [
    {
      "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
      "id": 4,
      "encrypt": false,
      "parameters": {}
    },
    {
      "uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",
      "id": 2,
      "encrypt": false,
      "parameters": {}
    },
    {
      "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",
      "id": 3,
      "encrypt": false,
      "parameters": {}
    },
    {
      "uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level",
      "id": 1,
      "encrypt": false,
      "parameters": {}
    }
  ],
  "encodings": [
    {
      "ssrc": 12338707,
      "dtx": false
    }
  ],
  "rtcp": {
    "cname": "rezabl/mISmZX+wr",
    "reducedSize": true
  },
  "mid": "1"
}

```

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [August 30, 2020, 5:39pm UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/2 "2020-08-30T17:39:28Z")

</div>

Where did you get those rtpCapabilities from? Do their preferredPayloadType values match those in router.rtpCapabilities?

---

<div class="post-metadata">

**Author:** ![martintan](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/martintan/32/554_2.png) [@martintan](https://mediasoup.discourse.group/u/martintan)\
**Post date:** [August 30, 2020, 7:08pm UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/3 "2020-08-30T19:08:00Z")

</div>

I get the `rtpCapabilities` from my server via [Socket.io](http://Socket.io) with this request:

```auto
    socket.on("getRouterRtpCapabilities", (data, callback) => {
      if (defaultRoom.router) {
        callback(null, defaultRoom.router.rtpCapabilities);
      } else {
        callback({ text: "ERROR - Router not ready" }, null);
      }
    });

```

And the room object is created like this:

```auto
async function startWorker() {
  // const mediaCodecs = config.mediasoup.routerOptions.mediaCodecs;
  worker = await mediasoup.createWorker();
  defaultRoom = await setupRoom("_default_room");
  console.log("-- mediasoup worker start. -- room:", defaultRoom.name);
}

```

```auto
async function setupRoom(name) {
  console.log(`--- Creating new room. roomId=${name}`);
  const room = new Room(name);
  const mediaCodecs = config.mediasoup.routerOptions.mediaCodecs;
  console.log("media codecs:", mediaCodecs);
  const router = await worker.createRouter({ mediaCodecs });
  router.roomname = name;

  router.observer.on("close", () => {
    console.log("-- router closed. room=%s", name);
  });

  router.observer.on("newtransport", transport => {
    console.log("-- router newtransport. room=%s", name);
  });

  room.router = router;
  Room.addRoom(room, name);
  return room;
}

```

mediaCodecs:

```auto
// mediasoup Router options.
    // See https://mediasoup.org/documentation/v3/mediasoup/api/#RouterOptions
    routerOptions:
    {
      mediaCodecs:
        [
          {
            kind: 'audio',
            mimeType: 'audio/opus',
            clockRate: 48000,
            channels: 2
          },
          {
            kind: 'video',
            mimeType: 'video/VP8',
            clockRate: 90000,
            parameters:
            {
              'x-google-start-bitrate': 1000
            }
          },
          // {
          // kind: 'video',
          // mimeType: 'video/VP9',
          // clockRate: 90000,
          // parameters:
          // {
          // 'profile-id': 2,
          // 'x-google-start-bitrate': 1000
          // }
          // },
          // {
          // kind: 'video',
          // mimeType: 'video/h264',
          // clockRate: 90000,
          // parameters:
          // {
          // 'packetization-mode': 1,
          // 'profile-level-id': '4d0032',
          // 'level-asymmetry-allowed': 1,
          // 'x-google-start-bitrate': 1000
          // }
          // },
          // {
          // kind: 'video',
          // mimeType: 'video/h264',
          // clockRate: 90000,
          // parameters:
          // {
          // 'packetization-mode': 1,
          // 'profile-level-id': '42e01f',
          // 'level-asymmetry-allowed': 1,
          // 'x-google-start-bitrate': 1000
          // }
          // }
        ]
    },

```

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [August 30, 2020, 7:21pm UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/4 "2020-08-30T19:21:22Z")

</div>

I’m afraid that’s not answering my question. I asked about the endpoint’s rtpCapabilities. Please don’t share all your code, I’m just asking about those rtpCapabilities.

---

<div class="post-metadata">

**Author:** ![martintan](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/martintan/32/554_2.png) [@martintan](https://mediasoup.discourse.group/u/martintan)\
**Post date:** [August 31, 2020, 5:53am UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/5 "2020-08-31T05:53:56Z")

</div>

This is the consumer’s device’s rtpCapabilities

```auto
{
  "codecs": [
    {
      "mimeType": "audio/opus",
      "kind": "audio",
      "preferredPayloadType": 100,
      "clockRate": 48000,
      "channels": 2,
      "parameters": {
        "minptime": 10,
        "useinbandfec": 1
      },
      "rtcpFeedback": [
        {
          "type": "transport-cc",
          "parameter": ""
        }
      ]
    },
    {
      "mimeType": "video/VP8",
      "kind": "video",
      "preferredPayloadType": 101,
      "clockRate": 90000,
      "parameters": {},
      "rtcpFeedback": [
        {
          "type": "goog-remb",
          "parameter": ""
        },
        {
          "type": "transport-cc",
          "parameter": ""
        },
        {
          "type": "ccm",
          "parameter": "fir"
        },
        {
          "type": "nack",
          "parameter": ""
        },
        {
          "type": "nack",
          "parameter": "pli"
        }
      ]
    },
    {
      "mimeType": "video/rtx",
      "kind": "video",
      "preferredPayloadType": 102,
      "clockRate": 90000,
      "parameters": {
        "apt": 101
      },
      "rtcpFeedback": []
    }
  ],
  "headerExtensions": [
    {
      "kind": "audio",
      "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
      "preferredId": 1,
      "preferredEncrypt": false,
      "direction": "sendrecv"
    },
    {
      "kind": "video",
      "uri": "urn:ietf:params:rtp-hdrext:sdes:mid",
      "preferredId": 1,
      "preferredEncrypt": false,
      "direction": "sendrecv"
    },
    {
      "kind": "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": "video",
      "uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",
      "preferredId": 5,
      "preferredEncrypt": false,
      "direction": "sendrecv"
    },
    {
      "kind": "video",
      "uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07",
      "preferredId": 6,
      "preferredEncrypt": false,
      "direction": "sendrecv"
    },
    {
      "kind": "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"
    }
  ]
}

```

The preferred payload types seem to be the same for the router and this device. It has three preferredPayloadType attributes 100, 101, 102.

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [August 31, 2020, 8:38am UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/6 "2020-08-31T08:38:17Z")

</div>

> [@martintan](#):
>
> The preferred payload types seem to be the same for the router and this device. It has three preferredPayloadType attributes 100, 101, 102.

I don’t see any reason for `canConsume()` return `false` in your scenario, but this is not a bug in mediasoup obviously so just review your code, please.

---

<div class="post-metadata">

**Author:** ![martintan](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/martintan/32/554_2.png) [@martintan](https://mediasoup.discourse.group/u/martintan)\
**Post date:** [August 31, 2020, 10:38am UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/7 "2020-08-31T10:38:38Z")

</div>

When my producer transport emits the produce event I checked the rtpParameters and the payloadType is different (96, 97, 111), does this have implications for my problem?

```auto
Adding Producer(id=41508d14-69bf-4f0d-894c-09900cf3c2b5) for socket.id=FLSLdounp-Q1XLvPAAAC, kind=video
rtpParameters: { codecs:
   [ { mimeType: 'video/VP8',
       payloadType: 96,
       clockRate: 90000,
       parameters: {},
       rtcpFeedback: [Array] },
     { mimeType: 'video/rtx',
       payloadType: 97,
       clockRate: 90000,
       parameters: [Object],
       rtcpFeedback: [] } ],

```

```auto
Adding Producer(id=209f5f2a-268c-4a45-967b-18f385d00c45) for socket.id=FLSLdounp-Q1XLvPAAAC, kind=audio
rtpParameters: { codecs:
   [ { mimeType: 'audio/opus',
       payloadType: 111,
       clockRate: 48000,
       channels: 2,
       parameters: [Object],
       rtcpFeedback: [Array] } ],

```

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [August 31, 2020, 11:00am UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/8 "2020-08-31T11:00:58Z")

</div>

> [@martintan](#):
>
> When my producer transport emits the produce event I checked the rtpParameters and the payloadType is different (96, 97, 111), does this have implications for my problem?

No, that’s ok.

---

<div class="post-metadata">

**Author:** ![martintan](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/martintan/32/554_2.png) [@martintan](https://mediasoup.discourse.group/u/martintan)\
**Post date:** [August 31, 2020, 6:20pm UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/9 "2020-08-31T18:20:00Z")

</div>

Thanks for the help, I found my mistakes. The cause is really just mistakes in my code.

---

<div class="post-metadata">

**Author:** ![bra1n](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/bra1n/32/2260_2.png) [@bra1n](https://mediasoup.discourse.group/u/bra1n)\
**Post date:** [July 27, 2023, 9:51am UTC](https://mediasoup.discourse.group/t/router-cannot-consume-producer-data/1668/10 "2023-07-27T09:51:34Z")

</div>

Hey, do you happen to remember what precisely was the mistake in your code? I’m in a similar situation as you right now, with `canConsume` failing occasionally and I’m wondering why it does.
