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
06f4983f
authored
Feb 12, 2020
by
olly
Committed by
Oliver Woodman
Feb 13, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Split bitrate into average and peak in VariantInfo
Issue: #2863 PiperOrigin-RevId: 294661214
parent
40101094
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
95 additions
and
25 deletions
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsTrackMetadataEntry.java
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/HlsTrackMetadataEntryTest.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylistParserTest.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsTrackMetadataEntry.java
View file @
06f4983f
...
...
@@ -19,6 +19,7 @@ import android.os.Parcel;
import
android.os.Parcelable
;
import
android.text.TextUtils
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
java.util.ArrayList
;
import
java.util.Collections
;
...
...
@@ -30,8 +31,14 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
/** Holds attributes defined in an EXT-X-STREAM-INF tag. */
public
static
final
class
VariantInfo
implements
Parcelable
{
/** The bitrate as declared by the EXT-X-STREAM-INF tag. */
public
final
long
bitrate
;
/**
* The average bitrate as declared by the AVERAGE-BANDWIDTH attribute of the EXT-X-STREAM-INF
* tag, or {@link Format#NO_VALUE} if the attribute is not declared.
*/
public
final
int
averageBitrate
;
/** The peak bitrate as declared by the BANDWIDTH attribute of the EXT-X-STREAM-INF tag. */
public
final
int
peakBitrate
;
/**
* The VIDEO value as defined in the EXT-X-STREAM-INF tag, or null if the VIDEO attribute is not
...
...
@@ -60,19 +67,22 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
/**
* Creates an instance.
*
* @param bitrate See {@link #bitrate}.
* @param averageBitrate See {@link #averageBitrate}.
* @param peakBitrate See {@link #peakBitrate}.
* @param videoGroupId See {@link #videoGroupId}.
* @param audioGroupId See {@link #audioGroupId}.
* @param subtitleGroupId See {@link #subtitleGroupId}.
* @param captionGroupId See {@link #captionGroupId}.
*/
public
VariantInfo
(
long
bitrate
,
int
averageBitrate
,
int
peakBitrate
,
@Nullable
String
videoGroupId
,
@Nullable
String
audioGroupId
,
@Nullable
String
subtitleGroupId
,
@Nullable
String
captionGroupId
)
{
this
.
bitrate
=
bitrate
;
this
.
averageBitrate
=
averageBitrate
;
this
.
peakBitrate
=
peakBitrate
;
this
.
videoGroupId
=
videoGroupId
;
this
.
audioGroupId
=
audioGroupId
;
this
.
subtitleGroupId
=
subtitleGroupId
;
...
...
@@ -80,7 +90,8 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
}
/* package */
VariantInfo
(
Parcel
in
)
{
bitrate
=
in
.
readLong
();
averageBitrate
=
in
.
readInt
();
peakBitrate
=
in
.
readInt
();
videoGroupId
=
in
.
readString
();
audioGroupId
=
in
.
readString
();
subtitleGroupId
=
in
.
readString
();
...
...
@@ -96,7 +107,8 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
return
false
;
}
VariantInfo
that
=
(
VariantInfo
)
other
;
return
bitrate
==
that
.
bitrate
return
averageBitrate
==
that
.
averageBitrate
&&
peakBitrate
==
that
.
peakBitrate
&&
TextUtils
.
equals
(
videoGroupId
,
that
.
videoGroupId
)
&&
TextUtils
.
equals
(
audioGroupId
,
that
.
audioGroupId
)
&&
TextUtils
.
equals
(
subtitleGroupId
,
that
.
subtitleGroupId
)
...
...
@@ -105,7 +117,8 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
@Override
public
int
hashCode
()
{
int
result
=
(
int
)
(
bitrate
^
(
bitrate
>>>
32
));
int
result
=
averageBitrate
;
result
=
31
*
result
+
peakBitrate
;
result
=
31
*
result
+
(
videoGroupId
!=
null
?
videoGroupId
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
audioGroupId
!=
null
?
audioGroupId
.
hashCode
()
:
0
);
result
=
31
*
result
+
(
subtitleGroupId
!=
null
?
subtitleGroupId
.
hashCode
()
:
0
);
...
...
@@ -122,7 +135,8 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
@Override
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
dest
.
writeLong
(
bitrate
);
dest
.
writeInt
(
averageBitrate
);
dest
.
writeInt
(
peakBitrate
);
dest
.
writeString
(
videoGroupId
);
dest
.
writeString
(
audioGroupId
);
dest
.
writeString
(
subtitleGroupId
);
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java
View file @
06f4983f
...
...
@@ -303,8 +303,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
}
}
else
if
(
line
.
startsWith
(
TAG_STREAM_INF
))
{
noClosedCaptions
|=
line
.
contains
(
ATTR_CLOSED_CAPTIONS_NONE
);
int
bitrate
=
parseIntAttr
(
line
,
REGEX_BANDWIDTH
);
// TODO: Plumb this into Format.
int
peakBitrate
=
parseIntAttr
(
line
,
REGEX_BANDWIDTH
);
int
averageBitrate
=
parseOptionalIntAttr
(
line
,
REGEX_AVERAGE_BANDWIDTH
,
-
1
);
String
codecs
=
parseOptionalStringAttr
(
line
,
REGEX_CODECS
,
variableDefinitions
);
String
resolutionString
=
...
...
@@ -343,6 +342,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
replaceVariableReferences
(
iterator
.
next
(),
variableDefinitions
);
// #EXT-X-STREAM-INF's URI.
Uri
uri
=
UriUtil
.
resolveToUri
(
baseUri
,
line
);
// TODO: Set Format.averageBitrate.
Format
format
=
Format
.
createVideoContainerFormat
(
/* id= */
Integer
.
toString
(
variants
.
size
()),
...
...
@@ -351,7 +351,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
/* sampleMimeType= */
null
,
codecs
,
/* metadata= */
null
,
b
itrate
,
peakB
itrate
,
width
,
height
,
frameRate
,
...
...
@@ -362,14 +362,19 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
new
Variant
(
uri
,
format
,
videoGroupId
,
audioGroupId
,
subtitlesGroupId
,
closedCaptionsGroupId
);
variants
.
add
(
variant
);
ArrayList
<
VariantInfo
>
variantInfosForUrl
=
urlToVariantInfos
.
get
(
uri
);
@Nullable
ArrayList
<
VariantInfo
>
variantInfosForUrl
=
urlToVariantInfos
.
get
(
uri
);
if
(
variantInfosForUrl
==
null
)
{
variantInfosForUrl
=
new
ArrayList
<>();
urlToVariantInfos
.
put
(
uri
,
variantInfosForUrl
);
}
variantInfosForUrl
.
add
(
new
VariantInfo
(
bitrate
,
videoGroupId
,
audioGroupId
,
subtitlesGroupId
,
closedCaptionsGroupId
));
averageBitrate
,
peakBitrate
,
videoGroupId
,
audioGroupId
,
subtitlesGroupId
,
closedCaptionsGroupId
));
}
}
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/HlsTrackMetadataEntryTest.java
0 → 100644
View file @
06f4983f
/*
* Copyright (C) 2020 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.
*/
package
com
.
google
.
android
.
exoplayer2
.
source
.
hls
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
android.os.Parcel
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.android.exoplayer2.source.hls.HlsTrackMetadataEntry.VariantInfo
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
/** Test for {@link HlsTrackMetadataEntry}. */
@RunWith
(
AndroidJUnit4
.
class
)
public
class
HlsTrackMetadataEntryTest
{
@Test
public
void
variantInfo_parcelRoundTrip_isEqual
()
{
VariantInfo
variantInfoToParcel
=
new
VariantInfo
(
/* averageBitrate= */
1024
,
/* peakBitrate= */
2048
,
"videoGroupId"
,
"audioGroupId"
,
"subtitleGroupId"
,
"captionGroupId"
);
Parcel
parcel
=
Parcel
.
obtain
();
variantInfoToParcel
.
writeToParcel
(
parcel
,
0
);
parcel
.
setDataPosition
(
0
);
VariantInfo
variantInfoFromParcel
=
VariantInfo
.
CREATOR
.
createFromParcel
(
parcel
);
assertThat
(
variantInfoFromParcel
).
isEqualTo
(
variantInfoToParcel
);
parcel
.
recycle
();
}
}
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylistParserTest.java
View file @
06f4983f
...
...
@@ -352,24 +352,24 @@ public class HlsMasterPlaylistParserTest {
assertThat
(
playlist
.
variants
.
get
(
0
).
format
.
metadata
)
.
isEqualTo
(
createExtXStreamInfMetadata
(
createVariantInfo
(
/*
b
itrate= */
2227464
,
/* audioGroupId= */
"aud1"
),
createVariantInfo
(
/*
b
itrate= */
2448841
,
/* audioGroupId= */
"aud2"
),
createVariantInfo
(
/*
b
itrate= */
2256841
,
/* audioGroupId= */
"aud3"
)));
createVariantInfo
(
/*
peakB
itrate= */
2227464
,
/* audioGroupId= */
"aud1"
),
createVariantInfo
(
/*
peakB
itrate= */
2448841
,
/* audioGroupId= */
"aud2"
),
createVariantInfo
(
/*
peakB
itrate= */
2256841
,
/* audioGroupId= */
"aud3"
)));
assertThat
(
playlist
.
variants
.
get
(
1
).
format
.
metadata
)
.
isEqualTo
(
createExtXStreamInfMetadata
(
createVariantInfo
(
/*
b
itrate= */
6453202
,
/* audioGroupId= */
"aud1"
),
createVariantInfo
(
/*
b
itrate= */
6482579
,
/* audioGroupId= */
"aud3"
)));
createVariantInfo
(
/*
peakB
itrate= */
6453202
,
/* audioGroupId= */
"aud1"
),
createVariantInfo
(
/*
peakB
itrate= */
6482579
,
/* audioGroupId= */
"aud3"
)));
assertThat
(
playlist
.
variants
.
get
(
2
).
format
.
metadata
)
.
isEqualTo
(
createExtXStreamInfMetadata
(
createVariantInfo
(
/*
b
itrate= */
5054232
,
/* audioGroupId= */
"aud1"
),
createVariantInfo
(
/*
b
itrate= */
5275609
,
/* audioGroupId= */
"aud2"
)));
createVariantInfo
(
/*
peakB
itrate= */
5054232
,
/* audioGroupId= */
"aud1"
),
createVariantInfo
(
/*
peakB
itrate= */
5275609
,
/* audioGroupId= */
"aud2"
)));
assertThat
(
playlist
.
variants
.
get
(
3
).
format
.
metadata
)
.
isEqualTo
(
createExtXStreamInfMetadata
(
createVariantInfo
(
/*
b
itrate= */
8399417
,
/* audioGroupId= */
"aud2"
),
createVariantInfo
(
/*
b
itrate= */
8207417
,
/* audioGroupId= */
"aud3"
)));
createVariantInfo
(
/*
peakB
itrate= */
8399417
,
/* audioGroupId= */
"aud2"
),
createVariantInfo
(
/*
peakB
itrate= */
8207417
,
/* audioGroupId= */
"aud3"
)));
assertThat
(
playlist
.
audios
).
hasSize
(
3
);
assertThat
(
playlist
.
audios
.
get
(
0
).
format
.
metadata
)
...
...
@@ -390,9 +390,10 @@ public class HlsMasterPlaylistParserTest {
}
private
static
HlsTrackMetadataEntry
.
VariantInfo
createVariantInfo
(
long
b
itrate
,
String
audioGroupId
)
{
int
peakB
itrate
,
String
audioGroupId
)
{
return
new
HlsTrackMetadataEntry
.
VariantInfo
(
bitrate
,
/* averageBitrate= */
Format
.
NO_VALUE
,
/* peakBitrate= */
peakBitrate
,
/* videoGroupId= */
null
,
audioGroupId
,
/* subtitleGroupId= */
"sub1"
,
...
...
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