Set LogSessionId on MediaParser for progressive playbacks.
PiperOrigin-RevId: 410766492
This commit is contained in:
parent
21e659ef8e
commit
4ebe046b5e
@ -28,7 +28,10 @@ import androidx.annotation.RequiresApi;
|
|||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.DataReader;
|
import androidx.media3.common.DataReader;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
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.InputReaderAdapterV30;
|
||||||
|
import androidx.media3.exoplayer.source.mediaparser.MediaParserUtil;
|
||||||
import androidx.media3.exoplayer.source.mediaparser.OutputConsumerAdapterV30;
|
import androidx.media3.exoplayer.source.mediaparser.OutputConsumerAdapterV30;
|
||||||
import androidx.media3.extractor.Extractor;
|
import androidx.media3.extractor.Extractor;
|
||||||
import androidx.media3.extractor.ExtractorOutput;
|
import androidx.media3.extractor.ExtractorOutput;
|
||||||
@ -54,7 +57,7 @@ public final class MediaParserExtractorAdapter implements ProgressiveMediaExtrac
|
|||||||
private String parserName;
|
private String parserName;
|
||||||
|
|
||||||
@SuppressLint("WrongConstant")
|
@SuppressLint("WrongConstant")
|
||||||
public MediaParserExtractorAdapter() {
|
public MediaParserExtractorAdapter(PlayerId playerId) {
|
||||||
// TODO: Add support for injecting the desired extractor list.
|
// TODO: Add support for injecting the desired extractor list.
|
||||||
outputConsumerAdapter = new OutputConsumerAdapterV30();
|
outputConsumerAdapter = new OutputConsumerAdapterV30();
|
||||||
inputReaderAdapter = new InputReaderAdapterV30();
|
inputReaderAdapter = new InputReaderAdapterV30();
|
||||||
@ -63,6 +66,9 @@ public final class MediaParserExtractorAdapter implements ProgressiveMediaExtrac
|
|||||||
mediaParser.setParameter(PARAMETER_IN_BAND_CRYPTO_INFO, true);
|
mediaParser.setParameter(PARAMETER_IN_BAND_CRYPTO_INFO, true);
|
||||||
mediaParser.setParameter(PARAMETER_INCLUDE_SUPPLEMENTAL_DATA, true);
|
mediaParser.setParameter(PARAMETER_INCLUDE_SUPPLEMENTAL_DATA, true);
|
||||||
parserName = MediaParser.PARSER_NAME_UNKNOWN;
|
parserName = MediaParser.PARSER_NAME_UNKNOWN;
|
||||||
|
if (Util.SDK_INT >= 31) {
|
||||||
|
MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -19,6 +19,7 @@ import android.net.Uri;
|
|||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.DataReader;
|
import androidx.media3.common.DataReader;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
|
import androidx.media3.exoplayer.analytics.PlayerId;
|
||||||
import androidx.media3.extractor.Extractor;
|
import androidx.media3.extractor.Extractor;
|
||||||
import androidx.media3.extractor.ExtractorOutput;
|
import androidx.media3.extractor.ExtractorOutput;
|
||||||
import androidx.media3.extractor.PositionHolder;
|
import androidx.media3.extractor.PositionHolder;
|
||||||
@ -33,8 +34,12 @@ public interface ProgressiveMediaExtractor {
|
|||||||
/** Creates {@link ProgressiveMediaExtractor} instances. */
|
/** Creates {@link ProgressiveMediaExtractor} instances. */
|
||||||
interface Factory {
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,7 +79,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
* Factory(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory)}.
|
* Factory(dataSourceFactory, () -> new BundledExtractorsAdapter(extractorsFactory)}.
|
||||||
*/
|
*/
|
||||||
public Factory(DataSource.Factory dataSourceFactory, ExtractorsFactory 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
|
@Deprecated
|
||||||
public Factory setExtractorsFactory(@Nullable ExtractorsFactory extractorsFactory) {
|
public Factory setExtractorsFactory(@Nullable ExtractorsFactory extractorsFactory) {
|
||||||
this.progressiveMediaExtractorFactory =
|
this.progressiveMediaExtractorFactory =
|
||||||
() ->
|
playerId ->
|
||||||
new BundledExtractorsAdapter(
|
new BundledExtractorsAdapter(
|
||||||
extractorsFactory != null ? extractorsFactory : new DefaultExtractorsFactory());
|
extractorsFactory != null ? extractorsFactory : new DefaultExtractorsFactory());
|
||||||
return this;
|
return this;
|
||||||
@ -315,7 +315,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
return new ProgressiveMediaPeriod(
|
return new ProgressiveMediaPeriod(
|
||||||
localConfiguration.uri,
|
localConfiguration.uri,
|
||||||
dataSource,
|
dataSource,
|
||||||
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(),
|
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(getPlayerId()),
|
||||||
drmSessionManager,
|
drmSessionManager,
|
||||||
createDrmEventDispatcher(id),
|
createDrmEventDispatcher(id),
|
||||||
loadableLoadErrorHandlingPolicy,
|
loadableLoadErrorHandlingPolicy,
|
||||||
|
@ -17,8 +17,11 @@ package androidx.media3.exoplayer.source.mediaparser;
|
|||||||
|
|
||||||
import android.media.MediaFormat;
|
import android.media.MediaFormat;
|
||||||
import android.media.MediaParser;
|
import android.media.MediaParser;
|
||||||
|
import android.media.metrics.LogSessionId;
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
|
import androidx.media3.exoplayer.analytics.PlayerId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Miscellaneous constants and utility methods related to the {@link MediaParser} integration.
|
* Miscellaneous constants and utility methods related to the {@link MediaParser} integration.
|
||||||
@ -59,4 +62,27 @@ public final class MediaParserUtil {
|
|||||||
}
|
}
|
||||||
return mediaFormat;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.datasource.AssetDataSource;
|
import androidx.media3.datasource.AssetDataSource;
|
||||||
|
import androidx.media3.exoplayer.analytics.PlayerId;
|
||||||
import androidx.media3.exoplayer.drm.DrmSessionEventListener;
|
import androidx.media3.exoplayer.drm.DrmSessionEventListener;
|
||||||
import androidx.media3.exoplayer.drm.DrmSessionManager;
|
import androidx.media3.exoplayer.drm.DrmSessionManager;
|
||||||
import androidx.media3.exoplayer.source.MediaSource.MediaPeriodId;
|
import androidx.media3.exoplayer.source.MediaSource.MediaPeriodId;
|
||||||
@ -48,7 +49,8 @@ public final class ProgressiveMediaPeriodTest {
|
|||||||
@Test
|
@Test
|
||||||
public void prepareUsingMediaParser_updatesSourceInfoBeforeOnPreparedCallback()
|
public void prepareUsingMediaParser_updatesSourceInfoBeforeOnPreparedCallback()
|
||||||
throws TimeoutException {
|
throws TimeoutException {
|
||||||
testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(new MediaParserExtractorAdapter());
|
testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(
|
||||||
|
new MediaParserExtractorAdapter(PlayerId.UNSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(
|
private static void testExtractorsUpdatesSourceInfoBeforeOnPreparedCallback(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user