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
f076a5eb
authored
Jul 17, 2019
by
Steve Mayhew
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
IFrame only exposed as a video track.Plays correctly
parent
7b82a3c8
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
1 deletions
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java
View file @
f076a5eb
...
@@ -35,6 +35,7 @@ import com.google.android.exoplayer2.source.SequenceableLoader;
...
@@ -35,6 +35,7 @@ import com.google.android.exoplayer2.source.SequenceableLoader;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.IFrameVariant
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.Rendition
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.Rendition
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.Variant
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.Variant
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistTracker
;
...
@@ -470,6 +471,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
...
@@ -470,6 +471,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
:
Collections
.
emptyMap
();
:
Collections
.
emptyMap
();
boolean
hasVariants
=
!
masterPlaylist
.
variants
.
isEmpty
();
boolean
hasVariants
=
!
masterPlaylist
.
variants
.
isEmpty
();
boolean
hasIFrameVariants
=
!
masterPlaylist
.
iFrameVariants
.
isEmpty
();
List
<
Rendition
>
audioRenditions
=
masterPlaylist
.
audios
;
List
<
Rendition
>
audioRenditions
=
masterPlaylist
.
audios
;
List
<
Rendition
>
subtitleRenditions
=
masterPlaylist
.
subtitles
;
List
<
Rendition
>
subtitleRenditions
=
masterPlaylist
.
subtitles
;
...
@@ -486,6 +488,15 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
...
@@ -486,6 +488,15 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
overridingDrmInitData
);
overridingDrmInitData
);
}
}
if
(
hasIFrameVariants
)
{
buildAndPrepareIFrameSampleStreamWrappers
(
masterPlaylist
,
positionUs
,
sampleStreamWrappers
,
overridingDrmInitData
);
}
// TODO: Build video stream wrappers here.
// TODO: Build video stream wrappers here.
buildAndPrepareAudioSampleStreamWrappers
(
buildAndPrepareAudioSampleStreamWrappers
(
...
@@ -673,6 +684,45 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
...
@@ -673,6 +684,45 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
}
}
}
}
/**
* Build a set of SampleStream wrappers around the IFrame (IDR) only variants found
* for the MediaPeriod at positionUS.
*
* @param masterPlaylist - master playlist with the IFrame variants
* @param positionUs - position to begin loading samples from
* @param sampleStreamWrappers - [output] list is filled.
*/
private
void
buildAndPrepareIFrameSampleStreamWrappers
(
HlsMasterPlaylist
masterPlaylist
,
long
positionUs
,
List
<
HlsSampleStreamWrapper
>
sampleStreamWrappers
,
Map
<
String
,
DrmInitData
>
overridingDrmInitData
)
{
int
selectedVariantsCount
=
masterPlaylist
.
iFrameVariants
.
size
();
Uri
[]
selectedPlaylistUrls
=
new
Uri
[
selectedVariantsCount
];
Format
[]
selectedPlaylistFormats
=
new
Format
[
selectedVariantsCount
];
int
[]
selectedVariantIndices
=
new
int
[
selectedVariantsCount
];
int
outIndex
=
0
;
for
(
IFrameVariant
iFrameVariant
:
masterPlaylist
.
iFrameVariants
)
{
selectedPlaylistUrls
[
outIndex
]
=
iFrameVariant
.
url
;
selectedPlaylistFormats
[
outIndex
]
=
iFrameVariant
.
format
;
selectedVariantIndices
[
outIndex
]
=
outIndex
++;
}
HlsSampleStreamWrapper
sampleStreamWrapper
=
buildSampleStreamWrapper
(
C
.
TRACK_TYPE_VIDEO
,
selectedPlaylistUrls
,
selectedPlaylistFormats
,
/* muxedAudioFormat= */
null
,
/* muxedCaptionFormats= */
Collections
.
emptyList
(),
overridingDrmInitData
,
positionUs
);
sampleStreamWrappers
.
add
(
sampleStreamWrapper
);
}
private
void
buildAndPrepareAudioSampleStreamWrappers
(
private
void
buildAndPrepareAudioSampleStreamWrappers
(
long
positionUs
,
long
positionUs
,
List
<
Rendition
>
audioRenditions
,
List
<
Rendition
>
audioRenditions
,
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java
View file @
f076a5eb
...
@@ -207,7 +207,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
...
@@ -207,7 +207,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
super
(
baseUri
,
tags
,
hasIndependentSegments
);
super
(
baseUri
,
tags
,
hasIndependentSegments
);
this
.
mediaPlaylistUrls
=
this
.
mediaPlaylistUrls
=
Collections
.
unmodifiableList
(
Collections
.
unmodifiableList
(
getMediaPlaylistUrls
(
variants
,
videos
,
audios
,
subtitles
,
closedCaptions
));
getMediaPlaylistUrls
(
variants
,
iFrameVariants
,
videos
,
audios
,
subtitles
,
closedCaptions
));
this
.
variants
=
Collections
.
unmodifiableList
(
variants
);
this
.
variants
=
Collections
.
unmodifiableList
(
variants
);
this
.
videos
=
Collections
.
unmodifiableList
(
videos
);
this
.
videos
=
Collections
.
unmodifiableList
(
videos
);
this
.
audios
=
Collections
.
unmodifiableList
(
audios
);
this
.
audios
=
Collections
.
unmodifiableList
(
audios
);
...
@@ -265,6 +265,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
...
@@ -265,6 +265,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
private
static
List
<
Uri
>
getMediaPlaylistUrls
(
private
static
List
<
Uri
>
getMediaPlaylistUrls
(
List
<
Variant
>
variants
,
List
<
Variant
>
variants
,
List
<
IFrameVariant
>
iFrameVariants
,
List
<
Rendition
>
videos
,
List
<
Rendition
>
videos
,
List
<
Rendition
>
audios
,
List
<
Rendition
>
audios
,
List
<
Rendition
>
subtitles
,
List
<
Rendition
>
subtitles
,
...
@@ -276,6 +277,9 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
...
@@ -276,6 +277,9 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
mediaPlaylistUrls
.
add
(
uri
);
mediaPlaylistUrls
.
add
(
uri
);
}
}
}
}
for
(
IFrameVariant
iFrameVariant
:
iFrameVariants
)
{
mediaPlaylistUrls
.
add
(
iFrameVariant
.
url
);
}
addMediaPlaylistUrls
(
videos
,
mediaPlaylistUrls
);
addMediaPlaylistUrls
(
videos
,
mediaPlaylistUrls
);
addMediaPlaylistUrls
(
audios
,
mediaPlaylistUrls
);
addMediaPlaylistUrls
(
audios
,
mediaPlaylistUrls
);
addMediaPlaylistUrls
(
subtitles
,
mediaPlaylistUrls
);
addMediaPlaylistUrls
(
subtitles
,
mediaPlaylistUrls
);
...
...
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