diff --git a/library/all/build.gradle b/library/all/build.gradle
index c0874352b3..79750a9420 100644
--- a/library/all/build.gradle
+++ b/library/all/build.gradle
@@ -27,6 +27,7 @@ android {
dependencies {
compile project(':library-core')
+ compile project(':library-dash')
compile project(':library-hls')
compile project(':library-smoothstreaming')
compile project(':library-ui')
diff --git a/library/dash/build.gradle b/library/dash/build.gradle
new file mode 100644
index 0000000000..550b0e1549
--- /dev/null
+++ b/library/dash/build.gradle
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion project.ext.compileSdkVersion
+ buildToolsVersion project.ext.buildToolsVersion
+
+ defaultConfig {
+ minSdkVersion project.ext.minSdkVersion
+ targetSdkVersion project.ext.targetSdkVersion
+ }
+
+ sourceSets {
+ androidTest {
+ java.srcDirs += "../../testutils/src/main/java/"
+ }
+ }
+}
+
+dependencies {
+ compile project(':library-core')
+ compile 'com.android.support:support-annotations:25.2.0'
+ androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
+ androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
+ androidTestCompile 'org.mockito:mockito-core:1.9.5'
+}
+
+ext {
+ releaseArtifact = 'exoplayer-dash'
+ releaseDescription = 'The ExoPlayer library DASH module.'
+}
+apply from: '../../publish.gradle'
diff --git a/library/dash/src/androidTest/AndroidManifest.xml b/library/dash/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000000..ac2511d3bd
--- /dev/null
+++ b/library/dash/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/core/src/androidTest/assets/dash/sample_mpd_1 b/library/dash/src/androidTest/assets/sample_mpd_1
similarity index 100%
rename from library/core/src/androidTest/assets/dash/sample_mpd_1
rename to library/dash/src/androidTest/assets/sample_mpd_1
diff --git a/library/core/src/androidTest/assets/dash/sample_mpd_2_unknown_mime_type b/library/dash/src/androidTest/assets/sample_mpd_2_unknown_mime_type
similarity index 100%
rename from library/core/src/androidTest/assets/dash/sample_mpd_2_unknown_mime_type
rename to library/dash/src/androidTest/assets/sample_mpd_2_unknown_mime_type
diff --git a/library/core/src/androidTest/assets/dash/sample_mpd_3_segment_template b/library/dash/src/androidTest/assets/sample_mpd_3_segment_template
similarity index 100%
rename from library/core/src/androidTest/assets/dash/sample_mpd_3_segment_template
rename to library/dash/src/androidTest/assets/sample_mpd_3_segment_template
diff --git a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java
similarity index 100%
rename from library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java
rename to library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java
diff --git a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
similarity index 95%
rename from library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
rename to library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
index 4de0ae4081..5b8760f929 100644
--- a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
+++ b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParserTest.java
@@ -28,11 +28,9 @@ import java.util.List;
*/
public class DashManifestParserTest extends InstrumentationTestCase {
- private static final String SAMPLE_MPD_1 = "dash/sample_mpd_1";
- private static final String SAMPLE_MPD_2_UNKNOWN_MIME_TYPE =
- "dash/sample_mpd_2_unknown_mime_type";
- private static final String SAMPLE_MPD_3_SEGMENT_TEMPLATE =
- "dash/sample_mpd_3_segment_template";
+ private static final String SAMPLE_MPD_1 = "sample_mpd_1";
+ private static final String SAMPLE_MPD_2_UNKNOWN_MIME_TYPE = "sample_mpd_2_unknown_mime_type";
+ private static final String SAMPLE_MPD_3_SEGMENT_TEMPLATE = "sample_mpd_3_segment_template";
/**
* Simple test to ensure the sample manifests parse without any exceptions being thrown.
diff --git a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestTest.java
similarity index 100%
rename from library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestTest.java
rename to library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestTest.java
diff --git a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RangedUriTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RangedUriTest.java
similarity index 100%
rename from library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RangedUriTest.java
rename to library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RangedUriTest.java
diff --git a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationTest.java
similarity index 100%
rename from library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationTest.java
rename to library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationTest.java
diff --git a/library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplateTest.java b/library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplateTest.java
similarity index 100%
rename from library/core/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplateTest.java
rename to library/dash/src/androidTest/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplateTest.java
diff --git a/library/dash/src/main/AndroidManifest.xml b/library/dash/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..6c2d93510a
--- /dev/null
+++ b/library/dash/src/main/AndroidManifest.xml
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashChunkSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashChunkSource.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashChunkSource.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashChunkSource.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaPeriod.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashSegmentIndex.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashSegmentIndex.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashSegmentIndex.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashSegmentIndex.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashUtil.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashUtil.java
similarity index 83%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashUtil.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashUtil.java
index 0b8750e20a..3ec44c2f69 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashUtil.java
+++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashUtil.java
@@ -25,6 +25,7 @@ import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.extractor.mp4.FragmentedMp4Extractor;
import com.google.android.exoplayer2.source.chunk.ChunkExtractorWrapper;
import com.google.android.exoplayer2.source.chunk.InitializationChunk;
+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.DashManifestParser;
import com.google.android.exoplayer2.source.dash.manifest.Period;
@@ -65,6 +66,48 @@ public final class DashUtil {
}
/**
+ * Loads {@link DrmInitData} for a given manifest.
+ *
+ * @param dataSource The {@link HttpDataSource} from which data should be loaded.
+ * @param dashManifest The {@link DashManifest} of the DASH content.
+ * @return The loaded {@link DrmInitData}.
+ */
+ public static DrmInitData loadDrmInitData(DataSource dataSource, DashManifest dashManifest)
+ throws IOException, InterruptedException {
+ // Prefer drmInitData obtained from the manifest over drmInitData obtained from the stream,
+ // as per DASH IF Interoperability Recommendations V3.0, 7.5.3.
+ if (dashManifest.getPeriodCount() < 1) {
+ return null;
+ }
+ Period period = dashManifest.getPeriod(0);
+ int adaptationSetIndex = period.getAdaptationSetIndex(C.TRACK_TYPE_VIDEO);
+ if (adaptationSetIndex == C.INDEX_UNSET) {
+ adaptationSetIndex = period.getAdaptationSetIndex(C.TRACK_TYPE_AUDIO);
+ if (adaptationSetIndex == C.INDEX_UNSET) {
+ return null;
+ }
+ }
+ AdaptationSet adaptationSet = period.adaptationSets.get(adaptationSetIndex);
+ if (adaptationSet.representations.isEmpty()) {
+ return null;
+ }
+ Representation representation = adaptationSet.representations.get(0);
+ DrmInitData drmInitData = representation.format.drmInitData;
+ if (drmInitData == null) {
+ Format sampleFormat = DashUtil.loadSampleFormat(dataSource, representation);
+ if (sampleFormat != null) {
+ drmInitData = sampleFormat.drmInitData;
+ }
+ if (drmInitData == null) {
+ return null;
+ }
+ }
+ return drmInitData;
+ }
+
+ /**
+ * Loads initialization data for the {@code representation} and returns the sample {@link
+ * Format}.
* Loads {@link DrmInitData} for a given period in a DASH manifest.
*
* @param dataSource The {@link HttpDataSource} from which data should be loaded.
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashWrappingSegmentIndex.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashWrappingSegmentIndex.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DashWrappingSegmentIndex.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashWrappingSegmentIndex.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/AdaptationSet.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/AdaptationSet.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/AdaptationSet.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/AdaptationSet.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifest.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifest.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifest.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifest.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Period.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Period.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Period.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Period.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RangedUri.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RangedUri.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RangedUri.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RangedUri.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Representation.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Representation.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Representation.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/Representation.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SchemeValuePair.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SchemeValuePair.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SchemeValuePair.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SchemeValuePair.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SegmentBase.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SegmentBase.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SegmentBase.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SegmentBase.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SingleSegmentIndex.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SingleSegmentIndex.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SingleSegmentIndex.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/SingleSegmentIndex.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplate.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplate.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplate.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UrlTemplate.java
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UtcTimingElement.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UtcTimingElement.java
similarity index 100%
rename from library/core/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UtcTimingElement.java
rename to library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/UtcTimingElement.java
diff --git a/playbacktests/build.gradle b/playbacktests/build.gradle
index fa3c930c4a..6a09eac49e 100644
--- a/playbacktests/build.gradle
+++ b/playbacktests/build.gradle
@@ -25,5 +25,6 @@ android {
dependencies {
compile project(':library-core')
+ androidTestCompile project(':library-dash')
androidTestCompile project(':library-hls')
}
diff --git a/settings.gradle b/settings.gradle
index 45e2a1a1f1..544d2d4a21 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -13,6 +13,7 @@
// limitations under the License.
include ':library'
include ':library-core'
+include ':library-dash'
include ':library-hls'
include ':library-smoothstreaming'
include ':library-ui'
@@ -30,6 +31,7 @@ include ':extension-vp9'
project(':library').projectDir = new File(settingsDir, 'library/all')
project(':library-core').projectDir = new File(settingsDir, 'library/core')
+project(':library-dash').projectDir = new File(settingsDir, 'library/dash')
project(':library-hls').projectDir = new File(settingsDir, 'library/hls')
project(':library-smoothstreaming').projectDir = new File(settingsDir, 'library/smoothstreaming')
project(':library-ui').projectDir = new File(settingsDir, 'library/ui')