Skip to content

Commit

Permalink
Set LogSessionId on MediaParser for DASH sources.
Browse files Browse the repository at this point in the history
This requires some plumbing through DashMediaPeriod and DashChunkSource.

PiperOrigin-RevId: 411012115
  • Loading branch information
tonihei authored and icbaker committed Nov 19, 2021
1 parent 74fb54a commit 48118f3
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ public final class BundledChunkExtractor implements ExtractorOutput, ChunkExtrac
format,
enableEventMessageTrack,
closedCaptionFormats,
playerEmsgTrackOutput) -> {
playerEmsgTrackOutput,
playerId) -> {
@Nullable String containerMimeType = format.containerMimeType;
Extractor extractor;
if (MimeTypes.isText(containerMimeType)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import androidx.media3.common.C;
import androidx.media3.common.Format;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.extractor.ChunkIndex;
import androidx.media3.extractor.ExtractorInput;
import androidx.media3.extractor.TrackOutput;
Expand All @@ -44,6 +45,8 @@ interface Factory {
* @param representationFormat The format of the representation to extract from.
* @param enableEventMessageTrack Whether to enable the event message track.
* @param closedCaptionFormats The {@link Format Formats} of the Closed-Caption tracks.
* @param playerEmsgTrackOutput The {@link TrackOutput} for extracted EMSG messages, or null.
* @param playerId The {@link PlayerId} of the player using this chunk extractor.
* @return A new {@link ChunkExtractor} instance, or null if not applicable.
*/
@Nullable
Expand All @@ -52,7 +55,8 @@ ChunkExtractor createProgressiveMediaExtractor(
Format representationFormat,
boolean enableEventMessageTrack,
List<Format> closedCaptionFormats,
@Nullable TrackOutput playerEmsgTrackOutput);
@Nullable TrackOutput playerEmsgTrackOutput,
PlayerId playerId);
}

/** Provides {@link TrackOutput} instances to be written to during extraction. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.Log;
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;
Expand All @@ -60,10 +62,12 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
format,
enableEventMessageTrack,
closedCaptionFormats,
playerEmsgTrackOutput) -> {
playerEmsgTrackOutput,
playerId) -> {
if (!MimeTypes.isText(format.containerMimeType)) {
// Container is either Matroska or Fragmented MP4.
return new MediaParserChunkExtractor(primaryTrackType, format, closedCaptionFormats);
return new MediaParserChunkExtractor(
primaryTrackType, format, closedCaptionFormats, playerId);
} else {
// This is either RAWCC (unsupported) or a text track that does not require an extractor.
Log.w(TAG, "Ignoring an unsupported text track.");
Expand All @@ -88,10 +92,14 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
* @param manifestFormat The chunks {@link Format} as obtained from the manifest.
* @param closedCaptionFormats A list containing the {@link Format Formats} of the closed-caption
* tracks in the chunks.
* @param playerId The {@link PlayerId} of the player this chunk extractor is used for.
*/
@SuppressLint("WrongConstant")
public MediaParserChunkExtractor(
@C.TrackType int primaryTrackType, Format manifestFormat, List<Format> closedCaptionFormats) {
@C.TrackType int primaryTrackType,
Format manifestFormat,
List<Format> closedCaptionFormats,
PlayerId playerId) {
outputConsumerAdapter =
new OutputConsumerAdapterV30(
manifestFormat, primaryTrackType, /* expectDummySeekMap= */ true);
Expand All @@ -116,6 +124,9 @@ public MediaParserChunkExtractor(
MediaParserUtil.toCaptionsMediaFormat(closedCaptionFormats.get(i)));
}
mediaParser.setParameter(PARAMETER_EXPOSE_CAPTION_FORMATS, closedCaptionMediaFormats);
if (Util.SDK_INT >= 31) {
MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId);
}
outputConsumerAdapter.setMuxedCaptionFormats(closedCaptionFormats);
trackOutputProviderAdapter = new TrackOutputProviderAdapter();
dummyTrackOutput = new DummyTrackOutput();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import androidx.media3.common.Format;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.datasource.TransferListener;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
import androidx.media3.exoplayer.dash.manifest.DashManifest;
import androidx.media3.exoplayer.source.chunk.ChunkSource;
Expand Down Expand Up @@ -51,6 +52,7 @@ interface Factory {
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output.
* @param transferListener The transfer listener which should be informed of any data transfers.
* May be null if no listener is available.
* @param playerId The {@link PlayerId} of the player using this chunk source.
* @return The created {@link DashChunkSource}.
*/
DashChunkSource createDashChunkSource(
Expand All @@ -65,7 +67,8 @@ DashChunkSource createDashChunkSource(
boolean enableEventMessageTrack,
List<Format> closedCaptionFormats,
@Nullable PlayerTrackEmsgHandler playerEmsgHandler,
@Nullable TransferListener transferListener);
@Nullable TransferListener transferListener,
PlayerId playerId);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import androidx.media3.common.util.Util;
import androidx.media3.datasource.TransferListener;
import androidx.media3.exoplayer.SeekParameters;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.dash.PlayerEmsgHandler.PlayerEmsgCallback;
import androidx.media3.exoplayer.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
import androidx.media3.exoplayer.dash.manifest.AdaptationSet;
Expand Down Expand Up @@ -96,6 +97,7 @@
trackEmsgHandlerBySampleStream;
private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher;
private final DrmSessionEventListener.EventDispatcher drmEventDispatcher;
private final PlayerId playerId;

@Nullable private Callback callback;
private ChunkSampleStream<DashChunkSource>[] sampleStreams;
Expand All @@ -120,7 +122,8 @@ public DashMediaPeriod(
LoaderErrorThrower manifestLoaderErrorThrower,
Allocator allocator,
CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory,
PlayerEmsgCallback playerEmsgCallback) {
PlayerEmsgCallback playerEmsgCallback,
PlayerId playerId) {
this.id = id;
this.manifest = manifest;
this.baseUrlExclusionList = baseUrlExclusionList;
Expand All @@ -135,6 +138,7 @@ public DashMediaPeriod(
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
this.allocator = allocator;
this.compositeSequenceableLoaderFactory = compositeSequenceableLoaderFactory;
this.playerId = playerId;
playerEmsgHandler = new PlayerEmsgHandler(manifest, playerEmsgCallback, allocator);
sampleStreams = newSampleStreamArray(0);
eventSampleStreams = new EventSampleStream[0];
Expand Down Expand Up @@ -777,7 +781,8 @@ private ChunkSampleStream<DashChunkSource> buildSampleStream(
enableEventMessageTrack,
embeddedClosedCaptionTrackFormats,
trackPlayerEmsgHandler,
transferListener);
transferListener,
playerId);
ChunkSampleStream<DashChunkSource> stream =
new ChunkSampleStream<>(
trackGroupInfo.trackType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,8 @@ public MediaPeriod createPeriod(MediaPeriodId id, Allocator allocator, long star
manifestLoadErrorThrower,
allocator,
compositeSequenceableLoaderFactory,
playerEmsgCallback);
playerEmsgCallback,
getPlayerId());
periodsById.put(mediaPeriod.id, mediaPeriod);
return mediaPeriod;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import androidx.media3.datasource.HttpDataSource.InvalidResponseCodeException;
import androidx.media3.datasource.TransferListener;
import androidx.media3.exoplayer.SeekParameters;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
import androidx.media3.exoplayer.dash.manifest.AdaptationSet;
import androidx.media3.exoplayer.dash.manifest.BaseUrl;
Expand Down Expand Up @@ -112,7 +113,8 @@ public DashChunkSource createDashChunkSource(
boolean enableEventMessageTrack,
List<Format> closedCaptionFormats,
@Nullable PlayerTrackEmsgHandler playerEmsgHandler,
@Nullable TransferListener transferListener) {
@Nullable TransferListener transferListener,
PlayerId playerId) {
DataSource dataSource = dataSourceFactory.createDataSource();
if (transferListener != null) {
dataSource.addTransferListener(transferListener);
Expand All @@ -131,7 +133,8 @@ public DashChunkSource createDashChunkSource(
maxSegmentsPerLoad,
enableEventMessageTrack,
closedCaptionFormats,
playerEmsgHandler);
playerEmsgHandler,
playerId);
}
}

Expand Down Expand Up @@ -173,6 +176,7 @@ public DashChunkSource createDashChunkSource(
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output.
* @param playerTrackEmsgHandler The {@link PlayerTrackEmsgHandler} instance to handle emsg
* messages targeting the player. Maybe null if this is not necessary.
* @param playerId The {@link PlayerId} of the player using this chunk source.
*/
public DefaultDashChunkSource(
ChunkExtractor.Factory chunkExtractorFactory,
Expand All @@ -188,7 +192,8 @@ public DefaultDashChunkSource(
int maxSegmentsPerLoad,
boolean enableEventMessageTrack,
List<Format> closedCaptionFormats,
@Nullable PlayerTrackEmsgHandler playerTrackEmsgHandler) {
@Nullable PlayerTrackEmsgHandler playerTrackEmsgHandler,
PlayerId playerId) {
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
this.manifest = manifest;
this.baseUrlExclusionList = baseUrlExclusionList;
Expand Down Expand Up @@ -219,7 +224,8 @@ public DefaultDashChunkSource(
representation.format,
enableEventMessageTrack,
closedCaptionFormats,
playerTrackEmsgHandler),
playerTrackEmsgHandler,
playerId),
/* segmentNumShift= */ 0,
representation.getIndex());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import androidx.media3.common.TrackGroup;
import androidx.media3.common.TrackGroupArray;
import androidx.media3.datasource.TransferListener;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.dash.PlayerEmsgHandler.PlayerEmsgCallback;
import androidx.media3.exoplayer.dash.manifest.AdaptationSet;
import androidx.media3.exoplayer.dash.manifest.DashManifest;
Expand Down Expand Up @@ -212,7 +213,8 @@ private static DashMediaPeriod createDashMediaPeriod(DashManifest manifest, int
mock(LoaderErrorThrower.class),
mock(Allocator.class),
mock(CompositeSequenceableLoaderFactory.class),
mock(PlayerEmsgCallback.class));
mock(PlayerEmsgCallback.class),
PlayerId.UNSET);
}

private static DashManifest parseManifest(String fileName) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import androidx.media3.common.util.Util;
import androidx.media3.datasource.DataSpec;
import androidx.media3.datasource.HttpDataSource;
import androidx.media3.exoplayer.analytics.PlayerId;
import androidx.media3.exoplayer.dash.manifest.DashManifest;
import androidx.media3.exoplayer.dash.manifest.DashManifestParser;
import androidx.media3.exoplayer.source.LoadEventInfo;
Expand Down Expand Up @@ -95,7 +96,8 @@ public void getNextChunk_forLowLatencyManifest_setsCorrectMayNotLoadAtFullNetwor
/* maxSegmentsPerLoad= */ 1,
/* enableEventMessageTrack= */ false,
/* closedCaptionFormats */ ImmutableList.of(),
/* playerTrackEmsgHandler= */ null);
/* playerTrackEmsgHandler= */ null,
PlayerId.UNSET);

long nowInPeriodUs = Util.msToUs(nowMs - manifest.availabilityStartTimeMs);
ChunkHolder output = new ChunkHolder();
Expand Down Expand Up @@ -143,7 +145,8 @@ public void getNextChunk_forVodManifest_doesNotSetMayNotLoadAtFullNetworkSpeedFl
/* maxSegmentsPerLoad= */ 1,
/* enableEventMessageTrack= */ false,
/* closedCaptionFormats */ ImmutableList.of(),
/* playerTrackEmsgHandler= */ null);
/* playerTrackEmsgHandler= */ null,
PlayerId.UNSET);

ChunkHolder output = new ChunkHolder();
chunkSource.getNextChunk(
Expand Down Expand Up @@ -326,7 +329,8 @@ private DashChunkSource createDashChunkSource(int numberOfTracks) throws IOExcep
/* maxSegmentsPerLoad= */ 1,
/* enableEventMessageTrack= */ false,
/* closedCaptionFormats */ ImmutableList.of(),
/* playerTrackEmsgHandler= */ null);
/* playerTrackEmsgHandler= */ null,
PlayerId.UNSET);
}

private LoadErrorHandlingPolicy.LoadErrorInfo createFakeLoadErrorInfo(
Expand Down

0 comments on commit 48118f3

Please sign in to comment.