Commit 2d52b0d5 by bachinger Committed by tonihei

Add createMediaSource method with manifest and media item

This change adds an overloaded createMediaSource method which allows developers to pass in a media item with a in-memory manifest. Without this method the developer would not have a chance to pass in a non-dummy media item when using the factory for creting a DASH media source with an in-memory manifest.

PiperOrigin-RevId: 312660418
parent 1bc8503a
...@@ -264,18 +264,47 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -264,18 +264,47 @@ public final class DashMediaSource extends BaseMediaSource {
* @throws IllegalArgumentException If {@link DashManifest#dynamic} is true. * @throws IllegalArgumentException If {@link DashManifest#dynamic} is true.
*/ */
public DashMediaSource createMediaSource(DashManifest manifest) { public DashMediaSource createMediaSource(DashManifest manifest) {
Assertions.checkArgument(!manifest.dynamic); return createMediaSource(
if (!streamKeys.isEmpty()) { manifest,
manifest = manifest.copy(streamKeys);
}
return new DashMediaSource(
new MediaItem.Builder() new MediaItem.Builder()
.setUri(Uri.EMPTY) .setUri(Uri.EMPTY)
.setMediaId(DUMMY_MEDIA_ID) .setMediaId(DUMMY_MEDIA_ID)
.setMimeType(MimeTypes.APPLICATION_MPD) .setMimeType(MimeTypes.APPLICATION_MPD)
.setStreamKeys(streamKeys) .setStreamKeys(streamKeys)
.setTag(tag) .setTag(tag)
.build(), .build());
}
/**
* Returns a new {@link DashMediaSource} using the current parameters and the specified
* sideloaded manifest.
*
* @param manifest The manifest. {@link DashManifest#dynamic} must be false.
* @param mediaItem The {@link MediaItem} to be included in the timeline.
* @return The new {@link DashMediaSource}.
* @throws IllegalArgumentException If {@link DashManifest#dynamic} is true.
*/
public DashMediaSource createMediaSource(DashManifest manifest, MediaItem mediaItem) {
Assertions.checkArgument(!manifest.dynamic);
List<StreamKey> streamKeys =
mediaItem.playbackProperties != null && !mediaItem.playbackProperties.streamKeys.isEmpty()
? mediaItem.playbackProperties.streamKeys
: this.streamKeys;
if (!streamKeys.isEmpty()) {
manifest = manifest.copy(streamKeys);
}
boolean hasUri = mediaItem.playbackProperties != null;
boolean hasTag = hasUri && mediaItem.playbackProperties.tag != null;
mediaItem =
mediaItem
.buildUpon()
.setMimeType(MimeTypes.APPLICATION_MPD)
.setUri(hasUri ? mediaItem.playbackProperties.uri : Uri.EMPTY)
.setTag(hasTag ? mediaItem.playbackProperties.tag : tag)
.setStreamKeys(streamKeys)
.build();
return new DashMediaSource(
mediaItem,
manifest, manifest,
/* manifestDataSourceFactory= */ null, /* manifestDataSourceFactory= */ null,
/* manifestParser= */ null, /* manifestParser= */ null,
......
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