Commit 9deba620 by tonihei

Set LogSessionId on MediaParser for DASH sources.

This requires some plumbing through DashMediaPeriod and DashChunkSource.

PiperOrigin-RevId: 411012115
parent 4a0ea37a
...@@ -51,7 +51,8 @@ public final class BundledChunkExtractor implements ExtractorOutput, ChunkExtrac ...@@ -51,7 +51,8 @@ public final class BundledChunkExtractor implements ExtractorOutput, ChunkExtrac
format, format,
enableEventMessageTrack, enableEventMessageTrack,
closedCaptionFormats, closedCaptionFormats,
playerEmsgTrackOutput) -> { playerEmsgTrackOutput,
playerId) -> {
@Nullable String containerMimeType = format.containerMimeType; @Nullable String containerMimeType = format.containerMimeType;
Extractor extractor; Extractor extractor;
if (MimeTypes.isText(containerMimeType)) { if (MimeTypes.isText(containerMimeType)) {
......
...@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source.chunk; ...@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source.chunk;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.extractor.ChunkIndex; import com.google.android.exoplayer2.extractor.ChunkIndex;
import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.ExtractorInput;
import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.extractor.TrackOutput;
...@@ -42,6 +43,8 @@ public interface ChunkExtractor { ...@@ -42,6 +43,8 @@ public interface ChunkExtractor {
* @param representationFormat The format of the representation to extract from. * @param representationFormat The format of the representation to extract from.
* @param enableEventMessageTrack Whether to enable the event message track. * @param enableEventMessageTrack Whether to enable the event message track.
* @param closedCaptionFormats The {@link Format Formats} of the Closed-Caption tracks. * @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. * @return A new {@link ChunkExtractor} instance, or null if not applicable.
*/ */
@Nullable @Nullable
...@@ -50,7 +53,8 @@ public interface ChunkExtractor { ...@@ -50,7 +53,8 @@ public interface ChunkExtractor {
Format representationFormat, Format representationFormat,
boolean enableEventMessageTrack, boolean enableEventMessageTrack,
List<Format> closedCaptionFormats, List<Format> closedCaptionFormats,
@Nullable TrackOutput playerEmsgTrackOutput); @Nullable TrackOutput playerEmsgTrackOutput,
PlayerId playerId);
} }
/** Provides {@link TrackOutput} instances to be written to during extraction. */ /** Provides {@link TrackOutput} instances to be written to during extraction. */
......
...@@ -30,6 +30,7 @@ import androidx.annotation.Nullable; ...@@ -30,6 +30,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.extractor.ChunkIndex; import com.google.android.exoplayer2.extractor.ChunkIndex;
import com.google.android.exoplayer2.extractor.DummyTrackOutput; import com.google.android.exoplayer2.extractor.DummyTrackOutput;
import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.ExtractorInput;
...@@ -42,6 +43,7 @@ import com.google.android.exoplayer2.source.mediaparser.OutputConsumerAdapterV30 ...@@ -42,6 +43,7 @@ import com.google.android.exoplayer2.source.mediaparser.OutputConsumerAdapterV30
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -58,10 +60,12 @@ public final class MediaParserChunkExtractor implements ChunkExtractor { ...@@ -58,10 +60,12 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
format, format,
enableEventMessageTrack, enableEventMessageTrack,
closedCaptionFormats, closedCaptionFormats,
playerEmsgTrackOutput) -> { playerEmsgTrackOutput,
playerId) -> {
if (!MimeTypes.isText(format.containerMimeType)) { if (!MimeTypes.isText(format.containerMimeType)) {
// Container is either Matroska or Fragmented MP4. // Container is either Matroska or Fragmented MP4.
return new MediaParserChunkExtractor(primaryTrackType, format, closedCaptionFormats); return new MediaParserChunkExtractor(
primaryTrackType, format, closedCaptionFormats, playerId);
} else { } else {
// This is either RAWCC (unsupported) or a text track that does not require an extractor. // This is either RAWCC (unsupported) or a text track that does not require an extractor.
Log.w(TAG, "Ignoring an unsupported text track."); Log.w(TAG, "Ignoring an unsupported text track.");
...@@ -86,10 +90,14 @@ public final class MediaParserChunkExtractor implements ChunkExtractor { ...@@ -86,10 +90,14 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
* @param manifestFormat The chunks {@link Format} as obtained from the manifest. * @param manifestFormat The chunks {@link Format} as obtained from the manifest.
* @param closedCaptionFormats A list containing the {@link Format Formats} of the closed-caption * @param closedCaptionFormats A list containing the {@link Format Formats} of the closed-caption
* tracks in the chunks. * tracks in the chunks.
* @param playerId The {@link PlayerId} of the player this chunk extractor is used for.
*/ */
@SuppressLint("WrongConstant") @SuppressLint("WrongConstant")
public MediaParserChunkExtractor( public MediaParserChunkExtractor(
@C.TrackType int primaryTrackType, Format manifestFormat, List<Format> closedCaptionFormats) { @C.TrackType int primaryTrackType,
Format manifestFormat,
List<Format> closedCaptionFormats,
PlayerId playerId) {
outputConsumerAdapter = outputConsumerAdapter =
new OutputConsumerAdapterV30( new OutputConsumerAdapterV30(
manifestFormat, primaryTrackType, /* expectDummySeekMap= */ true); manifestFormat, primaryTrackType, /* expectDummySeekMap= */ true);
...@@ -114,6 +122,9 @@ public final class MediaParserChunkExtractor implements ChunkExtractor { ...@@ -114,6 +122,9 @@ public final class MediaParserChunkExtractor implements ChunkExtractor {
MediaParserUtil.toCaptionsMediaFormat(closedCaptionFormats.get(i))); MediaParserUtil.toCaptionsMediaFormat(closedCaptionFormats.get(i)));
} }
mediaParser.setParameter(PARAMETER_EXPOSE_CAPTION_FORMATS, closedCaptionMediaFormats); mediaParser.setParameter(PARAMETER_EXPOSE_CAPTION_FORMATS, closedCaptionMediaFormats);
if (Util.SDK_INT >= 31) {
MediaParserUtil.setLogSessionIdOnMediaParser(mediaParser, playerId);
}
outputConsumerAdapter.setMuxedCaptionFormats(closedCaptionFormats); outputConsumerAdapter.setMuxedCaptionFormats(closedCaptionFormats);
trackOutputProviderAdapter = new TrackOutputProviderAdapter(); trackOutputProviderAdapter = new TrackOutputProviderAdapter();
dummyTrackOutput = new DummyTrackOutput(); dummyTrackOutput = new DummyTrackOutput();
......
...@@ -19,6 +19,7 @@ import android.os.SystemClock; ...@@ -19,6 +19,7 @@ import android.os.SystemClock;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.source.chunk.ChunkSource; import com.google.android.exoplayer2.source.chunk.ChunkSource;
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler; import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
import com.google.android.exoplayer2.source.dash.manifest.DashManifest; import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
...@@ -49,6 +50,7 @@ public interface DashChunkSource extends ChunkSource { ...@@ -49,6 +50,7 @@ public interface DashChunkSource extends ChunkSource {
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output. * @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. * @param transferListener The transfer listener which should be informed of any data transfers.
* May be null if no listener is available. * 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}. * @return The created {@link DashChunkSource}.
*/ */
DashChunkSource createDashChunkSource( DashChunkSource createDashChunkSource(
...@@ -63,7 +65,8 @@ public interface DashChunkSource extends ChunkSource { ...@@ -63,7 +65,8 @@ public interface DashChunkSource extends ChunkSource {
boolean enableEventMessageTrack, boolean enableEventMessageTrack,
List<Format> closedCaptionFormats, List<Format> closedCaptionFormats,
@Nullable PlayerTrackEmsgHandler playerEmsgHandler, @Nullable PlayerTrackEmsgHandler playerEmsgHandler,
@Nullable TransferListener transferListener); @Nullable TransferListener transferListener,
PlayerId playerId);
} }
/** /**
......
...@@ -25,6 +25,7 @@ import androidx.annotation.Nullable; ...@@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.SeekParameters; import com.google.android.exoplayer2.SeekParameters;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.drm.DrmSessionEventListener; import com.google.android.exoplayer2.drm.DrmSessionEventListener;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.offline.StreamKey; import com.google.android.exoplayer2.offline.StreamKey;
...@@ -96,6 +97,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -96,6 +97,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
trackEmsgHandlerBySampleStream; trackEmsgHandlerBySampleStream;
private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher; private final MediaSourceEventListener.EventDispatcher mediaSourceEventDispatcher;
private final DrmSessionEventListener.EventDispatcher drmEventDispatcher; private final DrmSessionEventListener.EventDispatcher drmEventDispatcher;
private final PlayerId playerId;
@Nullable private Callback callback; @Nullable private Callback callback;
private ChunkSampleStream<DashChunkSource>[] sampleStreams; private ChunkSampleStream<DashChunkSource>[] sampleStreams;
...@@ -120,7 +122,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -120,7 +122,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
LoaderErrorThrower manifestLoaderErrorThrower, LoaderErrorThrower manifestLoaderErrorThrower,
Allocator allocator, Allocator allocator,
CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory, CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory,
PlayerEmsgCallback playerEmsgCallback) { PlayerEmsgCallback playerEmsgCallback,
PlayerId playerId) {
this.id = id; this.id = id;
this.manifest = manifest; this.manifest = manifest;
this.baseUrlExclusionList = baseUrlExclusionList; this.baseUrlExclusionList = baseUrlExclusionList;
...@@ -135,6 +138,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -135,6 +138,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower; this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
this.allocator = allocator; this.allocator = allocator;
this.compositeSequenceableLoaderFactory = compositeSequenceableLoaderFactory; this.compositeSequenceableLoaderFactory = compositeSequenceableLoaderFactory;
this.playerId = playerId;
playerEmsgHandler = new PlayerEmsgHandler(manifest, playerEmsgCallback, allocator); playerEmsgHandler = new PlayerEmsgHandler(manifest, playerEmsgCallback, allocator);
sampleStreams = newSampleStreamArray(0); sampleStreams = newSampleStreamArray(0);
eventSampleStreams = new EventSampleStream[0]; eventSampleStreams = new EventSampleStream[0];
...@@ -777,7 +781,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -777,7 +781,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
enableEventMessageTrack, enableEventMessageTrack,
embeddedClosedCaptionTrackFormats, embeddedClosedCaptionTrackFormats,
trackPlayerEmsgHandler, trackPlayerEmsgHandler,
transferListener); transferListener,
playerId);
ChunkSampleStream<DashChunkSource> stream = ChunkSampleStream<DashChunkSource> stream =
new ChunkSampleStream<>( new ChunkSampleStream<>(
trackGroupInfo.trackType, trackGroupInfo.trackType,
......
...@@ -598,7 +598,8 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -598,7 +598,8 @@ public final class DashMediaSource extends BaseMediaSource {
manifestLoadErrorThrower, manifestLoadErrorThrower,
allocator, allocator,
compositeSequenceableLoaderFactory, compositeSequenceableLoaderFactory,
playerEmsgCallback); playerEmsgCallback,
getPlayerId());
periodsById.put(mediaPeriod.id, mediaPeriod); periodsById.put(mediaPeriod.id, mediaPeriod);
return mediaPeriod; return mediaPeriod;
} }
......
...@@ -25,6 +25,7 @@ import androidx.annotation.Nullable; ...@@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.SeekParameters; import com.google.android.exoplayer2.SeekParameters;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.extractor.ChunkIndex; import com.google.android.exoplayer2.extractor.ChunkIndex;
import com.google.android.exoplayer2.source.BehindLiveWindowException; import com.google.android.exoplayer2.source.BehindLiveWindowException;
import com.google.android.exoplayer2.source.chunk.BaseMediaChunkIterator; import com.google.android.exoplayer2.source.chunk.BaseMediaChunkIterator;
...@@ -110,7 +111,8 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -110,7 +111,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
boolean enableEventMessageTrack, boolean enableEventMessageTrack,
List<Format> closedCaptionFormats, List<Format> closedCaptionFormats,
@Nullable PlayerTrackEmsgHandler playerEmsgHandler, @Nullable PlayerTrackEmsgHandler playerEmsgHandler,
@Nullable TransferListener transferListener) { @Nullable TransferListener transferListener,
PlayerId playerId) {
DataSource dataSource = dataSourceFactory.createDataSource(); DataSource dataSource = dataSourceFactory.createDataSource();
if (transferListener != null) { if (transferListener != null) {
dataSource.addTransferListener(transferListener); dataSource.addTransferListener(transferListener);
...@@ -129,7 +131,8 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -129,7 +131,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
maxSegmentsPerLoad, maxSegmentsPerLoad,
enableEventMessageTrack, enableEventMessageTrack,
closedCaptionFormats, closedCaptionFormats,
playerEmsgHandler); playerEmsgHandler,
playerId);
} }
} }
...@@ -171,6 +174,7 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -171,6 +174,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
* @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output. * @param closedCaptionFormats The {@link Format Formats} of closed caption tracks to be output.
* @param playerTrackEmsgHandler The {@link PlayerTrackEmsgHandler} instance to handle emsg * @param playerTrackEmsgHandler The {@link PlayerTrackEmsgHandler} instance to handle emsg
* messages targeting the player. Maybe null if this is not necessary. * 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( public DefaultDashChunkSource(
ChunkExtractor.Factory chunkExtractorFactory, ChunkExtractor.Factory chunkExtractorFactory,
...@@ -186,7 +190,8 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -186,7 +190,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
int maxSegmentsPerLoad, int maxSegmentsPerLoad,
boolean enableEventMessageTrack, boolean enableEventMessageTrack,
List<Format> closedCaptionFormats, List<Format> closedCaptionFormats,
@Nullable PlayerTrackEmsgHandler playerTrackEmsgHandler) { @Nullable PlayerTrackEmsgHandler playerTrackEmsgHandler,
PlayerId playerId) {
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower; this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
this.manifest = manifest; this.manifest = manifest;
this.baseUrlExclusionList = baseUrlExclusionList; this.baseUrlExclusionList = baseUrlExclusionList;
...@@ -217,7 +222,8 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -217,7 +222,8 @@ public class DefaultDashChunkSource implements DashChunkSource {
representation.format, representation.format,
enableEventMessageTrack, enableEventMessageTrack,
closedCaptionFormats, closedCaptionFormats,
playerTrackEmsgHandler), playerTrackEmsgHandler,
playerId),
/* segmentNumShift= */ 0, /* segmentNumShift= */ 0,
representation.getIndex()); representation.getIndex());
} }
......
...@@ -21,6 +21,7 @@ import android.net.Uri; ...@@ -21,6 +21,7 @@ import android.net.Uri;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.drm.DrmSessionEventListener; import com.google.android.exoplayer2.drm.DrmSessionEventListener;
import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory; import com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory;
...@@ -212,7 +213,8 @@ public final class DashMediaPeriodTest { ...@@ -212,7 +213,8 @@ public final class DashMediaPeriodTest {
mock(LoaderErrorThrower.class), mock(LoaderErrorThrower.class),
mock(Allocator.class), mock(Allocator.class),
mock(CompositeSequenceableLoaderFactory.class), mock(CompositeSequenceableLoaderFactory.class),
mock(PlayerEmsgCallback.class)); mock(PlayerEmsgCallback.class),
PlayerId.UNSET);
} }
private static DashManifest parseManifest(String fileName) throws IOException { private static DashManifest parseManifest(String fileName) throws IOException {
......
...@@ -26,6 +26,7 @@ import androidx.test.core.app.ApplicationProvider; ...@@ -26,6 +26,7 @@ import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.source.LoadEventInfo; import com.google.android.exoplayer2.source.LoadEventInfo;
import com.google.android.exoplayer2.source.MediaLoadData; import com.google.android.exoplayer2.source.MediaLoadData;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
...@@ -95,7 +96,8 @@ public class DefaultDashChunkSourceTest { ...@@ -95,7 +96,8 @@ public class DefaultDashChunkSourceTest {
/* maxSegmentsPerLoad= */ 1, /* maxSegmentsPerLoad= */ 1,
/* enableEventMessageTrack= */ false, /* enableEventMessageTrack= */ false,
/* closedCaptionFormats */ ImmutableList.of(), /* closedCaptionFormats */ ImmutableList.of(),
/* playerTrackEmsgHandler= */ null); /* playerTrackEmsgHandler= */ null,
PlayerId.UNSET);
long nowInPeriodUs = Util.msToUs(nowMs - manifest.availabilityStartTimeMs); long nowInPeriodUs = Util.msToUs(nowMs - manifest.availabilityStartTimeMs);
ChunkHolder output = new ChunkHolder(); ChunkHolder output = new ChunkHolder();
...@@ -143,7 +145,8 @@ public class DefaultDashChunkSourceTest { ...@@ -143,7 +145,8 @@ public class DefaultDashChunkSourceTest {
/* maxSegmentsPerLoad= */ 1, /* maxSegmentsPerLoad= */ 1,
/* enableEventMessageTrack= */ false, /* enableEventMessageTrack= */ false,
/* closedCaptionFormats */ ImmutableList.of(), /* closedCaptionFormats */ ImmutableList.of(),
/* playerTrackEmsgHandler= */ null); /* playerTrackEmsgHandler= */ null,
PlayerId.UNSET);
ChunkHolder output = new ChunkHolder(); ChunkHolder output = new ChunkHolder();
chunkSource.getNextChunk( chunkSource.getNextChunk(
...@@ -326,7 +329,8 @@ public class DefaultDashChunkSourceTest { ...@@ -326,7 +329,8 @@ public class DefaultDashChunkSourceTest {
/* maxSegmentsPerLoad= */ 1, /* maxSegmentsPerLoad= */ 1,
/* enableEventMessageTrack= */ false, /* enableEventMessageTrack= */ false,
/* closedCaptionFormats */ ImmutableList.of(), /* closedCaptionFormats */ ImmutableList.of(),
/* playerTrackEmsgHandler= */ null); /* playerTrackEmsgHandler= */ null,
PlayerId.UNSET);
} }
private LoadErrorHandlingPolicy.LoadErrorInfo createFakeLoadErrorInfo( private LoadErrorHandlingPolicy.LoadErrorInfo createFakeLoadErrorInfo(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment