Skip to content

Commit

Permalink
support multiple drm init data
Browse files Browse the repository at this point in the history
  • Loading branch information
takusemba committed May 8, 2018
1 parent d9d1363 commit ed6e8c3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ public void getNextChunk(HlsMediaChunk previous, long playbackPositionUs, long l
isTimestampMaster,
timestampAdjuster,
previous,
mediaPlaylist.drmInitData,
segment.drmInitData,
encryptionKey,
encryptionIv);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ public static final class Segment implements Comparable<Long> {
* used for all segments that share an EXT-X-MAP tag.
*/
@Nullable public final Segment initializationSegment;
/**
* DRM initialization data for sample decryption, or null if none of the segment uses sample
* encryption.
*/
@Nullable public final DrmInitData drmInitData;
/** The duration of the segment in microseconds, as defined by #EXTINF. */
public final long durationUs;
/**
Expand Down Expand Up @@ -81,7 +86,7 @@ public static final class Segment implements Comparable<Long> {
* @param byterangeLength See {@link #byterangeLength}.
*/
public Segment(String uri, long byterangeOffset, long byterangeLength) {
this(uri, null, 0, -1, C.TIME_UNSET, null, null, byterangeOffset, byterangeLength, false);
this(uri, null, null, 0, -1, C.TIME_UNSET, null, null, byterangeOffset, byterangeLength, false);
}

/**
Expand All @@ -99,6 +104,7 @@ public Segment(String uri, long byterangeOffset, long byterangeLength) {
public Segment(
String url,
Segment initializationSegment,
@Nullable DrmInitData drmInitData,
long durationUs,
int relativeDiscontinuitySequence,
long relativeStartTimeUs,
Expand All @@ -109,6 +115,7 @@ public Segment(
boolean hasGapTag) {
this.url = url;
this.initializationSegment = initializationSegment;
this.drmInitData = drmInitData;
this.durationUs = durationUs;
this.relativeDiscontinuitySequence = relativeDiscontinuitySequence;
this.relativeStartTimeUs = relativeStartTimeUs;
Expand Down Expand Up @@ -183,11 +190,6 @@ public int compareTo(@NonNull Long relativeStartTimeUs) {
* Whether the playlist contains a #EXT-X-PROGRAM-DATE-TIME tag.
*/
public final boolean hasProgramDateTime;
/**
* DRM initialization data for sample decryption, or null if none of the segment uses sample
* encryption.
*/
public final DrmInitData drmInitData;
/**
* The list of segments in the playlist.
*/
Expand All @@ -211,7 +213,6 @@ public int compareTo(@NonNull Long relativeStartTimeUs) {
* @param hasIndependentSegmentsTag See {@link #hasIndependentSegmentsTag}.
* @param hasEndTag See {@link #hasEndTag}.
* @param hasProgramDateTime See {@link #hasProgramDateTime}.
* @param drmInitData See {@link #drmInitData}.
* @param segments See {@link #segments}.
*/
public HlsMediaPlaylist(
Expand All @@ -228,7 +229,6 @@ public HlsMediaPlaylist(
boolean hasIndependentSegmentsTag,
boolean hasEndTag,
boolean hasProgramDateTime,
DrmInitData drmInitData,
List<Segment> segments) {
super(baseUri, tags);
this.playlistType = playlistType;
Expand All @@ -241,7 +241,6 @@ public HlsMediaPlaylist(
this.hasIndependentSegmentsTag = hasIndependentSegmentsTag;
this.hasEndTag = hasEndTag;
this.hasProgramDateTime = hasProgramDateTime;
this.drmInitData = drmInitData;
this.segments = Collections.unmodifiableList(segments);
if (!segments.isEmpty()) {
Segment last = segments.get(segments.size() - 1);
Expand Down Expand Up @@ -309,7 +308,6 @@ public HlsMediaPlaylist copyWith(long startTimeUs, int discontinuitySequence) {
hasIndependentSegmentsTag,
hasEndTag,
hasProgramDateTime,
drmInitData,
segments);
}

Expand Down Expand Up @@ -337,7 +335,6 @@ public HlsMediaPlaylist copyWithEndTag() {
hasIndependentSegmentsTag,
/* hasEndTag= */ true,
hasProgramDateTime,
drmInitData,
segments);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import android.net.Uri;
import android.util.Base64;
import android.util.SparseArray;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.ParserException;
Expand Down Expand Up @@ -424,8 +425,7 @@ private static HlsMediaPlaylist parseMediaPlaylist(LineIterator iterator, String
} else if (method != null) {
SchemeData schemeData = parseWidevineSchemeData(line, keyFormat);
if (schemeData != null) {
drmInitData =
new DrmInitData(
drmInitData = new DrmInitData(
(METHOD_SAMPLE_AES_CENC.equals(method)
|| METHOD_SAMPLE_AES_CTR.equals(method))
? C.CENC_TYPE_cenc
Expand Down Expand Up @@ -475,6 +475,7 @@ private static HlsMediaPlaylist parseMediaPlaylist(LineIterator iterator, String
new Segment(
line,
initializationSegment,
drmInitData,
segmentDurationUs,
relativeDiscontinuitySequence,
segmentStartTimeUs,
Expand Down Expand Up @@ -506,7 +507,6 @@ private static HlsMediaPlaylist parseMediaPlaylist(LineIterator iterator, String
hasIndependentSegmentsTag,
hasEndTag,
/* hasProgramDateTime= */ playlistStartTimeUs != 0,
drmInitData,
segments);
}

Expand Down

0 comments on commit ed6e8c3

Please sign in to comment.