Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
fb36f85e
authored
Mar 12, 2015
by
Oliver Woodman
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Simplify encryption handling in HLS.
parent
fabd4705
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
18 additions
and
13 deletions
library/src/main/java/com/google/android/exoplayer/hls/HlsChunkSource.java
library/src/main/java/com/google/android/exoplayer/hls/HlsMediaPlaylist.java
library/src/main/java/com/google/android/exoplayer/hls/HlsPlaylistParser.java
library/src/test/java/com/google/android/exoplayer/hls/HlsMediaPlaylistParserTest.java
library/src/main/java/com/google/android/exoplayer/hls/HlsChunkSource.java
View file @
fb36f85e
...
...
@@ -306,7 +306,7 @@ public class HlsChunkSource {
Uri
chunkUri
=
UriUtil
.
resolveToUri
(
mediaPlaylist
.
baseUri
,
segment
.
url
);
// Check if encryption is specified.
if
(
HlsMediaPlaylist
.
ENCRYPTION_METHOD_AES_128
.
equals
(
segment
.
encryptionMethod
)
)
{
if
(
segment
.
isEncrypted
)
{
Uri
keyUri
=
UriUtil
.
resolveToUri
(
mediaPlaylist
.
baseUri
,
segment
.
encryptionKeyUri
);
if
(!
keyUri
.
equals
(
encryptionKeyUri
))
{
// Encryption is specified and the key has changed.
...
...
library/src/main/java/com/google/android/exoplayer/hls/HlsMediaPlaylist.java
View file @
fb36f85e
...
...
@@ -28,24 +28,25 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
* Media segment reference.
*/
public
static
final
class
Segment
implements
Comparable
<
Long
>
{
public
final
boolean
discontinuity
;
public
final
double
durationSecs
;
public
final
String
url
;
public
final
long
startTimeUs
;
public
final
String
encryptionMetho
d
;
public
final
boolean
isEncrypte
d
;
public
final
String
encryptionKeyUri
;
public
final
String
encryptionIV
;
public
final
int
byterangeOffset
;
public
final
int
byterangeLength
;
public
Segment
(
String
uri
,
double
durationSecs
,
boolean
discontinuity
,
long
startTimeUs
,
String
encryptionMethod
,
String
encryptionKeyUri
,
String
encryptionIV
,
int
byterange
Offset
,
int
byterange
Length
)
{
boolean
isEncrypted
,
String
encryptionKeyUri
,
String
encryptionIV
,
int
byterangeOffset
,
int
byterangeLength
)
{
this
.
url
=
uri
;
this
.
durationSecs
=
durationSecs
;
this
.
discontinuity
=
discontinuity
;
this
.
startTimeUs
=
startTimeUs
;
this
.
encryptionMethod
=
encryptionMetho
d
;
this
.
isEncrypted
=
isEncrypte
d
;
this
.
encryptionKeyUri
=
encryptionKeyUri
;
this
.
encryptionIV
=
encryptionIV
;
this
.
byterangeOffset
=
byterangeOffset
;
...
...
library/src/main/java/com/google/android/exoplayer/hls/HlsPlaylistParser.java
View file @
fb36f85e
...
...
@@ -64,6 +64,9 @@ public final class HlsPlaylistParser implements NetworkLoadable.Parser<HlsPlayli
private
static
final
String
SUBTITLES_TYPE
=
"SUBTITLES"
;
private
static
final
String
CLOSED_CAPTIONS_TYPE
=
"CLOSED-CAPTIONS"
;
private
static
final
String
METHOD_NONE
=
"NONE"
;
private
static
final
String
METHOD_AES128
=
"AES-128"
;
private
static
final
Pattern
BANDWIDTH_ATTR_REGEX
=
Pattern
.
compile
(
BANDWIDTH_ATTR
+
"=(\\d+)\\b"
);
private
static
final
Pattern
CODECS_ATTR_REGEX
=
...
...
@@ -80,8 +83,9 @@ public final class HlsPlaylistParser implements NetworkLoadable.Parser<HlsPlayli
Pattern
.
compile
(
VERSION_TAG
+
":(\\d+)\\b"
);
private
static
final
Pattern
BYTERANGE_REGEX
=
Pattern
.
compile
(
BYTERANGE_TAG
+
":(\\d+(?:@\\d+)?)\\b"
);
private
static
final
Pattern
METHOD_ATTR_REGEX
=
Pattern
.
compile
(
METHOD_ATTR
+
"=(
[^,.*]+
)"
);
Pattern
.
compile
(
METHOD_ATTR
+
"=(
"
+
METHOD_NONE
+
"|"
+
METHOD_AES128
+
"
)"
);
private
static
final
Pattern
URI_ATTR_REGEX
=
Pattern
.
compile
(
URI_ATTR
+
"=\"(.+)\""
);
private
static
final
Pattern
IV_ATTR_REGEX
=
...
...
library/src/test/java/com/google/android/exoplayer/hls/HlsMediaPlaylistParserTest.java
View file @
fb36f85e
...
...
@@ -81,7 +81,7 @@ public class HlsMediaPlaylistParserTest extends TestCase {
assertEquals
(
false
,
segments
.
get
(
0
).
discontinuity
);
assertEquals
(
7.975
,
segments
.
get
(
0
).
durationSecs
);
assertEquals
(
null
,
segments
.
get
(
0
).
encryptionMetho
d
);
assertEquals
(
false
,
segments
.
get
(
0
).
isEncrypte
d
);
assertEquals
(
null
,
segments
.
get
(
0
).
encryptionKeyUri
);
assertEquals
(
null
,
segments
.
get
(
0
).
encryptionIV
);
assertEquals
(
51370
,
segments
.
get
(
0
).
byterangeLength
);
...
...
@@ -90,7 +90,7 @@ public class HlsMediaPlaylistParserTest extends TestCase {
assertEquals
(
false
,
segments
.
get
(
1
).
discontinuity
);
assertEquals
(
7.975
,
segments
.
get
(
1
).
durationSecs
);
assertEquals
(
"AES-128"
,
segments
.
get
(
1
).
encryptionMetho
d
);
assertEquals
(
true
,
segments
.
get
(
1
).
isEncrypte
d
);
assertEquals
(
"https://priv.example.com/key.php?r=2680"
,
segments
.
get
(
1
).
encryptionKeyUri
);
assertEquals
(
"0x1566B"
,
segments
.
get
(
1
).
encryptionIV
);
assertEquals
(
51501
,
segments
.
get
(
1
).
byterangeLength
);
...
...
@@ -99,7 +99,7 @@ public class HlsMediaPlaylistParserTest extends TestCase {
assertEquals
(
false
,
segments
.
get
(
2
).
discontinuity
);
assertEquals
(
7.941
,
segments
.
get
(
2
).
durationSecs
);
assertEquals
(
HlsMediaPlaylist
.
ENCRYPTION_METHOD_NONE
,
segments
.
get
(
2
).
encryptionMetho
d
);
assertEquals
(
false
,
segments
.
get
(
2
).
isEncrypte
d
);
assertEquals
(
null
,
segments
.
get
(
2
).
encryptionKeyUri
);
assertEquals
(
null
,
segments
.
get
(
2
).
encryptionIV
);
assertEquals
(
51501
,
segments
.
get
(
2
).
byterangeLength
);
...
...
@@ -108,7 +108,7 @@ public class HlsMediaPlaylistParserTest extends TestCase {
assertEquals
(
true
,
segments
.
get
(
3
).
discontinuity
);
assertEquals
(
7.975
,
segments
.
get
(
3
).
durationSecs
);
assertEquals
(
"AES-128"
,
segments
.
get
(
3
).
encryptionMetho
d
);
assertEquals
(
true
,
segments
.
get
(
3
).
isEncrypte
d
);
assertEquals
(
"https://priv.example.com/key.php?r=2682"
,
segments
.
get
(
3
).
encryptionKeyUri
);
// 0xA7A == 2682.
assertNotNull
(
segments
.
get
(
3
).
encryptionIV
);
...
...
@@ -119,11 +119,11 @@ public class HlsMediaPlaylistParserTest extends TestCase {
assertEquals
(
false
,
segments
.
get
(
4
).
discontinuity
);
assertEquals
(
7.975
,
segments
.
get
(
4
).
durationSecs
);
assertEquals
(
"AES-128"
,
segments
.
get
(
4
).
encryptionMetho
d
);
assertEquals
(
true
,
segments
.
get
(
4
).
isEncrypte
d
);
assertEquals
(
"https://priv.example.com/key.php?r=2682"
,
segments
.
get
(
4
).
encryptionKeyUri
);
// 0xA7
A == 2682
.
// 0xA7
B == 2683
.
assertNotNull
(
segments
.
get
(
4
).
encryptionIV
);
assertEquals
(
"A7
A
"
,
segments
.
get
(
4
).
encryptionIV
.
toUpperCase
(
Locale
.
getDefault
()));
assertEquals
(
"A7
B
"
,
segments
.
get
(
4
).
encryptionIV
.
toUpperCase
(
Locale
.
getDefault
()));
assertEquals
(
C
.
LENGTH_UNBOUNDED
,
segments
.
get
(
4
).
byterangeLength
);
assertEquals
(
0
,
segments
.
get
(
4
).
byterangeOffset
);
assertEquals
(
"https://priv.example.com/fileSequence2683.ts"
,
segments
.
get
(
4
).
url
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment