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
8cefb845
authored
Nov 01, 2021
by
tonihei
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Merge pull request #9576 from TiVo:p-fix-duration-round
PiperOrigin-RevId: 406839109
parent
f67ec897
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
8 deletions
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java
View file @
8cefb845
...
...
@@ -48,6 +48,7 @@ import java.io.BufferedReader;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.math.BigDecimal
;
import
java.util.ArrayDeque
;
import
java.util.ArrayList
;
import
java.util.Collections
;
...
...
@@ -759,8 +760,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
parseStringAttr
(
line
,
REGEX_VALUE
,
variableDefinitions
));
}
}
else
if
(
line
.
startsWith
(
TAG_MEDIA_DURATION
))
{
segmentDurationUs
=
(
long
)
(
parseDoubleAttr
(
line
,
REGEX_MEDIA_DURATION
)
*
C
.
MICROS_PER_SECOND
);
segmentDurationUs
=
parseTimeSecondsToUs
(
line
,
REGEX_MEDIA_DURATION
);
segmentTitle
=
parseOptionalStringAttr
(
line
,
REGEX_MEDIA_TITLE
,
""
,
variableDefinitions
);
}
else
if
(
line
.
startsWith
(
TAG_SKIP
))
{
int
skippedSegmentCount
=
parseIntAttr
(
line
,
REGEX_SKIPPED_SEGMENTS
);
...
...
@@ -1202,6 +1202,12 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
return
defaultValue
;
}
private
static
long
parseTimeSecondsToUs
(
String
line
,
Pattern
pattern
)
throws
ParserException
{
String
timeValueSeconds
=
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
());
BigDecimal
timeValue
=
new
BigDecimal
(
timeValueSeconds
);
return
timeValue
.
multiply
(
new
BigDecimal
(
C
.
MICROS_PER_SECOND
)).
longValue
();
}
private
static
double
parseDoubleAttr
(
String
line
,
Pattern
pattern
)
throws
ParserException
{
return
Double
.
parseDouble
(
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
()));
}
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java
View file @
8cefb845
...
...
@@ -77,6 +77,10 @@ public class HlsMediaPlaylistParserTest {
+
"\n"
+
"#EXTINF:7.975,\n"
+
"https://priv.example.com/fileSequence2683.ts\n"
+
"\n"
// 2.002 tests correct rounding, see https://github.com/google/ExoPlayer/issues/9575.
+
"#EXTINF:2.002,\n"
+
"https://priv.example.com/fileSequence2684.ts\n"
+
"#EXT-X-ENDLIST"
;
InputStream
inputStream
=
new
ByteArrayInputStream
(
Util
.
getUtf8Bytes
(
playlistString
));
HlsPlaylist
playlist
=
new
HlsPlaylistParser
().
parse
(
playlistUri
,
inputStream
);
...
...
@@ -93,7 +97,7 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
mediaPlaylist
.
partTargetDurationUs
).
isEqualTo
(
C
.
TIME_UNSET
);
List
<
Segment
>
segments
=
mediaPlaylist
.
segments
;
assertThat
(
segments
).
isNotNull
();
assertThat
(
segments
).
hasSize
(
5
);
assertThat
(
segments
).
hasSize
(
6
);
Segment
segment
=
segments
.
get
(
0
);
assertThat
(
mediaPlaylist
.
discontinuitySequence
+
segment
.
relativeDiscontinuitySequence
)
...
...
@@ -152,6 +156,9 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
segment
.
byteRangeLength
).
isEqualTo
(
C
.
LENGTH_UNSET
);
assertThat
(
segment
.
byteRangeOffset
).
isEqualTo
(
0
);
assertThat
(
segment
.
url
).
isEqualTo
(
"https://priv.example.com/fileSequence2683.ts"
);
segment
=
segments
.
get
(
5
);
assertThat
(
segment
.
durationUs
).
isEqualTo
(
2002000
);
}
@Test
...
...
@@ -389,7 +396,7 @@ public class HlsMediaPlaylistParserTest {
.
parse
(
playlistUri
,
inputStream
);
assertThat
(
playlist
.
segments
).
hasSize
(
3
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
80
);
assertThat
(
previousPlaylist
.
segments
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
0
);
assertThat
(
previousPlaylist
.
segments
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
previousPlaylist
.
segments
.
get
(
2
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
...
...
@@ -448,12 +455,12 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
2000000
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
40000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
80
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
40000
80
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
60000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
60000
80
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
80001
58
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
80001
60
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
}
...
...
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