Microsoft HLS packaging tools generate audio-only variants in an odd way;
specifically, the variants have an AUDIO tag despite being audio-only, and
thus double-link to the stream.
Previously, the way we detected stream type lead to us assigning one version
of the audio stream to audio and one to video, thus erroneously making those
variants appear to be video+audio variants.
This makes it so that, if the AUDIO tag has the same content URI as the base
stream, it only uses the version in the AUDIO tag.
Change-Id: Ie940970587e95a9020ed67589042008d0568e153
This is part of adding a new conformance rule to add additional type
safety. This will disallow using properties of unknown types or using
unknown properties.
The first parts will be fixing errors caused by the new rule. These
are backwards compatible, so can be applied before the rule is enabled.
Once all the errors and bugs are fixed, the rule will be enabled.
Change-Id: Iefde089b2f62ddfdf43944cda5badab438577561
Adding the count of channels, as a new field for tracks and streams.
Used for HLS audio tracks.
Resolves#826.
Change-Id: I1448b4a8cfaf6dd798670bb2f0f3981d6c7e40c3
This change is to expose an audio track's role in order to differentiate
among a main / caption / commentary track that shares the same
language.
Issue #767.
Change-Id: I05d38cba2170d0005611cf160b7ae45996fe77dd
- Default CODECS attribute to 'avc1.42E01E,mp4a.40.2'
- Infer stream type and multiplexed status from number of codecs,
associated groups, and video-specific attributes.
- Recombine codec strings when we detect multiplexed content
Closes#805
Change-Id: Ib1298033360b52091b7d871fed0eca047a00ad22
Most of the times we want an attribute, it is only to get the value.
This adds a convenience method that gets the value directly, with an
optional default value if the attribute is not found.
Change-Id: I79002c4d6d4d4da468860238eab16fff6b8df747
See also commit 7a770783.
This fixes exports and externs that were broken in v2.1.0 and v2.1.1.
Generated externs are now verified and working with an external
Closure project.
Change-Id: I73a6b92474c87fd6119592c6d632ce91045fc073
The bulk of the logic for gap jumping is handled in Playhead. It
tracks the current buffered ranges and jumps over any gaps that appear.
It listens for a special browser event ('waiting') for when the video
element runs out of playable frames.
This change also removes the logic for jumping gaps at the beginning
of the timeline. This is handled by the more general gap jumping
logic and works cross-browser.
Finally, this updates the buffering logic to only count the amount of
content buffered (i.e. ignoring the gaps). This fixes some bugs where
gaps in the content can result in StreamingEngine buffering forever
since it thinks only a little is buffered.
This includes full implementation of the logic, but this doesn't close
the issue since there aren't any integration tests yet. Those will
be added next.
Issue #555
Change-Id: Id99eb9fe469e8cf2c7464a3d70c3733791e806e0
This adds a severity field to Error objects. This can be used to
detect whether an error is recoverable. All the same errors are still
reported so the field can be ignored.
There are two possible values:
* RECOVERABLE means that the Player will try to recover from the error
* CRITICAL means the Player will be unable to continue and must call
load() again
Closes#564
Change-Id: Ie2c5468340c13e7a288b99690ab65b7ecc0a6b29
This adds a method on Player to get the license expiration times for
the current EME sessions. This also adds the expiration times to the
stored content structure for offline content. This will update the
stored expiration while playing content (e.g. license duration changes
when playback starts).
Closes#727
Change-Id: I18770a79413423695bbb2ed5f31f6b19038a33d2
This abstracts the creation of DrmInfo to parse the EXT-X-KEY tag
differently per KEYFORMAT.
Issue #279
Change-Id: I2e187dcfc01f7306183c9090c54de58e81872bc4
For some reason, in some of my testing, the captured "uri" variable
was undefined by the time the Promise was resolved. Instead, use
"response.uri", which accounts for redirects anyway.
Issue #279
Change-Id: Ibaef99a57dc01a665d095fec4765ac9b32d537ac
We wanted to see if Media Source would accept a list of codecs for
a presentation without specifying which one belongs to which stream.
If it was possible, we wouldn't have to try and guess the codecs
and also wouldn't be limited to a made up list of codecs that we
know Media Source supports.
Been there, done that, doesn't work :|
Issue #279.
Change-Id: Id706022887beaa576eb0f68f2f97a278a0730f30
According to the HLS spec, CODECS attribute should have a comma-
separated list of codecs. The example in the spec doesn't contain
spaces between the elements of the list.
However, I encountered spaces in the codecs list in content
encoded by Apple. It's easy to support both ways, so I decided to
do it rather than fight that battle.
Issue #279.
Change-Id: Iecb706207365a51b5964f013e32ffe13e99604c6
This change enables HLS parser to get DRM information
from the manifest and create DrmInfo objects.
Note that until we actually add support for any of the
drm systems, we will still reject encrypted content.
Issue #279.
Change-Id: I4d0652411a567bc75d919c5bf732f20e870a5aeb
Until we implement support for protected content for HLS, we
reject it. We used to determine it by the presence of an
'EXT-X-KEY' tag. However, it is possible for the manifest to
have the tag, but describe clear key content if the 'METHOD'
attribute of the tag is 'NONE'. This CL insures we don't reject
this kind of playlists.
Issue #279.
Change-Id: Iee853dd23116c40a43b228f0876efe373c3111af
Currently HLS parser expects only one media tag to have a given
group id. According to the spec that might not be the case.
This change adds support for multiple tags with the same gruop id
and insures the parser creates variants for all of them.
Issue #279.
Change-Id: I327e52387f7513464fc56c4b6b8d07ead689d6cc
Apple encoded content has a default time offset of 10 seconds.
Every other packeger we've encountered so far doesn't.
New config will default to 0 and allow the application to specify
the offset for their content according to the packager's standards.
Issue #279
Change-Id: I65b16b05a5974a2f0318cd1f9847c3a56c38b745
Rather than having it in the DashParser as a network response filter,
we should have it in StreamingEngine. This will give it access to the
segment times so we can calculate the presentation times for the event.
Otherwise, there is no way to know when the event should actually occur
since the app can't know which segment is being downloaded or which it
came from.
This also adds startTime and endTime fields to the event so the app
doesn't have to calculate them. For reverse compatibility, the old
fields will still exist.
Closes#698
Change-Id: Icbaf3619aedfca7ea06bc8b1fe49e9cce65b0cc2
An init segment is not required for all streams, some streams are
self-initializing (e.g. MPEG2-TS).
Issue #279
Change-Id: I99556ee26f6568cc5e712b50d0bb4de78cb2bd9d
For HLS Drm Init Data, the whole tag needs to be passed down to
the cdm. This is a problem as by the time the drm init data is
being created the tag has been parsed and no longer has reference
to its original form.
This change adds a function "toString" to create a tag that would
be the same as its original text form.
As we create tags in our tests - it was not feasible to just give
it a text tag value so instead the function will recreate the text
form.
Change-Id: Idbc5bff3dd088a3aa3a67ef6a22749ea91bb1ccf
HLS parsing will be split into parsing the text of the manifest into
shaka internal objects and parsing those into a shakaExtern.Manifest.
This will make logic more clear and allow to test ManifestTextParser
independently of HlsParser.
Issue #279.
Change-Id: I44349966d3617e2d208185e3ad125ecea89732b4