From 10ad73f201588057a030cd24698050add4c54bff Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Tue, 16 Jul 2024 17:48:47 -0400 Subject: [PATCH] Add logging around data source reading. --- .../video/exo/SignalMediaSourceFactory.java | 4 +++- .../video/exo/SimpleExoPlayerPool.kt | 24 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) 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(