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
302053c0
authored
Nov 08, 2021
by
Ian Baker
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge pull request #9576 from TiVo:p-fix-duration-round
PiperOrigin-RevId: 406839109
parents
ea2851b5
701f343e
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
15 additions
and
3 deletions
libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/playlist/HlsPlaylistParser.java
libraries/exoplayer_hls/src/test/java/androidx/media3/exoplayer/hls/playlist/HlsMediaPlaylistParserTest.java
libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/playlist/HlsPlaylistParser.java
View file @
302053c0
...
@@ -49,6 +49,7 @@ import java.io.BufferedReader;
...
@@ -49,6 +49,7 @@ import java.io.BufferedReader;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.InputStreamReader
;
import
java.math.BigDecimal
;
import
java.util.ArrayDeque
;
import
java.util.ArrayDeque
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
...
@@ -761,8 +762,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
...
@@ -761,8 +762,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
parseStringAttr
(
line
,
REGEX_VALUE
,
variableDefinitions
));
parseStringAttr
(
line
,
REGEX_VALUE
,
variableDefinitions
));
}
}
}
else
if
(
line
.
startsWith
(
TAG_MEDIA_DURATION
))
{
}
else
if
(
line
.
startsWith
(
TAG_MEDIA_DURATION
))
{
segmentDurationUs
=
segmentDurationUs
=
parseTimeSecondsToUs
(
line
,
REGEX_MEDIA_DURATION
);
(
long
)
(
parseDoubleAttr
(
line
,
REGEX_MEDIA_DURATION
)
*
C
.
MICROS_PER_SECOND
);
segmentTitle
=
parseOptionalStringAttr
(
line
,
REGEX_MEDIA_TITLE
,
""
,
variableDefinitions
);
segmentTitle
=
parseOptionalStringAttr
(
line
,
REGEX_MEDIA_TITLE
,
""
,
variableDefinitions
);
}
else
if
(
line
.
startsWith
(
TAG_SKIP
))
{
}
else
if
(
line
.
startsWith
(
TAG_SKIP
))
{
int
skippedSegmentCount
=
parseIntAttr
(
line
,
REGEX_SKIPPED_SEGMENTS
);
int
skippedSegmentCount
=
parseIntAttr
(
line
,
REGEX_SKIPPED_SEGMENTS
);
...
@@ -1204,6 +1204,12 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
...
@@ -1204,6 +1204,12 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
return
defaultValue
;
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
{
private
static
double
parseDoubleAttr
(
String
line
,
Pattern
pattern
)
throws
ParserException
{
return
Double
.
parseDouble
(
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
()));
return
Double
.
parseDouble
(
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
()));
}
}
...
...
libraries/exoplayer_hls/src/test/java/androidx/media3/exoplayer/hls/playlist/HlsMediaPlaylistParserTest.java
View file @
302053c0
...
@@ -77,6 +77,9 @@ public class HlsMediaPlaylistParserTest {
...
@@ -77,6 +77,9 @@ public class HlsMediaPlaylistParserTest {
+
"\n"
+
"\n"
+
"#EXTINF:7.975,\n"
+
"#EXTINF:7.975,\n"
+
"https://priv.example.com/fileSequence2683.ts\n"
+
"https://priv.example.com/fileSequence2683.ts\n"
+
"\n"
+
"#EXTINF:2.002,\n"
+
"https://priv.example.com/fileSequence2684.ts\n"
+
"#EXT-X-ENDLIST"
;
+
"#EXT-X-ENDLIST"
;
InputStream
inputStream
=
new
ByteArrayInputStream
(
Util
.
getUtf8Bytes
(
playlistString
));
InputStream
inputStream
=
new
ByteArrayInputStream
(
Util
.
getUtf8Bytes
(
playlistString
));
HlsPlaylist
playlist
=
new
HlsPlaylistParser
().
parse
(
playlistUri
,
inputStream
);
HlsPlaylist
playlist
=
new
HlsPlaylistParser
().
parse
(
playlistUri
,
inputStream
);
...
@@ -93,7 +96,7 @@ public class HlsMediaPlaylistParserTest {
...
@@ -93,7 +96,7 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
mediaPlaylist
.
partTargetDurationUs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaPlaylist
.
partTargetDurationUs
).
isEqualTo
(
C
.
TIME_UNSET
);
List
<
Segment
>
segments
=
mediaPlaylist
.
segments
;
List
<
Segment
>
segments
=
mediaPlaylist
.
segments
;
assertThat
(
segments
).
isNotNull
();
assertThat
(
segments
).
isNotNull
();
assertThat
(
segments
).
hasSize
(
5
);
assertThat
(
segments
).
hasSize
(
6
);
Segment
segment
=
segments
.
get
(
0
);
Segment
segment
=
segments
.
get
(
0
);
assertThat
(
mediaPlaylist
.
discontinuitySequence
+
segment
.
relativeDiscontinuitySequence
)
assertThat
(
mediaPlaylist
.
discontinuitySequence
+
segment
.
relativeDiscontinuitySequence
)
...
@@ -152,6 +155,9 @@ public class HlsMediaPlaylistParserTest {
...
@@ -152,6 +155,9 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
segment
.
byteRangeLength
).
isEqualTo
(
C
.
LENGTH_UNSET
);
assertThat
(
segment
.
byteRangeLength
).
isEqualTo
(
C
.
LENGTH_UNSET
);
assertThat
(
segment
.
byteRangeOffset
).
isEqualTo
(
0
);
assertThat
(
segment
.
byteRangeOffset
).
isEqualTo
(
0
);
assertThat
(
segment
.
url
).
isEqualTo
(
"https://priv.example.com/fileSequence2683.ts"
);
assertThat
(
segment
.
url
).
isEqualTo
(
"https://priv.example.com/fileSequence2683.ts"
);
segment
=
segments
.
get
(
5
);
assertThat
(
segment
.
durationUs
).
isEqualTo
(
2002000
);
}
}
@Test
@Test
...
...
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