From dde27a320e9124278c4d6169d192613480efbb5a Mon Sep 17 00:00:00 2001 From: Bryan van Wijk Date: Wed, 1 Aug 2018 15:58:02 +0200 Subject: [PATCH] Pass loadControl parameters as video props --- README.md | 25 ++++++++++ Video.js | 14 +++--- .../brentvatne/exoplayer/ExoPlayerConfig.java | 47 ------------------- .../exoplayer/ReactExoplayerView.java | 33 +++++-------- .../exoplayer/ReactExoplayerViewManager.java | 25 ++++++++++ .../brentvatne/react/ReactVideoPackage.java | 8 +--- 6 files changed, 71 insertions(+), 81 deletions(-) delete mode 100644 android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerConfig.java diff --git a/README.md b/README.md index ed6ffae9..5d2cc600 100644 --- a/README.md +++ b/README.md @@ -229,6 +229,7 @@ var styles = StyleSheet.create({ * [textTracks](#texttracks) * [useTextureView](#usetextureview) * [volume](#volume) +* [loadControl](#loadcontrol) ### Event props * [onAudioBecomingNoisy](#onaudiobecomingnoisy) @@ -479,6 +480,30 @@ Adjust the volume. Platforms: all +#### loadControl +Adjust the load control parameters: minBufferMs, maxBufferMs, bufferForPlaybackMs and playbackAfterRebufferMs. + +``` +loadControl={{ + minBufferMs: number, + maxBufferMs: number, + bufferForPlaybackMs: number, + bufferForPlaybackAfterRebufferMs: number, +}} +``` + +Example with default values: +``` +loadControl={{ + minBufferMs: 15000, + maxBufferMs: 50000, + bufferForPlaybackMs: 2500, + bufferForPlaybackAfterRebufferMs: 5000, +}} +``` + +Platforms: AndroidExoplayer + ### Event props #### onAudioBecomingNoisy diff --git a/Video.js b/Video.js index 71f38723..14401078 100644 --- a/Video.js +++ b/Video.js @@ -11,13 +11,7 @@ const styles = StyleSheet.create({ }, }); -const { - ExoPlayerConfig -} = NativeModules - -const VideoPlayerConfig = Platform.OS === "android" ? ExoPlayerConfig : undefined; - -export { TextTrackType, VideoPlayerConfig}; +export { TextTrackType }; export default class Video extends Component { @@ -351,6 +345,12 @@ Video.propTypes = { paused: PropTypes.bool, muted: PropTypes.bool, volume: PropTypes.number, + loadControl: PropTypes.shape({ + minBufferMs: PropTypes.number, + maxBufferMs: PropTypes.number, + bufferForPlaybackMs: PropTypes.number, + bufferForPlaybackAfterRebufferMs: PropTypes.number, + }), stereoPan: PropTypes.number, rate: PropTypes.number, playInBackground: PropTypes.bool, diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerConfig.java b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerConfig.java deleted file mode 100644 index 90c68d01..00000000 --- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.brentvatne.exoplayer; - -import android.content.Context; - -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; - - -public class ExoPlayerConfig extends ReactContextBaseJavaModule { - - public ExoPlayerConfig(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public String getName() { - return "ExoPlayerConfig"; - } - - @ReactMethod - public void setMinBufferMs(final int newMinBufferMs, final Promise promise) { - ReactExoplayerView.setMinBufferMs(newMinBufferMs); - promise.resolve(null); - } - - @ReactMethod - public void setMaxBufferMs(final int newMaxBufferMs, final Promise promise) { - ReactExoplayerView.setMaxBufferMs(newMaxBufferMs); - promise.resolve(null); - } - - @ReactMethod - public void setBufferForPlaybackMs(final int newBufferForPlaybackMs, final Promise promise) { - ReactExoplayerView.setBufferForPlaybackMs(newBufferForPlaybackMs); - promise.resolve(null); - } - - @ReactMethod - public void setBufferForPlaybackAfterRebufferMs(final int newBufferForPlaybackAfterRebufferMs, final Promise promise) { - ReactExoplayerView.setBufferForPlaybackAfterRebufferMs(newBufferForPlaybackAfterRebufferMs); - promise.resolve(null); - } -} diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index c401e3d2..878ed261 100644 --- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -91,11 +91,6 @@ class ReactExoplayerView extends FrameLayout implements DEFAULT_COOKIE_MANAGER.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); } - private static int minBufferMs = DefaultLoadControl.DEFAULT_MIN_BUFFER_MS; - private static int maxBufferMs = DefaultLoadControl.DEFAULT_MAX_BUFFER_MS; - private static int bufferForPlaybackMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS; - private static int bufferForPlaybackAfterRebufferMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS; - private final VideoEventEmitter eventEmitter; private Handler mainHandler; @@ -115,6 +110,11 @@ class ReactExoplayerView extends FrameLayout implements private boolean isBuffering; private float rate = 1f; + private int minBufferMs = DefaultLoadControl.DEFAULT_MIN_BUFFER_MS; + private int maxBufferMs = DefaultLoadControl.DEFAULT_MAX_BUFFER_MS; + private int bufferForPlaybackMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS; + private int bufferForPlaybackAfterRebufferMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS; + // Props from React private Uri srcUri; private String extension; @@ -940,20 +940,13 @@ class ReactExoplayerView extends FrameLayout implements exoPlayerView.setUseTextureView(useTextureView); } - - public static void setMinBufferMs(int newMinBufferMs) { - minBufferMs = newMinBufferMs; - } - - public static void setMaxBufferMs(int newMaxBufferMs) { - maxBufferMs = newMaxBufferMs; - } - - public static void setBufferForPlaybackMs(int newBufferForPlaybackMs) { - bufferForPlaybackMs = newBufferForPlaybackMs; - } - - public static void setBufferForPlaybackAfterRebufferMs(int newBufferForPlaybackAfterRebufferMs) { - bufferForPlaybackAfterRebufferMs = newBufferForPlaybackAfterRebufferMs; + public void setLoadControl(int newMinBufferMs, int newMaxBufferMs, int newBufferForPlaybackMs, int newBufferForPlaybackAfterRebufferMs) { + player.release(); + this.player = null; + this.minBufferMs = newMinBufferMs; + this.maxBufferMs = newMaxBufferMs; + this.bufferForPlaybackMs = newBufferForPlaybackMs; + this.bufferForPlaybackAfterRebufferMs = newBufferForPlaybackAfterRebufferMs; + initializePlayer(); } } diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index fbc8a9ad..9611a960 100644 --- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -11,6 +11,7 @@ import com.facebook.react.common.MapBuilder; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewGroupManager; import com.facebook.react.uimanager.annotations.ReactProp; +import com.google.android.exoplayer2.DefaultLoadControl; import com.google.android.exoplayer2.upstream.RawResourceDataSource; import java.util.HashMap; @@ -38,6 +39,11 @@ public class ReactExoplayerViewManager extends ViewGroupManager createNativeModules(ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new ExoPlayerConfig(reactContext)); - - return modules; + return Collections.emptyList(); } // Deprecated RN 0.47