diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaParserExtractorAdapter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaParserExtractorAdapter.java index 3624552059..86dfd12673 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaParserExtractorAdapter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/MediaParserExtractorAdapter.java @@ -28,7 +28,10 @@ import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.DataReader; import androidx.media3.common.util.UnstableApi; +import androidx.media3.common.util.Util; +import androidx.media3.exoplayer.analytics.PlayerId; import androidx.media3.exoplayer.source.mediaparser.InputReaderAdapterV30; +import androidx.media3.exoplayer.source.mediaparser.MediaParserUtil; import androidx.media3.exoplayer.source.mediaparser.OutputConsumerAdapterV30; import androidx.media3.extractor.Extractor; import androidx.media3.extractor.ExtractorOutput; @@ -54,7 +57,7 @@ public final class MediaParserExtractorAdapter implements ProgressiveMediaExtrac private String parserName; @SuppressLint("WrongConstant") - public MediaParserExtractorAdapter() { + public MediaParserExtractorAdapter(PlayerId playerId) { // TODO: Add support for injecting the desired extractor list. outputConsumerAdapter = new OutputConsumerAdapterV30(); inputReaderAdapter = new InputReaderAdapterV30(); @@ -63,6 +66,9 @@ public final class MediaParserExtractorAdapter implements ProgressiveMediaExtrac mediaParser.setParameter(PARAMETER_IN_BAND_CRYPTO_INFO, true); mediaParser.setParameter(PARAMETER_INCLUDE_SUPPLEMENTAL_DATA, true); parserName = MediaParser.PARSER_NAME_UNKNOWN; + if (Util.SDK_INT >= 31) { + MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId); + } } @Override diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.java index a4a410c239..5146b61903 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.java @@ -19,6 +19,7 @@ import android.net.Uri; import androidx.media3.common.C; import androidx.media3.common.DataReader; import androidx.media3.common.util.UnstableApi; +import androidx.media3.exoplayer.analytics.PlayerId; import androidx.media3.extractor.Extractor; import androidx.media3.extractor.ExtractorOutput; import androidx.media3.extractor.PositionHolder; @@ -33,8 +34,12 @@ public interface ProgressiveMediaExtractor { /** Creates {@link ProgressiveMediaExtractor} instances. */ interface Factory { - /** Returns a new {@link ProgressiveMediaExtractor} instance. */ - ProgressiveMediaExtractor createProgressiveMediaExtractor(); + /** + * Returns a new {@link ProgressiveMediaExtractor} instance. + * + * @param playerId The {@link PlayerId} of the player this extractor is used for. + */ + ProgressiveMediaExtractor createProgressiveMediaExtractor(PlayerId playerId); } /** diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaSource.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaSource.java index eab17a9ed3..7965a19e16 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaSource.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ProgressiveMediaSource.java @@ -79,7 +79,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource * Factory(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory)}. */ public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory extractorsFactory) { - this(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory)); + this(dataSourceFactory, playerId -> new BundledExtractorsAdapter(extractorsFactory)); } /** @@ -107,7 +107,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource @Deprecated public Factory setExtractorsFactory(@Nullable ExtractorsFactory extractorsFactory) { this.progressiveMediaExtractorFactory = - () -> + playerId -> new BundledExtractorsAdapter( extractorsFactory != null ? extractorsFactory : new DefaultExtractorsFactory()); return this; @@ -315,7 +315,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource return new ProgressiveMediaPeriod( localConfiguration.uri, dataSource, - progressiveMediaExtractorFactory.createProgressiveMediaExtractor(), + progressiveMediaExtractorFactory.createProgressiveMediaExtractor(getPlayerId()), drmSessionManager, createDrmEventDispatcher(id), loadableLoadErrorHandlingPolicy, diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/mediaparser/MediaParserUtil.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/mediaparser/MediaParserUtil.java index 6c9854fddb..0363d561a2 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/mediaparser/MediaParserUtil.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/mediaparser/MediaParserUtil.java @@ -17,8 +17,11 @@ package androidx.media3.exoplayer.source.mediaparser; import android.media.MediaFormat; import android.media.MediaParser; +import android.media.metrics.LogSessionId; +import androidx.annotation.RequiresApi; import androidx.media3.common.Format; import androidx.media3.common.util.UnstableApi; +import androidx.media3.exoplayer.analytics.PlayerId; /** * Miscellaneous constants and utility methods related to the {@link MediaParser} integration. @@ -59,4 +62,27 @@ public final class MediaParserUtil { } return mediaFormat; } + + /** + * Calls {@link MediaParser#setLogSessionId(LogSessionId)}. + * + * @param mediaParser The {@link MediaParser} to call the method on. + * @param playerId The {@link PlayerId} to obtain the {@link LogSessionId} from. + */ + @RequiresApi(31) + public static void setLogSessionIdOnMediaParser(MediaParser mediaParser, PlayerId playerId) { + Api31.setLogSessionIdOnMediaParser(mediaParser, playerId); + } + + @RequiresApi(31) + private static final class Api31 { + private Api31() {} + + public static void setLogSessionIdOnMediaParser(MediaParser mediaParser, PlayerId playerId) { + LogSessionId logSessionId = playerId.getLogSessionId(); + if (!logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) { + mediaParser.setLogSessionId(logSessionId); + } + } + } } diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ProgressiveMediaPeriodTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ProgressiveMediaPeriodTest.java index eb8166e860..a6931c3164 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ProgressiveMediaPeriodTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/source/ProgressiveMediaPeriodTest.java @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import android.net.Uri; import androidx.media3.common.C; import androidx.media3.datasource.AssetDataSource; +import androidx.media3.exoplayer.analytics.PlayerId; import androidx.media3.exoplayer.drm.DrmSessionEventListener; import androidx.media3.exoplayer.drm.DrmSessionManager; import androidx.media3.exoplayer.source.MediaSource.MediaPeriodId; @@ -48,7 +49,8 @@ public final class ProgressiveMediaPeriodTest { @Test public void prepareUsingMediaParser_updatesSourceInfoBeforeOnPreparedCallback() throws TimeoutException { - testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(new MediaParserExtractorAdapter()); + testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback( + new MediaParserExtractorAdapter(PlayerId.UNSET)); } private static void testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(