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..148467f875f9c 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 @@ -24,13 +24,16 @@ public class CustomHeadersOkHttpDataSourceFactory extends HttpDataSource.BaseFac private final TransferListener mListener; @Nullable private final CacheControl mCacheControl; + @Nullable + private final TransferListener mBandwidthMeter; - 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 bandwidthMeter) { super(); mCallFactory = callFactory; mUserAgent = userAgent; mListener = null; mCacheControl = null; + mBandwidthMeter = bandwidthMeter; updateRequestProperties(getDefaultRequestProperties(), requestHeaders); } @@ -45,6 +48,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 (mBandwidthMeter != null) { + okHttpDataSource.addTransferListener(mBandwidthMeter); + } + 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..0bbbec60e73be 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 bandwidthMeter); } 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..da45b7eb54e9f 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 bandwidthMeter) { 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, bandwidthMeter)); } @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..1a48936684984 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 bandwidthMeter) { + return new SharedCookiesDataSourceFactory(reactApplicationContext, moduleRegistry, userAgent, requestHeaders, bandwidthMeter); } }