diff --git a/Video.js b/Video.js index 8bf4d173a8..8ef3caf59d 100644 --- a/Video.js +++ b/Video.js @@ -476,6 +476,7 @@ Video.propTypes = { reportBandwidth: PropTypes.bool, disableFocus: PropTypes.bool, controls: PropTypes.bool, + httpEngine: PropTypes.string, audioOnly: PropTypes.bool, currentTime: PropTypes.number, fullscreenAutorotate: PropTypes.bool, diff --git a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java index 1a7dbe0be5..ddb3282761 100644 --- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java +++ b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/DataSourceUtil.java @@ -13,6 +13,7 @@ import okhttp3.JavaNetCookieJar; import okhttp3.OkHttpClient; +import java.util.HashMap; import java.util.Map; public class DataSourceUtil { @@ -24,6 +25,7 @@ private DataSourceUtil() { private static DataSource.Factory defaultDataSourceFactory = null; private static HttpDataSource.Factory defaultHttpDataSourceFactory = null; private static String userAgent = null; + private static final Map namedDataSourceFactories = new HashMap<>(); public static void setUserAgent(String userAgent) { DataSourceUtil.userAgent = userAgent; @@ -70,6 +72,15 @@ public static void setDefaultHttpDataSourceFactory(HttpDataSource.Factory factor DataSourceUtil.defaultHttpDataSourceFactory = factory; } + public static void registerDataSourceFactory(String name, DataSource.Factory factory) { + namedDataSourceFactories.put(name, factory); + } + + public static DataSource.Factory getNamedDataSourceFactory(String name) { + DataSource.Factory factory = namedDataSourceFactories.get(name); + return factory != null ? factory : defaultDataSourceFactory; + } + private static DataSource.Factory buildRawDataSourceFactory(ReactContext context) { return new RawResourceDataSourceFactory(context.getApplicationContext()); } 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 405f3de699..da11c25424 100644 --- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -149,6 +149,7 @@ class ReactExoplayerView extends FrameLayout implements private float mProgressUpdateInterval = 250.0f; private boolean playInBackground = false; private Map requestHeaders; + private String httpEngine = null; private boolean mReportBandwidth = false; private UUID drmUUID = null; private String drmLicenseUrl = null; @@ -647,6 +648,12 @@ private void clearResumePosition() { * @return A new DataSource factory. */ private DataSource.Factory buildDataSourceFactory(boolean useBandwidthMeter) { + if (httpEngine != null && !httpEngine.isEmpty() && !httpEngine.equals("default")) { + DataSource.Factory namedFactory = DataSourceUtil.getNamedDataSourceFactory(httpEngine); + if (namedFactory != null) { + return namedFactory; + } + } return DataSourceUtil.getDefaultDataSourceFactory(this.themedReactContext, useBandwidthMeter ? bandwidthMeter : null, requestHeaders); } @@ -1038,9 +1045,7 @@ public void setSrc(final Uri uri, final String extension, Map he this.srcUri = uri; this.extension = extension; this.requestHeaders = headers; - this.mediaDataSourceFactory = - DataSourceUtil.getDefaultDataSourceFactory(this.themedReactContext, bandwidthMeter, - this.requestHeaders); + this.mediaDataSourceFactory = buildDataSourceFactory(true); if (!isSourceEqual) { reloadSource(); @@ -1312,6 +1317,13 @@ public void setDisableFocus(boolean disableFocus) { this.disableFocus = disableFocus; } + public void setHttpEngine(String httpEngine) { + this.httpEngine = httpEngine; + if (srcUri != null) { + this.mediaDataSourceFactory = buildDataSourceFactory(true); + } + } + public void setFullscreen(boolean fullscreen) { if (fullscreen == isFullscreen) { return; // Avoid generating events when nothing is changing 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 d668520abc..827442679d 100644 --- a/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -71,6 +71,7 @@ public class ReactExoplayerViewManager extends ViewGroupManager