# how to consume best simulcast quality from PlainTransport?

**URL:** <https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708>\
**Category:** mediasoup libraries\
**Created:** [September 7, 2020, 12:12pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708 "2020-09-07T12:12:26Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Codeda](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@Codeda](https://mediasoup.discourse.group/u/Codeda)\
**Post date:** [September 7, 2020, 12:12pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/1 "2020-09-07T12:12:26Z")

</div>

`consumer.setPreferredLayers` with various `temporalLayer` and `spatialLayer` seems has no effect. `scalabilityMode` inside `consumer.rtpParameters.encodings` is ‘S2T3’

---

<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:** [September 7, 2020, 12:25pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/2 "2020-09-07T12:25:28Z")

</div>

You may want to clarify the question and expose the problem better. Telling “seems has no effect” won’t make any bell ring here.

---

<div class="post-metadata">

**Author:** ![anovikov1984](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/anovikov1984/32/226_2.png) [@anovikov1984](https://mediasoup.discourse.group/u/anovikov1984)\
**Post date:** [September 7, 2020, 12:35pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/3 "2020-09-07T12:35:05Z")

</div>

Observing situation is that: we initiate PlainTransport to get an RTP stream with a simulcast video, two qualities (full and divided by 4). All we can receive with ffmpeg is the lower quality, and tcpdump suggests that the overall bitrate on the port corresponds to just that (so i know it is not an ffmpeg issue - we are only being sent the lower quality, we cant probably receive the higher one whatever we do with ffmpeg)…

Maybe other qualities are being sent through adjacent port numbers? How does it work @ibc?

Thanks!

---

<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:** [September 7, 2020, 12:57pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/4 "2020-09-07T12:57:15Z")

</div>

Please avoid direct naming, I’m not the only one that can answer questions in this forum.

First of all, try consuming the same Producer simulcast streams into a WebRTC client and see if such a client receives the preferred layers. If so, then there is a problem in the RTP capabilities that you are using in your consumer in the plain transport (for example: you are announcing support for Transport-CC or REMB in those RTP capabilities while your endpoint, ffmpeg, obviously does not support them).

---

<div class="post-metadata">

**Author:** ![Codeda](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@Codeda](https://mediasoup.discourse.group/u/Codeda)\
**Post date:** [September 7, 2020, 1:01pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/5 "2020-09-07T13:01:39Z")

</div>

This is how we trying to do it:

1. creating PlainRtpTransport on localhost (all optional params are not specified)
2. allocating free port and transport.connect to it
3. consuming paused consumer from the transport with requested producerId and router.rtpCapabilities
4. calling consumer.setPreferredLayers (tried various values)
5. launching ffmpeg with sdp input
6. resuming the consumer

P.S. In browser consumed stream has full resolution after some frames.

---

<div class="post-metadata">

**Author:** ![Codeda](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@Codeda](https://mediasoup.discourse.group/u/Codeda)\
**Post date:** [September 7, 2020, 1:03pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/6 "2020-09-07T13:03:57Z")

</div>

According to its stats published stream is about 1.5mbit/sec but traffic on port with 5 sec interval is much less:

```auto
while :; do /bin/bash -c "timeout 5 tcpdump -i any -e udp portrange 26386-26386 2>/dev/null" | grep -oE '[^]+$' | awk '{s+=$1} END {print s}'; done;
73286
31911
63510
83541
81612
76915
76450

```

---

<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:** [September 7, 2020, 1:08pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/7 "2020-09-07T13:08:49Z")

</div>

Ask yourself why you are calling plainTransport.consume() with router.rtpCapabilities as argument and then check my previous response in this topic.

---

<div class="post-metadata">

**Author:** ![anovikov1984](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/anovikov1984/32/226_2.png) [@anovikov1984](https://mediasoup.discourse.group/u/anovikov1984)\
**Post date:** [September 7, 2020, 1:19pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/8 "2020-09-07T13:19:40Z")

</div>

Thank you for advice! Works now, fantastic!

---

<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:** [September 7, 2020, 1:25pm UTC](https://mediasoup.discourse.group/t/how-to-consume-best-simulcast-quality-from-plaintransport/1708/9 "2020-09-07T13:25:51Z")

</div>

Great. rtpCapabilities are not “whatever that make the thing seem to work”. They MUST correspond to the REAL capabilities of the consuming endpoint. Otherwise you are telling mediasoup that the endpoint supports something, mediasoup relies on it and later things do not work.
