diff --git a/CHANGELOG.md b/CHANGELOG.md index ddd482abd9..62ca1dd138 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed ### Changed +- Clarified comment in `DefaultSimulcastUplinkPolicy`. ## [2.23.0] - 2021-11-22 ### Added diff --git a/docs/classes/defaultsimulcastuplinkpolicy.html b/docs/classes/defaultsimulcastuplinkpolicy.html index 44f1ba6403..a0ec116b1a 100644 --- a/docs/classes/defaultsimulcastuplinkpolicy.html +++ b/docs/classes/defaultsimulcastuplinkpolicy.html @@ -235,7 +235,7 @@

addObserver

Parameters

@@ -259,7 +259,7 @@

chooseCaptureAndEncodeParameters

Returns DefaultVideoAndEncodeParameter

@@ -277,7 +277,7 @@

chooseEncodingParameters

Returns Map<string, RTCRtpEncodingParameters>

@@ -295,7 +295,7 @@

chooseMediaTrackConstraints

Returns MediaTrackConstraints

@@ -312,7 +312,7 @@

forEachObserver

  • Parameters

    @@ -353,7 +353,7 @@

    getEncodingSimulcastLayer

  • Parameters

    @@ -377,7 +377,7 @@

    maxBandwidthKbps

    Returns number

    @@ -395,7 +395,7 @@

    removeObserver

    Parameters

    @@ -419,7 +419,7 @@

    setHasBandwidthPriority

    Parameters

    @@ -443,7 +443,7 @@

    setIdealMaxBandwidthKbps

    Parameters

    @@ -495,7 +495,7 @@

    updateIndex

    Parameters

    @@ -519,7 +519,7 @@

    wantsResubscribe

    Returns boolean

    diff --git a/src/videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy.ts b/src/videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy.ts index 8f52e0f4cd..9f38656d99 100644 --- a/src/videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy.ts +++ b/src/videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy.ts @@ -136,7 +136,7 @@ export default class DefaultSimulcastUplinkPolicy implements SimulcastUplinkPoli // The value of `newActiveStreams` is somewhat irrelevant since this single // stream will adapt based on both sender and receiver network conditions. // - // We don't use top layer (middle vs. low doesn't matter) here to work around a bug in Chromium where + // We use middle layer here to work around a bug in Chromium where // it seems when a transceiver is created when BWE is low (e.g. on a reconnection), // it will never reset the encoder even when `setParameters` is called. WebRTC bug // #12788 seems to call a similar issue out as fixed for VP8, it's not clear if this @@ -144,6 +144,13 @@ export default class DefaultSimulcastUplinkPolicy implements SimulcastUplinkPoli // request from the backend since it will only be sending padding (which also // don't have MID due to #10822). Since we don't scale when simulcast is disabled // this doesn't have any end-user effect. + // + // Note that this still relies on a little bit (5-6 packets) of padding on reconnect + // and that technically the browser will still eventually try to send all 3 streams. + // + // Also note that due to some uninvestigated logic in bitrate allocation, Chromium + // will skip the bottom layer if we try setting it to 1200 kbps instead so it will still take a while to + // recover (as it needs to send padding until it reaches around 1000 kbps). this.newActiveStreams = ActiveStreams.kHi; newBitrates[0].maxBitrateKbps = 0; newBitrates[1].maxBitrateKbps = 1200;