diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactoryProvider.java b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactoryProvider.java index 180b8747c3cd9..f9a47d9bb3dbd 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactoryProvider.java +++ b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactoryProvider.java @@ -4,6 +4,7 @@ import com.facebook.react.bridge.ReactContext; import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.TransferListener; import java.util.Map; @@ -12,7 +13,7 @@ public class SharedCookiesDataSourceFactoryProvider extends expo.modules.av.player.datasource.SharedCookiesDataSourceFactoryProvider { @Override - public DataSource.Factory createFactory(Context context, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders) { + public DataSource.Factory createFactory(Context context, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders, TransferListener listener) { ReactContext reactContext = null; if (context instanceof ReactContext) { reactContext = (ReactContext) context; diff --git a/packages/expo-av/CHANGELOG.md b/packages/expo-av/CHANGELOG.md index 694fbda4fb7bc..3be41b05f5483 100644 --- a/packages/expo-av/CHANGELOG.md +++ b/packages/expo-av/CHANGELOG.md @@ -9,3 +9,4 @@ ### 🐛 Bug fixes - Fixed `Plaback.loadAsync()` return type. ([#7559](https://github.com/expo/expo/pull/7559) by [@awinograd](https://github.com/awinograd)) +- Fixed the adaptive streaming for exoplayer on android. ([#8363](https://github.com/expo/expo/pull/8363) by [@watchinharrison](https://github.com/watchinharrison)) diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java index 1ca5a7579db1b..f82efc3c22fc2 100644 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java @@ -92,7 +92,7 @@ public void load(final Bundle status, final LoadCompletionListener loadCompletio mSimpleExoPlayer.addVideoListener(this); // Produces DataSource instances through which media data is loaded. - final DataSource.Factory dataSourceFactory = mAVModule.getModuleRegistry().getModule(DataSourceFactoryProvider.class).createFactory(mReactContext, mAVModule.getModuleRegistry(), Util.getUserAgent(mAVModule.getContext(), "yourApplicationName"), mRequestHeaders); + final DataSource.Factory dataSourceFactory = mAVModule.getModuleRegistry().getModule(DataSourceFactoryProvider.class).createFactory(mReactContext, mAVModule.getModuleRegistry(), Util.getUserAgent(mAVModule.getContext(), "yourApplicationName"), mRequestHeaders, bandwidthMeter.getTransferListener()); try { // This is the MediaSource representing the media to be played. final MediaSource source = buildMediaSource(mUri, mOverridingExtension, mainHandler, dataSourceFactory); diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java index 5d634b1677293..923602396dfa3 100644 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java @@ -25,11 +25,11 @@ public class CustomHeadersOkHttpDataSourceFactory extends HttpDataSource.BaseFac @Nullable private final CacheControl mCacheControl; - public CustomHeadersOkHttpDataSourceFactory(@NonNull Call.Factory callFactory, @Nullable String userAgent, @Nullable Map requestHeaders) { + public CustomHeadersOkHttpDataSourceFactory(@NonNull Call.Factory callFactory, @Nullable String userAgent, @Nullable Map requestHeaders, @Nullable TransferListener listener) { super(); mCallFactory = callFactory; mUserAgent = userAgent; - mListener = null; + mListener = listener; mCacheControl = null; updateRequestProperties(getDefaultRequestProperties(), requestHeaders); } @@ -45,6 +45,10 @@ protected void updateRequestProperties(HttpDataSource.RequestProperties requestP } protected OkHttpDataSource createDataSourceInternal(HttpDataSource.RequestProperties defaultRequestProperties) { - return new OkHttpDataSource(mCallFactory, mUserAgent, null, mCacheControl, defaultRequestProperties); + OkHttpDataSource okHttpDataSource = new OkHttpDataSource(mCallFactory, mUserAgent, null, mCacheControl, defaultRequestProperties); + if (mListener != null) { + okHttpDataSource.addTransferListener(mListener); + } + return okHttpDataSource; } } diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/DataSourceFactoryProvider.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/DataSourceFactoryProvider.java index 7c27a655d0603..44d590fe1b05a 100644 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/DataSourceFactoryProvider.java +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/DataSourceFactoryProvider.java @@ -3,11 +3,12 @@ import android.content.Context; import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.TransferListener; import java.util.Map; import org.unimodules.core.ModuleRegistry; public interface DataSourceFactoryProvider { - DataSource.Factory createFactory(Context reactApplicationContext, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders); + DataSource.Factory createFactory(Context reactApplicationContext, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders, TransferListener listener); } diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactory.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactory.java index ec2e9aaba0485..cb8785ede4f25 100644 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactory.java +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactory.java @@ -4,6 +4,7 @@ import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; +import com.google.android.exoplayer2.upstream.TransferListener; import java.net.CookieHandler; import java.util.Map; @@ -15,14 +16,14 @@ public class SharedCookiesDataSourceFactory implements DataSource.Factory { private final DataSource.Factory mDataSourceFactory; - public SharedCookiesDataSourceFactory(Context reactApplicationContext, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders) { + public SharedCookiesDataSourceFactory(Context reactApplicationContext, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders, TransferListener listener) { CookieHandler cookieHandler = moduleRegistry.getModule(CookieHandler.class); OkHttpClient.Builder builder = new OkHttpClient.Builder(); if (cookieHandler != null) { builder.cookieJar(new JavaNetCookieJar(cookieHandler)); } OkHttpClient client = builder.build(); - mDataSourceFactory = new DefaultDataSourceFactory(reactApplicationContext, null, new CustomHeadersOkHttpDataSourceFactory(client, userAgent, requestHeaders)); + mDataSourceFactory = new DefaultDataSourceFactory(reactApplicationContext, null, new CustomHeadersOkHttpDataSourceFactory(client, userAgent, requestHeaders, listener)); } @Override diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactoryProvider.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactoryProvider.java index 8824197e71701..a8750d3bce0dd 100644 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactoryProvider.java +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/SharedCookiesDataSourceFactoryProvider.java @@ -3,6 +3,7 @@ import android.content.Context; import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.TransferListener; import java.util.Collections; import java.util.List; @@ -18,7 +19,7 @@ public List getExportedInterfaces() { } @Override - public DataSource.Factory createFactory(Context reactApplicationContext, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders) { - return new SharedCookiesDataSourceFactory(reactApplicationContext, moduleRegistry, userAgent, requestHeaders); + public DataSource.Factory createFactory(Context reactApplicationContext, ModuleRegistry moduleRegistry, String userAgent, Map requestHeaders, TransferListener listener) { + return new SharedCookiesDataSourceFactory(reactApplicationContext, moduleRegistry, userAgent, requestHeaders, listener); } }