diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/exo/SignalMediaSourceFactory.java b/app/src/main/java/org/thoughtcrime/securesms/video/exo/SignalMediaSourceFactory.java index 222b354929..43f94d7186 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/exo/SignalMediaSourceFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/exo/SignalMediaSourceFactory.java @@ -9,6 +9,8 @@ import androidx.media3.common.C; import androidx.media3.common.MediaItem; import androidx.media3.common.util.UnstableApi; import androidx.media3.datasource.DataSource; +import androidx.media3.datasource.DataSpec; +import androidx.media3.datasource.TransferListener; import androidx.media3.exoplayer.drm.DrmSessionManagerProvider; import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.exoplayer.source.ProgressiveMediaSource; @@ -25,7 +27,7 @@ public final class SignalMediaSourceFactory implements MediaSource.Factory { private final ProgressiveMediaSource.Factory progressiveMediaSourceFactory; public SignalMediaSourceFactory(@NonNull Context context) { - DataSource.Factory attachmentDataSourceFactory = new SignalDataSource.Factory(context, null, null); + DataSource.Factory attachmentDataSourceFactory = new SignalDataSource.Factory(context, null, ExoPlayerPool.DataSourceTransferListener.INSTANCE); ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory().setConstantBitrateSeekingEnabled(true); progressiveMediaSourceFactory = new ProgressiveMediaSource.Factory(attachmentDataSourceFactory, extractorsFactory); diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/exo/SimpleExoPlayerPool.kt b/app/src/main/java/org/thoughtcrime/securesms/video/exo/SimpleExoPlayerPool.kt index 505e5cd1fe..b3f07a25aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/exo/SimpleExoPlayerPool.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/video/exo/SimpleExoPlayerPool.kt @@ -6,6 +6,8 @@ import androidx.annotation.OptIn import androidx.media3.common.MimeTypes import androidx.media3.common.util.UnstableApi import androidx.media3.datasource.DataSource +import androidx.media3.datasource.DataSpec +import androidx.media3.datasource.TransferListener import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.mediacodec.MediaCodecUtil import androidx.media3.exoplayer.source.DefaultMediaSourceFactory @@ -24,7 +26,7 @@ import kotlin.time.Duration.Companion.seconds class SimpleExoPlayerPool(context: Context) : ExoPlayerPool(MAXIMUM_RESERVED_PLAYERS) { private val context: Context = context.applicationContext private val okHttpClient = AppDependencies.okHttpClient.newBuilder().proxySelector(ContentProxySelector()).build() - private val dataSourceFactory: DataSource.Factory = SignalDataSource.Factory(AppDependencies.application, okHttpClient, null) + private val dataSourceFactory: DataSource.Factory = SignalDataSource.Factory(AppDependencies.application, okHttpClient, DataSourceTransferListener) private val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(dataSourceFactory) init { @@ -213,6 +215,26 @@ abstract class ExoPlayerPool( } } + @UnstableApi + object DataSourceTransferListener : TransferListener { + private val TAG = Log.tag(DataSourceTransferListener::class) + override fun onTransferInitializing(source: DataSource, dataSpec: DataSpec, isNetwork: Boolean) { + Log.d(TAG, "onTransferInitializing() for ${source.uri}") + } + + override fun onTransferStart(source: DataSource, dataSpec: DataSpec, isNetwork: Boolean) { + Log.d(TAG, "onTransferStart() for ${source.uri}") + } + + override fun onBytesTransferred(source: DataSource, dataSpec: DataSpec, isNetwork: Boolean, bytesTransferred: Int) { + Log.v(TAG, "$bytesTransferred bytes transferred for ${source.uri}") + } + + override fun onTransferEnd(source: DataSource, dataSpec: DataSpec, isNetwork: Boolean) { + Log.d(TAG, "onTransferEnd() for ${source.uri}") + } + } + protected abstract fun getMaxSimultaneousPlayback(): Int data class PoolStats(