From 83c8cef265317e7e2a8ec39f0bfc2f0f52fd0592 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet Date: Mon, 9 Sep 2024 23:27:24 +0200 Subject: [PATCH] fix(android): ensure maxbitrate & selectedVideoTrack interact correctly --- .../exoplayer/ReactExoplayerView.java | 23 ++++++++++++++----- docs/pages/component/props.mdx | 3 +++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 6cab02d074..333cd384e5 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -567,6 +567,11 @@ private void reLayoutControls() { reLayout(playerControlView); } + /// returns true is adaptive bitrate shall be used + public boolean isUsingVideoABR() { + return videoTrackType == null || "auto".equals(videoTrackType); + } + public void setDebug(boolean enableDebug) { this.enableDebug = enableDebug; refreshDebugState(); @@ -2037,16 +2042,21 @@ public void setSelectedTrack(int trackType, String type, String value) { TrackSelectionOverride selectionOverride = new TrackSelectionOverride(groups.get(groupIndex), tracks); - DefaultTrackSelector.Parameters selectionParameters = trackSelector.getParameters() + DefaultTrackSelector.Parameters.Builder selectionParameters = trackSelector.getParameters() .buildUpon() .setExceedAudioConstraintsIfNecessary(true) .setExceedRendererCapabilitiesIfNecessary(true) .setExceedVideoConstraintsIfNecessary(true) .setRendererDisabled(rendererIndex, false) - .clearOverridesOfType(selectionOverride.getType()) - .addOverride(selectionOverride) - .build(); - trackSelector.setParameters(selectionParameters); + .clearOverridesOfType(selectionOverride.getType()); + + if (trackType == C.TRACK_TYPE_VIDEO && isUsingVideoABR()) { + selectionParameters.setMaxVideoBitrate(maxBitRate == 0 ? Integer.MAX_VALUE : maxBitRate); + } else { + selectionParameters.addOverride(selectionOverride); + } + + trackSelector.setParameters(selectionParameters.build()); } private boolean isFormatSupported(Format format) { @@ -2177,7 +2187,8 @@ public void setRateModifier(float newRate) { public void setMaxBitRateModifier(int newMaxBitRate) { maxBitRate = newMaxBitRate; - if (player != null) { + if (player != null && isUsingVideoABR()) { + // do not apply yet if not auto trackSelector.setParameters(trackSelector.buildUponParameters() .setMaxVideoBitrate(maxBitRate == 0 ? Integer.MAX_VALUE : maxBitRate)); } diff --git a/docs/pages/component/props.mdx b/docs/pages/component/props.mdx index 655161cde5..808b4fa51a 100644 --- a/docs/pages/component/props.mdx +++ b/docs/pages/component/props.mdx @@ -357,6 +357,9 @@ Sets the desired limit, in bits per second, of network bandwidth consumption whe Default: 0. Don't limit the maxBitRate. +Note: This property can interact with selectedVideoTrack. +To use `maxBitrate`, selectedVideoTrack shall be undefined or `{type: SelectedVideoTrackType.AUTO}`. + Example: ```javascript