Use manifest assets instead of building manifests with code
PiperOrigin-RevId: 322739943
This commit is contained in:
parent
6d92eebe51
commit
b041c59f1e
@ -18,9 +18,8 @@ package com.google.android.exoplayer2.source.dash;
|
|||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import androidx.annotation.Nullable;
|
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.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
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;
|
||||||
@ -32,19 +31,16 @@ import com.google.android.exoplayer2.source.TrackGroupArray;
|
|||||||
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerEmsgCallback;
|
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerEmsgCallback;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet;
|
import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
|
import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.Descriptor;
|
import com.google.android.exoplayer2.source.dash.manifest.DashManifestParser;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.Period;
|
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.Representation;
|
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.SegmentBase.SingleSegmentBase;
|
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.UtcTimingElement;
|
|
||||||
import com.google.android.exoplayer2.testutil.MediaPeriodAsserts;
|
import com.google.android.exoplayer2.testutil.MediaPeriodAsserts;
|
||||||
|
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||||
import com.google.android.exoplayer2.upstream.Allocator;
|
import com.google.android.exoplayer2.upstream.Allocator;
|
||||||
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
|
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
|
||||||
import com.google.android.exoplayer2.upstream.LoaderErrorThrower;
|
import com.google.android.exoplayer2.upstream.LoaderErrorThrower;
|
||||||
import com.google.android.exoplayer2.upstream.TransferListener;
|
import com.google.android.exoplayer2.upstream.TransferListener;
|
||||||
import com.google.android.exoplayer2.util.MimeTypes;
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import java.util.Arrays;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@ -54,7 +50,7 @@ import org.junit.runner.RunWith;
|
|||||||
public final class DashMediaPeriodTest {
|
public final class DashMediaPeriodTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getStreamKeys_isCompatibleWithDashManifestFilter() {
|
public void getStreamKeys_isCompatibleWithDashManifestFilter() throws IOException {
|
||||||
// Test manifest which covers various edge cases:
|
// Test manifest which covers various edge cases:
|
||||||
// - Multiple periods.
|
// - Multiple periods.
|
||||||
// - Single and multiple representations per adaptation set.
|
// - Single and multiple representations per adaptation set.
|
||||||
@ -62,54 +58,7 @@ public final class DashMediaPeriodTest {
|
|||||||
// - Embedded track groups.
|
// - Embedded track groups.
|
||||||
// All cases are deliberately combined in one test to catch potential indexing problems which
|
// All cases are deliberately combined in one test to catch potential indexing problems which
|
||||||
// only occur in combination.
|
// only occur in combination.
|
||||||
DashManifest manifest =
|
DashManifest manifest = parseManifest("mpd/sample_mpd_stream_keys");
|
||||||
createDashManifest(
|
|
||||||
createPeriod(
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 0,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
/* descriptor= */ null,
|
|
||||||
createVideoRepresentation(/* bitrate= */ 1000000))),
|
|
||||||
createPeriod(
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 100,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 103, 104),
|
|
||||||
createVideoRepresentationWithInbandEventStream(/* bitrate= */ 200000),
|
|
||||||
createVideoRepresentationWithInbandEventStream(/* bitrate= */ 400000),
|
|
||||||
createVideoRepresentationWithInbandEventStream(/* bitrate= */ 600000)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 101,
|
|
||||||
C.TRACK_TYPE_AUDIO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 102),
|
|
||||||
createAudioRepresentation(/* bitrate= */ 48000),
|
|
||||||
createAudioRepresentation(/* bitrate= */ 96000)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 102,
|
|
||||||
C.TRACK_TYPE_AUDIO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 101),
|
|
||||||
createAudioRepresentation(/* bitrate= */ 256000)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 103,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 100, 104),
|
|
||||||
createVideoRepresentationWithInbandEventStream(/* bitrate= */ 800000),
|
|
||||||
createVideoRepresentationWithInbandEventStream(/* bitrate= */ 1000000)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 104,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 100, 103),
|
|
||||||
createVideoRepresentationWithInbandEventStream(/* bitrate= */ 2000000)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 105,
|
|
||||||
C.TRACK_TYPE_TEXT,
|
|
||||||
/* descriptor= */ null,
|
|
||||||
createTextRepresentation(/* language= */ "eng")),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 105,
|
|
||||||
C.TRACK_TYPE_TEXT,
|
|
||||||
/* descriptor= */ null,
|
|
||||||
createTextRepresentation(/* language= */ "ger"))));
|
|
||||||
|
|
||||||
// Ignore embedded metadata as we don't want to select primary group just to get embedded track.
|
// Ignore embedded metadata as we don't want to select primary group just to get embedded track.
|
||||||
MediaPeriodAsserts.assertGetStreamKeysAndManifestFilterIntegration(
|
MediaPeriodAsserts.assertGetStreamKeysAndManifestFilterIntegration(
|
||||||
@ -120,32 +69,8 @@ public final class DashMediaPeriodTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void adaptationSetSwitchingProperty_mergesTrackGroups() {
|
public void adaptationSetSwitchingProperty_mergesTrackGroups() throws IOException {
|
||||||
DashManifest manifest =
|
DashManifest manifest = parseManifest("mpd/sample_mpd_switching_property");
|
||||||
createDashManifest(
|
|
||||||
createPeriod(
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 0,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 1, 2),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 0),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 1)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 3,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
/* descriptor= */ null,
|
|
||||||
createVideoRepresentation(/* bitrate= */ 300)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 2,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 0, 1),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 200),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 201)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 1,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 0, 2),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 100))));
|
|
||||||
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
||||||
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
||||||
|
|
||||||
@ -165,32 +90,8 @@ public final class DashMediaPeriodTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void trickPlayProperty_mergesTrackGroups() {
|
public void trickPlayProperty_mergesTrackGroups() throws IOException {
|
||||||
DashManifest manifest =
|
DashManifest manifest = parseManifest("mpd/sample_mpd_trick_play_property");
|
||||||
createDashManifest(
|
|
||||||
createPeriod(
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 0,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createTrickPlayDescriptor(/* mainAdaptationSetId= */ 1),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 0),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 1)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 1,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
/* descriptor= */ null,
|
|
||||||
createVideoRepresentation(/* bitrate= */ 100)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 2,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
/* descriptor= */ null,
|
|
||||||
createVideoRepresentation(/* bitrate= */ 200),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 201)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 3,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createTrickPlayDescriptor(/* mainAdaptationSetId= */ 2),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 300))));
|
|
||||||
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
||||||
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
||||||
|
|
||||||
@ -211,32 +112,9 @@ public final class DashMediaPeriodTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void adaptationSetSwitchingProperty_andTrickPlayProperty_mergesTrackGroups() {
|
public void adaptationSetSwitchingProperty_andTrickPlayProperty_mergesTrackGroups()
|
||||||
DashManifest manifest =
|
throws IOException {
|
||||||
createDashManifest(
|
DashManifest manifest = parseManifest("mpd/sample_mpd_switching_and_trick_play_property");
|
||||||
createPeriod(
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 0,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createTrickPlayDescriptor(/* mainAdaptationSetId= */ 1),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 0),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 1)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 1,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 2),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 100)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 2,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createSwitchDescriptor(/* ids...= */ 1),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 200),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 201)),
|
|
||||||
createAdaptationSet(
|
|
||||||
/* id= */ 3,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
createTrickPlayDescriptor(/* mainAdaptationSetId= */ 2),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 300))));
|
|
||||||
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
||||||
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
||||||
|
|
||||||
@ -256,21 +134,8 @@ public final class DashMediaPeriodTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void cea608AccessibilityDescriptor_createsCea608TrackGroup() {
|
public void cea608AccessibilityDescriptor_createsCea608TrackGroup() throws IOException {
|
||||||
Descriptor descriptor =
|
DashManifest manifest = parseManifest("mpd/sample_mpd_cea_608_accessibility");
|
||||||
new Descriptor("urn:scte:dash:cc:cea-608:2015", "CC1=eng;CC3=deu", /* id= */ null);
|
|
||||||
DashManifest manifest =
|
|
||||||
createDashManifest(
|
|
||||||
createPeriod(
|
|
||||||
new AdaptationSet(
|
|
||||||
/* id= */ 123,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
Arrays.asList(
|
|
||||||
createVideoRepresentation(/* bitrate= */ 0),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 1)),
|
|
||||||
/* accessibilityDescriptors= */ Collections.singletonList(descriptor),
|
|
||||||
/* essentialProperties= */ Collections.emptyList(),
|
|
||||||
/* supplementalProperties= */ Collections.emptyList())));
|
|
||||||
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
||||||
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
||||||
|
|
||||||
@ -299,22 +164,8 @@ public final class DashMediaPeriodTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void cea708AccessibilityDescriptor_createsCea708TrackGroup() {
|
public void cea708AccessibilityDescriptor_createsCea708TrackGroup() throws IOException {
|
||||||
Descriptor descriptor =
|
DashManifest manifest = parseManifest("mpd/sample_mpd_cea_708_accessibility");
|
||||||
new Descriptor(
|
|
||||||
"urn:scte:dash:cc:cea-708:2015", "1=lang:eng;2=lang:deu,war:1,er:1", /* id= */ null);
|
|
||||||
DashManifest manifest =
|
|
||||||
createDashManifest(
|
|
||||||
createPeriod(
|
|
||||||
new AdaptationSet(
|
|
||||||
/* id= */ 123,
|
|
||||||
C.TRACK_TYPE_VIDEO,
|
|
||||||
Arrays.asList(
|
|
||||||
createVideoRepresentation(/* bitrate= */ 0),
|
|
||||||
createVideoRepresentation(/* bitrate= */ 1)),
|
|
||||||
/* accessibilityDescriptors= */ Collections.singletonList(descriptor),
|
|
||||||
/* essentialProperties= */ Collections.emptyList(),
|
|
||||||
/* supplementalProperties= */ Collections.emptyList())));
|
|
||||||
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
DashMediaPeriod dashMediaPeriod = createDashMediaPeriod(manifest, 0);
|
||||||
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
List<AdaptationSet> adaptationSets = manifest.getPeriod(0).adaptationSets;
|
||||||
|
|
||||||
@ -363,105 +214,9 @@ public final class DashMediaPeriodTest {
|
|||||||
mock(PlayerEmsgCallback.class));
|
mock(PlayerEmsgCallback.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DashManifest createDashManifest(Period... periods) {
|
private static DashManifest parseManifest(String fileName) throws IOException {
|
||||||
return new DashManifest(
|
InputStream inputStream =
|
||||||
/* availabilityStartTimeMs= */ 0,
|
TestUtil.getInputStream(ApplicationProvider.getApplicationContext(), fileName);
|
||||||
/* durationMs= */ 5000,
|
return new DashManifestParser().parse(Uri.EMPTY, inputStream);
|
||||||
/* minBufferTimeMs= */ 1,
|
|
||||||
/* dynamic= */ false,
|
|
||||||
/* minUpdatePeriodMs= */ 2,
|
|
||||||
/* timeShiftBufferDepthMs= */ 3,
|
|
||||||
/* suggestedPresentationDelayMs= */ 4,
|
|
||||||
/* publishTimeMs= */ 12345,
|
|
||||||
/* programInformation= */ null,
|
|
||||||
new UtcTimingElement("", ""),
|
|
||||||
Uri.EMPTY,
|
|
||||||
Arrays.asList(periods));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Period createPeriod(AdaptationSet... adaptationSets) {
|
|
||||||
return new Period(/* id= */ null, /* startMs= */ 0, Arrays.asList(adaptationSets));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static AdaptationSet createAdaptationSet(
|
|
||||||
int id, int trackType, @Nullable Descriptor descriptor, Representation... representations) {
|
|
||||||
return new AdaptationSet(
|
|
||||||
id,
|
|
||||||
trackType,
|
|
||||||
Arrays.asList(representations),
|
|
||||||
/* accessibilityDescriptors= */ Collections.emptyList(),
|
|
||||||
/* essentialProperties= */ Collections.emptyList(),
|
|
||||||
descriptor == null ? Collections.emptyList() : Collections.singletonList(descriptor));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Representation createVideoRepresentation(int bitrate) {
|
|
||||||
return Representation.newInstance(
|
|
||||||
/* revisionId= */ 0,
|
|
||||||
createVideoFormat(bitrate),
|
|
||||||
/* baseUrl= */ "",
|
|
||||||
new SingleSegmentBase());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Representation createVideoRepresentationWithInbandEventStream(int bitrate) {
|
|
||||||
return Representation.newInstance(
|
|
||||||
/* revisionId= */ 0,
|
|
||||||
createVideoFormat(bitrate),
|
|
||||||
/* baseUrl= */ "",
|
|
||||||
new SingleSegmentBase(),
|
|
||||||
Collections.singletonList(getInbandEventDescriptor()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Format createVideoFormat(int bitrate) {
|
|
||||||
return new Format.Builder()
|
|
||||||
.setContainerMimeType(MimeTypes.VIDEO_MP4)
|
|
||||||
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
|
||||||
.setPeakBitrate(bitrate)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Representation createAudioRepresentation(int bitrate) {
|
|
||||||
Format format =
|
|
||||||
new Format.Builder()
|
|
||||||
.setContainerMimeType(MimeTypes.AUDIO_MP4)
|
|
||||||
.setSampleMimeType(MimeTypes.AUDIO_AAC)
|
|
||||||
.setPeakBitrate(bitrate)
|
|
||||||
.build();
|
|
||||||
return Representation.newInstance(
|
|
||||||
/* revisionId= */ 0, format, /* baseUrl= */ "", new SingleSegmentBase());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Representation createTextRepresentation(String language) {
|
|
||||||
Format format =
|
|
||||||
new Format.Builder()
|
|
||||||
.setContainerMimeType(MimeTypes.APPLICATION_MP4)
|
|
||||||
.setSampleMimeType(MimeTypes.TEXT_VTT)
|
|
||||||
.setLanguage(language)
|
|
||||||
.build();
|
|
||||||
return Representation.newInstance(
|
|
||||||
/* revisionId= */ 0, format, /* baseUrl= */ "", new SingleSegmentBase());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Descriptor createSwitchDescriptor(int... ids) {
|
|
||||||
StringBuilder idString = new StringBuilder();
|
|
||||||
idString.append(ids[0]);
|
|
||||||
for (int i = 1; i < ids.length; i++) {
|
|
||||||
idString.append(",").append(ids[i]);
|
|
||||||
}
|
|
||||||
return new Descriptor(
|
|
||||||
/* schemeIdUri= */ "urn:mpeg:dash:adaptation-set-switching:2016",
|
|
||||||
/* value= */ idString.toString(),
|
|
||||||
/* id= */ null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Descriptor createTrickPlayDescriptor(int mainAdaptationSetId) {
|
|
||||||
return new Descriptor(
|
|
||||||
/* schemeIdUri= */ "http://dashif.org/guidelines/trickmode",
|
|
||||||
/* value= */ Integer.toString(mainAdaptationSetId),
|
|
||||||
/* id= */ null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Descriptor getInbandEventDescriptor() {
|
|
||||||
return new Descriptor(
|
|
||||||
/* schemeIdUri= */ "inBandSchemeIdUri", /* value= */ "inBandValue", /* id= */ "inBandId");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
testdata/src/test/assets/mpd/sample_mpd_cea_608_accessibility
vendored
Normal file
10
testdata/src/test/assets/mpd/sample_mpd_cea_608_accessibility
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MPD availabilityStartTime="2014-06-19T23:07:42" type="dynamic">
|
||||||
|
<Period start="PT7462826.784S" id="0">
|
||||||
|
<AdaptationSet id="123" mimeType="video/mp4">
|
||||||
|
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng;CC3=deu"/>
|
||||||
|
<Representation id="1231" bandwidth="0" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="1232" bandwidth="1" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
</MPD>
|
12
testdata/src/test/assets/mpd/sample_mpd_cea_708_accessibility
vendored
Normal file
12
testdata/src/test/assets/mpd/sample_mpd_cea_708_accessibility
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MPD availabilityStartTime="2014-06-19T23:07:42" type="dynamic">
|
||||||
|
<Period start="PT7462826.784S" id="0">
|
||||||
|
<AdaptationSet id="123" mimeType="video/mp4">
|
||||||
|
<Accessibility
|
||||||
|
schemeIdUri="urn:scte:dash:cc:cea-708:2015"
|
||||||
|
value="1=lang:eng;2=lang:deu,war:1,er:1"/>
|
||||||
|
<Representation id="1231" bandwidth="0" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="1232" bandwidth="1" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
</MPD>
|
88
testdata/src/test/assets/mpd/sample_mpd_stream_keys
vendored
Normal file
88
testdata/src/test/assets/mpd/sample_mpd_stream_keys
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MPD availabilityStartTime="2014-06-19T23:07:42" type="dynamic">
|
||||||
|
<Period start="PT6462826.784S" id="0">
|
||||||
|
<AdaptationSet id="0" mimeType="video/mp4">
|
||||||
|
<Representation id="135" bandwidth="1000000" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
<Period start="PT7462826.784S" id="1">
|
||||||
|
<AdaptationSet id="100" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="103,104"/>
|
||||||
|
<Representation id="1001" bandwidth="200000" codecs="avc1.42c01f">
|
||||||
|
<InbandEventStream
|
||||||
|
id="inBandId"
|
||||||
|
schemeIdUri="urn:mpeg:dash:event:2012"
|
||||||
|
value="inBandValue"/>
|
||||||
|
</Representation>
|
||||||
|
<Representation id="1002" bandwidth="400000" codecs="avc1.42c01f">
|
||||||
|
<InbandEventStream
|
||||||
|
id="inBandId"
|
||||||
|
schemeIdUri="urn:mpeg:dash:event:2012"
|
||||||
|
value="inBandValue"/>
|
||||||
|
</Representation>
|
||||||
|
<Representation id="1003" bandwidth="600000" codecs="avc1.42c01f">
|
||||||
|
<InbandEventStream
|
||||||
|
id="inBandId"
|
||||||
|
schemeIdUri="urn:mpeg:dash:event:2012"
|
||||||
|
value="inBandValue"/>
|
||||||
|
</Representation>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="101" mimeType="audio/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="102"/>
|
||||||
|
<Representation id="1011" bandwidth="48000" codecs="mp4a.40.2"/>
|
||||||
|
<Representation id="1012" bandwidth="96000" codecs="mp4a.40.2"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="102" mimeType="audio/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="101"/>
|
||||||
|
<Representation id="1021" bandwidth="256000" codecs="mp4a.40.2"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="103" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="100,104"/>
|
||||||
|
<Representation id="1031" bandwidth="800000" codecs="avc1.42c01f">
|
||||||
|
<InbandEventStream
|
||||||
|
id="inBandId"
|
||||||
|
schemeIdUri="urn:mpeg:dash:event:2012"
|
||||||
|
value="inBandValue"/>
|
||||||
|
</Representation>
|
||||||
|
<Representation id="1032" bandwidth="1000000" codecs="avc1.42c01f">
|
||||||
|
<InbandEventStream
|
||||||
|
id="inBandId"
|
||||||
|
schemeIdUri="urn:mpeg:dash:event:2012"
|
||||||
|
value="inBandValue"/>
|
||||||
|
</Representation>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="104" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="100,103"/>
|
||||||
|
<Representation id="1041" bandwidth="2000000" codecs="avc1.42c01f">
|
||||||
|
<InbandEventStream
|
||||||
|
id="inBandId"
|
||||||
|
schemeIdUri="urn:mpeg:dash:event:2012"
|
||||||
|
value="inBandValue"/>
|
||||||
|
</Representation>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="105"
|
||||||
|
lang="eng"
|
||||||
|
mimeType="application/mp4"
|
||||||
|
contentType="text"
|
||||||
|
codecs="wvtt">
|
||||||
|
<Representation id="1051" bandwidth="100"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="106"
|
||||||
|
lang="ger"
|
||||||
|
mimeType="application/mp4"
|
||||||
|
contentType="text"
|
||||||
|
codecs="wvtt">
|
||||||
|
<Representation id="1061" bandwidth="100"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
</MPD>
|
31
testdata/src/test/assets/mpd/sample_mpd_switching_and_trick_play_property
vendored
Normal file
31
testdata/src/test/assets/mpd/sample_mpd_switching_and_trick_play_property
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MPD availabilityStartTime="2014-06-19T23:07:42" type="dynamic">
|
||||||
|
<Period start="PT7462826.784S" id="0">
|
||||||
|
<AdaptationSet id="0" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="http://dashif.org/guidelines/trickmode"
|
||||||
|
value="1"/>
|
||||||
|
<Representation id="0" bandwidth="0" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="1" bandwidth="1" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="1" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="2"/>
|
||||||
|
<Representation id="11" bandwidth="100" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="2" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="1"/>
|
||||||
|
<Representation id="21" bandwidth="200" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="22" bandwidth="201" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="3" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="http://dashif.org/guidelines/trickmode"
|
||||||
|
value="2"/>
|
||||||
|
<Representation id="31" bandwidth="300" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
</MPD>
|
28
testdata/src/test/assets/mpd/sample_mpd_switching_property
vendored
Normal file
28
testdata/src/test/assets/mpd/sample_mpd_switching_property
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MPD availabilityStartTime="2014-06-19T23:07:42" type="dynamic">
|
||||||
|
<Period start="PT7462826.784S" id="0">
|
||||||
|
<AdaptationSet id="0" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="1,2"/>
|
||||||
|
<Representation id="1" bandwidth="0" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="2" bandwidth="1" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="3" mimeType="video/mp4">
|
||||||
|
<Representation id="31" bandwidth="300" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="2" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="0,1"/>
|
||||||
|
<Representation id="21" bandwidth="200" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="21" bandwidth="201" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="1" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="urn:mpeg:dash:adaptation-set-switching:2016"
|
||||||
|
value="0,2"/>
|
||||||
|
<Representation id="11" bandwidth="100" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
</MPD>
|
25
testdata/src/test/assets/mpd/sample_mpd_trick_play_property
vendored
Normal file
25
testdata/src/test/assets/mpd/sample_mpd_trick_play_property
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MPD availabilityStartTime="2014-06-19T23:07:42" type="dynamic">
|
||||||
|
<Period start="PT7462826.784S" id="0">
|
||||||
|
<AdaptationSet id="0" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="http://dashif.org/guidelines/trickmode"
|
||||||
|
value="1"/>
|
||||||
|
<Representation id="0" bandwidth="0" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="1" bandwidth="1" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="1" mimeType="video/mp4">
|
||||||
|
<Representation id="11" bandwidth="100" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="2" mimeType="video/mp4">
|
||||||
|
<Representation id="21" bandwidth="200" codecs="avc1.42c01f"/>
|
||||||
|
<Representation id="22" bandwidth="201" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
<AdaptationSet id="3" mimeType="video/mp4">
|
||||||
|
<SupplementalProperty
|
||||||
|
schemeIdUri="http://dashif.org/guidelines/trickmode"
|
||||||
|
value="2"/>
|
||||||
|
<Representation id="31" bandwidth="300" codecs="avc1.42c01f"/>
|
||||||
|
</AdaptationSet>
|
||||||
|
</Period>
|
||||||
|
</MPD>
|
Loading…
x
Reference in New Issue
Block a user