/** * Returns a new {@link DashMediaSource} using the current parameters and the specified * sideloaded manifest. * * @param manifest The manifest. {@link DashManifest#dynamic} must be false. * @return The new {@link DashMediaSource}. * @throws IllegalArgumentException If {@link DashManifest#dynamic} is true. */ public DashMediaSource createMediaSource(DashManifest manifest) { Assertions.checkArgument(!manifest.dynamic); isCreateCalled = true; return new DashMediaSource( manifest, /* manifestUri= */ null, /* manifestDataSourceFactory= */ null, /* manifestParser= */ null, chunkSourceFactory, compositeSequenceableLoaderFactory, loadErrorHandlingPolicy, livePresentationDelayMs, livePresentationDelayOverridesManifest, tag); }
/** * @deprecated Use {@link #createMediaSource(DashManifest)} and {@link * #addEventListener(Handler, MediaSourceEventListener)} instead. */ @Deprecated public DashMediaSource createMediaSource( DashManifest manifest, @Nullable Handler eventHandler, @Nullable MediaSourceEventListener eventListener) { DashMediaSource mediaSource = createMediaSource(manifest); if (eventHandler != null && eventListener != null) { mediaSource.addEventListener(eventHandler, eventListener); } return mediaSource; }
@Override public MediaPeriod createPeriod( MediaPeriodId periodId, Allocator allocator, long startPositionUs) { int periodIndex = (Integer) periodId.periodUid - firstPeriodId; EventDispatcher periodEventDispatcher = createEventDispatcher(periodId, manifest.getPeriod(periodIndex).startMs); DashMediaPeriod mediaPeriod = new DashMediaPeriod( firstPeriodId + periodIndex, manifest, periodIndex, chunkSourceFactory, mediaTransferListener, loadErrorHandlingPolicy, periodEventDispatcher, elapsedRealtimeOffsetMs, manifestLoadErrorThrower, allocator, compositeSequenceableLoaderFactory, playerEmsgCallback); periodsById.put(mediaPeriod.id, mediaPeriod); return mediaPeriod; }
/** Factory for {@link DashMediaSource}s. */ public static final class Factory implements AdsMediaSource.MediaSourceFactory { private final DashChunkSource.Factory chunkSourceFactory; private final @Nullable DataSource.Factory manifestDataSourceFactory; private @Nullable ParsingLoadable.Parser<? extends DashManifest> manifestParser; private CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory; private LoadErrorHandlingPolicy loadErrorHandlingPolicy; private long livePresentationDelayMs; private boolean livePresentationDelayOverridesManifest; private boolean isCreateCalled; private @Nullable Object tag; /** * Creates a new factory for {@link DashMediaSource}s. * * @param dataSourceFactory A factory for {@link DataSource} instances that will be used to load * manifest and media data. */ public Factory(DataSource.Factory dataSourceFactory) { this(new DefaultDashChunkSource.Factory(dataSourceFactory), dataSourceFactory); } /** * Creates a new factory for {@link DashMediaSource}s. * * @param chunkSourceFactory A factory for {@link DashChunkSource} instances. * @param manifestDataSourceFactory A factory for {@link DataSource} instances that will be used * to load (and refresh) the manifest. May be {@code null} if the factory will only ever be
if (staleManifestReloadAttempt++ < loadErrorHandlingPolicy.getMinimumLoadableRetryCount(loadable.type)) { scheduleManifestRefresh(getManifestLoadRetryDelayMillis()); } else { manifestFatalError = new DashManifestStaleException(); resolveUtcTimingElement(manifest.utcTiming); } else { processManifest(true); processManifest(true);
long liveStreamDurationUs = getNowUnixTimeUs() - C.msToUs(manifest.availabilityStartTimeMs); long liveStreamEndPositionInLastPeriodUs = liveStreamDurationUs - C.msToUs(manifest.getPeriod(lastPeriodIndex).startMs); manifest, tag); refreshSourceInfo(timeline, manifest); startLoadingManifest(); } else if (scheduleRefresh && manifest.dynamic long delayUntilNextLoadMs = Math.max(0, nextLoadTimestampMs - SystemClock.elapsedRealtime()); scheduleManifestRefresh(delayUntilNextLoadMs);
@Override public void onDashManifestPublishTimeExpired(long expiredManifestPublishTimeUs) { DashMediaSource.this.onDashManifestPublishTimeExpired(expiredManifestPublishTimeUs); } }
/** * Returns a new {@link DashMediaSource} using the current parameters. * * @param manifestUri The manifest {@link Uri}. * @return The new {@link DashMediaSource}. */ @Override public DashMediaSource createMediaSource(Uri manifestUri) { isCreateCalled = true; if (manifestParser == null) { manifestParser = new DashManifestParser(); } return new DashMediaSource( /* manifest= */ null, Assertions.checkNotNull(manifestUri), manifestDataSourceFactory, manifestParser, chunkSourceFactory, compositeSequenceableLoaderFactory, loadErrorHandlingPolicy, livePresentationDelayMs, livePresentationDelayOverridesManifest, tag); }
/** * @deprecated Use {@link #createMediaSource(Uri)} and {@link #addEventListener(Handler, * MediaSourceEventListener)} instead. */ @Deprecated public DashMediaSource createMediaSource( Uri manifestUri, @Nullable Handler eventHandler, @Nullable MediaSourceEventListener eventListener) { DashMediaSource mediaSource = createMediaSource(manifestUri); if (eventHandler != null && eventListener != null) { mediaSource.addEventListener(eventHandler, eventListener); } return mediaSource; }
private MediaSource buildMPDMediaSource(Uri uri, String mpdContent) { // Are you using FrameworkSampleSource or ExtractorSampleSource when you build your player? return new DashMediaSource(getManifest(uri, mpdContent), new DefaultDashChunkSource.Factory(mediaDataSourceFactory), mainHandler, eventLogger); }
addEventListener(eventHandler, eventListener);
private MediaSource buildMPDMediaSource(Uri uri, InputStream mpdContent) { // Are you using FrameworkSampleSource or ExtractorSampleSource when you build your player? return new DashMediaSource(getManifest(uri, mpdContent), new DefaultDashChunkSource.Factory(mediaDataSourceFactory), mainHandler, eventLogger); }
private MediaSource createDashMediaSource(DefaultDataSourceFactory defaultDataSourceFactory, Uri uri, MediaSourceEventListener mediaSourceEventListener) { DefaultDashChunkSource.Factory chunkSourceFactory = new DefaultDashChunkSource.Factory(defaultDataSourceFactory); DashMediaSource.Factory factory = new DashMediaSource.Factory(chunkSourceFactory, defaultDataSourceFactory); DashMediaSource mediaSource = factory.createMediaSource(uri); mediaSource.addEventListener(handler, mediaSourceEventListener); return mediaSource; } }
private MediaSource buildMediaSource(Uri uri, String overrideExtension) { int type = TextUtils.isEmpty(overrideExtension) ? Util.inferContentType(uri) : Util.inferContentType("." + overrideExtension); switch (type) { case C.TYPE_SS: return new SsMediaSource(uri, buildDataSourceFactory(false), new DefaultSsChunkSource.Factory(mediaDataSourceFactory), mainHandler, eventLogger); case C.TYPE_DASH: return new DashMediaSource(uri, buildDataSourceFactory(false), new DefaultDashChunkSource.Factory(mediaDataSourceFactory), mainHandler, eventLogger); case C.TYPE_HLS: return new HlsMediaSource(uri, mediaDataSourceFactory, mainHandler, eventLogger); case C.TYPE_OTHER: return new ExtractorMediaSource(uri, mediaDataSourceFactory, new DefaultExtractorsFactory(), mainHandler, eventLogger); default: { throw new IllegalStateException("Unsupported type: " + type); } } }
private MediaSource buildMediaSource(Uri uri, String overrideExtension) { int type = Util.inferContentType(!TextUtils.isEmpty(overrideExtension) ? "." + overrideExtension : uri.getLastPathSegment()); switch (type) { case C.TYPE_SS: return new SsMediaSource(uri, buildDataSourceFactory(false), new DefaultSsChunkSource.Factory(mMediaDataSourceFactory), mMainHandler, mEventLogger); case C.TYPE_DASH: return new DashMediaSource(uri, buildDataSourceFactory(false), new DefaultDashChunkSource.Factory(mMediaDataSourceFactory), mMainHandler, mEventLogger); case C.TYPE_HLS: return new HlsMediaSource(uri, mMediaDataSourceFactory, mMainHandler, mEventLogger); case C.TYPE_OTHER: return new ExtractorMediaSource(uri, mMediaDataSourceFactory, new DefaultExtractorsFactory(), mMainHandler, mEventLogger); default: { throw new IllegalStateException("Unsupported type: " + type); } } }
public MediaSource buildMediaSource(Uri uri, String overrideExtension) { @C.ContentType int type = TextUtils.isEmpty(overrideExtension) ? Util.inferContentType(uri) : Util.inferContentType("." + overrideExtension); switch (type) { case C.TYPE_SS: return new SsMediaSource(uri, buildDataSourceFactory(false), new DefaultSsChunkSource.Factory(mediaDataSourceFactory), mainHandler, eventLogger); case C.TYPE_DASH: return new DashMediaSource(uri, buildDataSourceFactory(false), new DefaultDashChunkSource.Factory(mediaDataSourceFactory), mainHandler, eventLogger); case C.TYPE_HLS: return new HlsMediaSource(uri, mediaDataSourceFactory, mainHandler, eventLogger); case C.TYPE_OTHER: return new ExtractorMediaSource(uri, mediaDataSourceFactory, new DefaultExtractorsFactory(), mainHandler, eventLogger); default: { throw new IllegalStateException("Unsupported type: " + type); } } }
private MediaSource buildMediaSource(Context context, Uri uri) { int type = getUrlType(uri.toString()); switch (type) { case C.TYPE_SS: return new SsMediaSource(uri, new DefaultDataSourceFactory(context, null, new DefaultHttpDataSourceFactory(USER_AGENT, null)), new DefaultSsChunkSource.Factory(new DefaultDataSourceFactory(context, BANDWIDTH_METER, new DefaultHttpDataSourceFactory(USER_AGENT, BANDWIDTH_METER))), mainThreadHandler, null); case C.TYPE_DASH: return new DashMediaSource(uri, new DefaultDataSourceFactory(context, null, new DefaultHttpDataSourceFactory(USER_AGENT, null)), new DefaultDashChunkSource.Factory(new DefaultDataSourceFactory(context, BANDWIDTH_METER, new DefaultHttpDataSourceFactory(USER_AGENT, BANDWIDTH_METER))), mainThreadHandler, null); case C.TYPE_HLS: return new HlsMediaSource(uri, new DefaultDataSourceFactory(context, BANDWIDTH_METER, new DefaultHttpDataSourceFactory(USER_AGENT, BANDWIDTH_METER)), mainThreadHandler, null); case C.TYPE_OTHER: return new ExtractorMediaSource(uri, new DefaultDataSourceFactory(context, BANDWIDTH_METER, new DefaultHttpDataSourceFactory(USER_AGENT, BANDWIDTH_METER)), new DefaultExtractorsFactory(), mainThreadHandler, null); default: { throw new IllegalStateException("Unsupported type: " + type); } } }