Constructor
(export) new HlsParser()
Creates a new HLS parser.
- Implements:
- Source:
Members
(private, static, constant, non-null) AUDIO_CODEC_REGEXPS_ :Array.<!RegExp>
A list of regexps to detect well-known audio codecs.
Type:
- Array.<!RegExp>
- Source:
(private, static, constant, non-null) AUDIO_EXTENSIONS_TO_MIME_TYPES_ :Object.<string, string>
Type:
- Object.<string, string>
- Source:
(private, static, constant, non-null) CODEC_REGEXPS_BY_CONTENT_TYPE_ :Object.<string, !Array.<!RegExp>>
Type:
- Object.<string, !Array.<!RegExp>>
- Source:
(private, static, constant, non-null) EXTENSION_MAP_BY_CONTENT_TYPE_ :Object.<string, !Object.<string, string>>
Type:
- Object.<string, !Object.<string, string>>
- Source:
(private, static, constant, non-null) KEYFORMATS_TO_DRM_PARSERS_ :Object.<string, shaka.hls.HlsParser.DrmParser_>
Type:
- Object.<string, shaka.hls.HlsParser.DrmParser_>
- Source:
(private, static, constant) PARTIAL_SEGMENT_SIZE_ :number
The amount of data from the start of a segment we will try to fetch when we
need to know the segment start time. This allows us to avoid fetching the
entire segment in many cases.
Type:
- number
- Source:
(private, static) PresentationType_ :string
Type:
- string
Properties:
Name | Value | Type | Description |
---|---|---|---|
VOD |
VOD | string | |
EVENT |
EVENT | string | |
LIVE |
LIVE | string |
- Source:
(private, static, constant, non-null) TEXT_CODEC_REGEXPS_ :Array.<!RegExp>
A list of regexps to detect well-known text codecs.
Type:
- Array.<!RegExp>
- Source:
(private, static, constant, non-null) TEXT_EXTENSIONS_TO_MIME_TYPES_ :Object.<string, string>
Type:
- Object.<string, string>
- Source:
(private, static, constant) TS_ROLLOVER_ :number
At this value, timestamps roll over in TS content.
Type:
- number
- Source:
(private, static, constant) TS_TIMESCALE_ :number
Type:
- number
- Source:
(private, static, constant, non-null) VIDEO_CODEC_REGEXPS_ :Array.<!RegExp>
A list of regexps to detect well-known video codecs.
Type:
- Array.<!RegExp>
- Source:
(private, static, constant, non-null) VIDEO_EXTENSIONS_TO_MIME_TYPES_ :Object.<string, string>
Type:
- Object.<string, string>
- Source:
(private) manifestUri_ :string
TODO: should be resolved, post-redirect URI, so that media playlist URIs
respect master playlist redirects
Type:
- string
- Source:
(private, non-null) mediaTagsToStreamInfosMap_ :Object.<number, shaka.hls.HlsParser.StreamInfo>
TODO: this is now only used for text codec detection, try to remove
Type:
- Object.<number, shaka.hls.HlsParser.StreamInfo>
- Source:
(private, non-null) streamsToIndexMap_ :Object.<number, !shaka.media.SegmentIndex>
Type:
- Object.<number, !shaka.media.SegmentIndex>
- Source:
(private, nullable) updatePeriod_ :number
The update period in seconds; or null for no updates.
Type:
- number
- Source:
(private, non-null) urisToVariantsMap_ :Object.<string, shakaExtern.Variant>
The key is a string of the form "
Type:
- Object.<string, shakaExtern.Variant>
- Source:
(private, non-null) uriToStreamInfosMap_ :Object.<string, shaka.hls.HlsParser.StreamInfo>
A map from media playlists' uris to stream infos
representing the playlists.
TODO: should use original, resolved URIs, before redirects
Type:
- Object.<string, shaka.hls.HlsParser.StreamInfo>
- Source:
Methods
(private, static) getRequiredAttributeValue_(tag, attributeName) → {string}
Find the attribute and returns its value.
Throws an error if attribute was not found.
Parameters:
Name | Type | Description |
---|---|---|
tag |
shaka.hls.Tag | |
attributeName |
string |
- Source:
Throws:
Returns:
- Type
- string
(private, static) widevineDrmParser_(drmTagnon-null) → (nullable) {shakaExtern.DrmInfo}
Parameters:
Name | Type | Description |
---|---|---|
drmTag |
shaka.hls.Tag |
- Source:
Returns:
- Type
- shakaExtern.DrmInfo
(private) addVideoAttributes_(stream, widthnullable, heightnullable, frameRatenullable)
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
stream |
shakaExtern.Stream | ||
width |
string |
<nullable> |
|
height |
string |
<nullable> |
|
frameRate |
string |
<nullable> |
- Source:
(export) configure(config)
Called by the Player to provide an updated configuration any time the
configuration changes. Will be called at least once before start().
Parameters:
Name | Type | Description |
---|---|---|
config |
shakaExtern.ManifestConfiguration |
- Implements:
- Source:
(private) createInitSegmentReference_(playlistnon-null) → {shaka.media.InitSegmentReference}
Parameters:
Name | Type | Description |
---|---|---|
playlist |
shaka.hls.Playlist |
- Source:
Throws:
Returns:
(private) createPeriod_(playlistnon-null) → (non-null) {Promise.<!shakaExtern.Period>}
Parses a playlist into a Period object.
Parameters:
Name | Type | Description |
---|---|---|
playlist |
shaka.hls.Playlist |
- Source:
Returns:
- Type
- Promise.<!shakaExtern.Period>
(private) createPresentationTimeline_(lastTimestamp)
Parameters:
Name | Type | Description |
---|---|---|
lastTimestamp |
number |
- Source:
Throws:
shaka.util.Error
(private) createSegmentReference_(playlistnon-null, previousReference, hlsSegmentnon-null, position, startTime) → (non-null) {shaka.media.SegmentReference}
Parses one shaka.hls.Segment object into a shaka.media.SegmentReference.
Parameters:
Name | Type | Description |
---|---|---|
playlist |
shaka.hls.Playlist | |
previousReference |
shaka.media.SegmentReference | |
hlsSegment |
shaka.hls.Segment | |
position |
number | |
startTime |
number |
- Source:
Returns:
(private) createSegments_(playlistnon-null, startPosition, mimeType, codecs) → (non-null) {Promise.<!Array.<!shaka.media.SegmentReference>>}
Parses shaka.hls.Segment objects into shaka.media.SegmentReferences.
Parameters:
Name | Type | Description |
---|---|---|
playlist |
shaka.hls.Playlist | |
startPosition |
number | |
mimeType |
string | |
codecs |
string |
- Source:
Returns:
- Type
- Promise.<!Array.<!shaka.media.SegmentReference>>
(private) createStreamInfo_(uri, allCodecsnon-null, type, language, primary, labelnullable, channelsCountnullable) → (non-null) {Promise.<shaka.hls.HlsParser.StreamInfo>}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
uri |
string | ||
allCodecs |
Array.<string> | ||
type |
string | ||
language |
string | ||
primary |
boolean | ||
label |
string |
<nullable> |
|
channelsCount |
number |
<nullable> |
- Source:
Throws:
shaka.util.Error
Returns:
- Type
- Promise.<shaka.hls.HlsParser.StreamInfo>
(private) createStreamInfoFromMediaTag_(tag, allCodecsnon-null) → (non-null) {Promise.<shaka.hls.HlsParser.StreamInfo>}
Parse EXT-X-MEDIA media tag into a Stream object.
Parameters:
Name | Type | Description |
---|---|---|
tag |
shaka.hls.Tag | |
allCodecs |
Array.<string> |
- Source:
Returns:
- Type
- Promise.<shaka.hls.HlsParser.StreamInfo>
(private) createStreamInfoFromVariantTag_(tagnon-null, allCodecsnon-null, type) → (non-null) {Promise.<shaka.hls.HlsParser.StreamInfo>}
Parse EXT-X-STREAM-INF media tag into a Stream object.
Parameters:
Name | Type | Description |
---|---|---|
tag |
shaka.hls.Tag | |
allCodecs |
Array.<string> | |
type |
string |
- Source:
Returns:
- Type
- Promise.<shaka.hls.HlsParser.StreamInfo>
(private) createTextStream_(tagnon-null, playlistnon-null) → (non-null) {Promise.<?shakaExtern.Stream>}
Parses an EXT-X-MEDIA tag with TYPE="SUBTITLES" into a text stream.
Parameters:
Name | Type | Description |
---|---|---|
tag |
shaka.hls.Tag | |
playlist |
shaka.hls.Playlist |
- Source:
Returns:
- Type
- Promise.<?shakaExtern.Stream>
(private) createVariant_(audio, video, bandwidth, drmInfosnon-null) → (non-null) {shakaExtern.Variant}
Parameters:
Name | Type | Description |
---|---|---|
audio |
shakaExtern.Stream | |
video |
shakaExtern.Stream | |
bandwidth |
number | |
drmInfos |
Array.<shakaExtern.DrmInfo> |
- Source:
Returns:
- Type
- shakaExtern.Variant
(private) createVariants_(audioInfosnon-null, videoInfosnon-null, bandwidth, widthnullable, heightnullable, frameRatenullable) → (non-null) {Array.<!shakaExtern.Variant>}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
audioInfos |
Array.<!shaka.hls.HlsParser.StreamInfo> | ||
videoInfos |
Array.<!shaka.hls.HlsParser.StreamInfo> | ||
bandwidth |
number | ||
width |
string |
<nullable> |
|
height |
string |
<nullable> |
|
frameRate |
string |
<nullable> |
- Source:
Returns:
- Type
- Array.<!shakaExtern.Variant>
(private) createVariantsForTag_(tagnon-null, playlistnon-null) → (non-null) {Promise.<!Array.<!shakaExtern.Variant>>}
Parameters:
Name | Type | Description |
---|---|---|
tag |
shaka.hls.Tag | |
playlist |
shaka.hls.Playlist |
- Source:
Returns:
- Type
- Promise.<!Array.<!shakaExtern.Variant>>
(private) determinePresentationType_(playlistnon-null)
Parameters:
Name | Type | Description |
---|---|---|
playlist |
shaka.hls.Playlist |
- Source:
(private) fetchPartialSegment_(segmentRefnon-null) → (non-null) {Promise.<shakaExtern.Response>}
Try to fetch a partial segment, and fall back to a full segment if we have
to.
Parameters:
Name | Type | Description |
---|---|---|
segmentRef |
shaka.media.AnySegmentReference |
- Source:
Throws:
Returns:
- Type
- Promise.<shakaExtern.Response>
(private) filterLegacyCodecs_(streamInfosnon-null)
Filters out unsupported codec strings from an array of stream infos.
Parameters:
Name | Type | Description |
---|---|---|
streamInfos |
Array.<shaka.hls.HlsParser.StreamInfo> |
- Source:
(private) getChannelsCount_(channelsnullable) → (nullable) {number}
Get the channels count information for HLS audio track.
The channels value is a string that specifies an ordered, "/" separated list
of parameters. If the type is audio, the first parameter will be a decimal
integer, as the number of independent, simultaneous audio channels.
No other channels parameters are currently defined.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
channels |
string |
<nullable> |
- Source:
Returns:
channelcount
- Type
- number
(private) getRequiredTag_(tagsnon-null, tagName) → (non-null) {shaka.hls.Tag}
Returns a tag with a given name.
Throws an error if tag was not found.
Parameters:
Name | Type | Description |
---|---|---|
tags |
Array.<shaka.hls.Tag> | |
tagName |
string |
- Source:
Throws:
Returns:
- Type
- shaka.hls.Tag
(private) getStartTime_(playlistUri, initSegmentRef, segmentRefnon-null, mimeType, codecs) → (non-null) {Promise.<number>}
Gets start time of a segment from the existing manifest (if possible) or by
downloading it and parsing it otherwise.
Parameters:
Name | Type | Description |
---|---|---|
playlistUri |
string | |
initSegmentRef |
shaka.media.InitSegmentReference | |
segmentRef |
shaka.media.SegmentReference | |
mimeType |
string | |
codecs |
string |
- Source:
Throws:
Returns:
- Type
- Promise.<number>
(private) getStartTimeFromMp4Segment_(mediaDatanon-null, initDatanon-null) → {number}
Parses an mp4 segment to get its start time.
Parameters:
Name | Type | Description |
---|---|---|
mediaData |
ArrayBuffer | |
initData |
ArrayBuffer |
- Source:
Throws:
Returns:
- Type
- number
(private) getStartTimeFromTextSegment_(mimeType, codecs, datanon-null) → {number}
Parses a text segment to get its start time.
Parameters:
Name | Type | Description |
---|---|---|
mimeType |
string | |
codecs |
string | |
data |
ArrayBuffer |
- Source:
Throws:
Returns:
- Type
- number
(private) getStartTimeFromTsSegment_(datanon-null) → {number}
Parses a TS segment to get its start time.
Parameters:
Name | Type | Description |
---|---|---|
data |
ArrayBuffer |
- Source:
Throws:
Returns:
- Type
- number
(private) guessCodecs_(contentType, codecsnon-null) → {string}
Attempts to guess which codecs from the codecs list belong to a given content
type. Assumes a single codec is correct, and throws if not found.
Parameters:
Name | Type | Description |
---|---|---|
contentType |
string | |
codecs |
Array.<string> |
- Source:
Throws:
Returns:
- Type
- string
(private) guessCodecsSafe_(contentType, codecsnon-null) → (nullable) {string}
Attempts to guess which codecs from the codecs list belong to a given content
type. Does not assume a single codec is anything special, and does not throw
if it fails to match.
Parameters:
Name | Type | Description |
---|---|---|
contentType |
string | |
codecs |
Array.<string> |
- Source:
Returns:
or null if no match is found
- Type
- string
(private) guessMimeType_(contentType, codecs, playlistnon-null) → (non-null) {Promise.<string>}
Attempts to guess stream's mime type based on content type and uri.
Parameters:
Name | Type | Description |
---|---|---|
contentType |
string | |
codecs |
string | |
playlist |
shaka.hls.Playlist |
- Source:
Throws:
Returns:
- Type
- Promise.<string>
(export) onExpirationUpdated(sessionId, expiration)
Tells the parser that the expiration time of an EME session has changed.
Implementing this is optional.
Parameters:
Name | Type | Description |
---|---|---|
sessionId |
string | |
expiration |
number |
- Implements:
- Source:
(private) parseManifest_(datanon-null, uri) → (non-null) {Promise}
Parses the manifest.
Parameters:
Name | Type | Description |
---|---|---|
data |
ArrayBuffer | |
uri |
string |
- Source:
Throws:
shaka.util.Error When there is a parsing error.
Returns:
- Type
- Promise
(private) requestManifest_(uri) → (non-null) {Promise.<!shakaExtern.Response>}
Makes a network request for the manifest and returns a Promise
with the resulting data.
Parameters:
Name | Type | Description |
---|---|---|
uri |
string |
- Source:
Returns:
- Type
- Promise.<!shakaExtern.Response>
(private) setPresentationType_(type)
Parameters:
Name | Type | Description |
---|---|---|
type |
shaka.hls.HlsParser.PresentationType_ |
- Source:
(private) setUpdateTimer_(timenullable)
Sets the update timer.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
time |
number |
<nullable> |
in seconds |
- Source:
(export) start(uri, playerInterface) → (non-null) {Promise.<shakaExtern.Manifest>}
Parses the given manifest data into a Manifest object and starts any
background timers that are needed. This will only be called once.
Parameters:
Name | Type | Description |
---|---|---|
uri |
string | The URI of the manifest. |
playerInterface |
shakaExtern.ManifestParser.PlayerInterface | Contains the interface to the Player. |
- Implements:
- Source:
Returns:
- Type
- Promise.<shakaExtern.Manifest>
(export) stop() → (non-null) {Promise}
Stops any background timers and frees any objects held by this instance.
This will only be called after a successful call to start. This will only
be called once.
- Implements:
- Source:
Returns:
- Type
- Promise
(export) update()
Tells the parser to do a manual manifest update. Implementing this is
optional and is only called when 'emsg' boxes are present.
- Implements:
- Source:
(private) updateStream_(streamInfonon-null, uri)
Updates a stream.
Parameters:
Name | Type | Description |
---|---|---|
streamInfo |
shaka.hls.HlsParser.StreamInfo | |
uri |
string |
- Source:
Throws:
shaka.util.Error
Type Definitions
DrmParser_
Type:
- function(!shaka.hls.Tag):?shakaExtern.DrmInfo
- Source:
StreamInfo
Contains a stream and information about it.
Type:
- {stream: !shakaExtern.Stream, segmentIndex: !shaka.media.SegmentIndex, drmInfos: !Array.<shakaExtern.DrmInfo>, relativeUri: string, minTimestamp: number, maxTimestamp: number, duration: number}
Properties:
Name | Type | Description |
---|---|---|
stream |
shakaExtern.Stream | The Stream itself. |
segmentIndex |
shaka.media.SegmentIndex | SegmentIndex of the stream. |
drmInfos |
Array.<shakaExtern.DrmInfo> | DrmInfos of the stream. There may be multiple for multi-DRM content. |
relativeUri |
string | The uri associated with the stream, relative to the manifest. |
minTimestamp |
number | The minimum timestamp found in the stream. |
maxTimestamp |
number | The maximum timestamp found in the stream. |
duration |
number | The duration of the playlist. Used for VOD only. |
- Source: