Class: shaka.hls.HlsParser

Constructor

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:
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_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, nullable) config_ :shakaExtern.ManifestConfiguration

Type:
Source:

(private) globalId_ :number

Type:
  • number
Source:

(private, nullable) manifest_ :shakaExtern.Manifest

Type:
Source:

(private) manifestTextParser_ :shaka.hls.ManifestTextParser

Type:
Source:

(private) manifestUri_ :string

TODO: should be resolved, post-redirect URI, so that media playlist URIs respect master playlist redirects
Type:
  • string
Source:

(private) maxTargetDuration_ :number

Type:
  • number
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:
Source:

(private) minTargetDuration_ :number

Type:
  • number
Source:

(private, nullable) playerInterface_ :shakaExtern.ManifestParser.PlayerInterface

Type:
Source:

(private, nullable) presentationTimeline_ :shaka.media.PresentationTimeline

Type:
Source:

(private) presentationType_ :shaka.hls.HlsParser.PresentationType_

Type:
Source:

(private, non-null) streamsToIndexMap_ :Object.<number, !shaka.media.SegmentIndex>

Type:
Source:

(private, nullable) updatePeriod_ :number

The update period in seconds; or null for no updates.
Type:
  • number
Source:

(private, nullable) updateTimer_ :number

Type:
  • number
Source:

(private, non-null) urisToVariantsMap_ :Object.<string, shakaExtern.Variant>

The key is a string of the form "
Type:
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:
Source:

Methods

(private, static) getRequiredAttributeValue_(tag, attributeNamenon-null) → (non-null) {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:

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:
Type
shaka.media.InitSegmentReference

(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_(endTime)

Parameters:
Name Type Description
endTime 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:
Type
shaka.media.SegmentReference

(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_(urinon-null, allCodecsnon-null, typenon-null, languagenon-null, 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, typenon-null) → (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.SegmentReference
Source:
Throws:
Returns:
Type
Promise.<shakaExtern.Response>

(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, tagNamenon-null) → (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, 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
segmentRef shaka.media.SegmentReference
mimeType string
codecs string
Source:
Throws:
Returns:
Type
Promise.<number>

(private) getStartTimeFromMp4Segment_(datanon-null) → {number}

Parses an mp4 segment to get its start time.
Parameters:
Name Type Description
data 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_(contentTypenon-null, 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_(contentTypenon-null, 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_(contentTypenon-null, codecsnon-null, 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>

(private) isLive_() → {boolean}

Source:
Returns:
Type
boolean

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) onUpdate_()

Called when the update timer ticks.
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_(urinon-null) → (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:

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>

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

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:
Source:

StreamInfo

Contains a stream and information about it.
Type:
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. Used for VOD only.
duration number The duration of the playlist. Used for VOD only.
Source: