During my tests I wasn't able to find a webOS TV which could handle
smooth codec switching properly. Let's disable it on all platform,
similar to what we've done on Tizen back in the day.
Current ManifestFilterer logic checks all variants and throws
RESTRICTIONS_CANNOT_BE_MET if none of variants is playable. It's
redundant, because if at least one variant is playable, we will not emit
this error anyway, so we can quickly stop further processing if we
detect playable variant.
### Summary
When playing a live HLS stream on Xbox, I was running into the following
error as soon as the playhead hit a discontinuity:
```
CHUNK_DEMUXER_ERROR_APPEND_FAILED: Sample encryption info is not available.
```
I noticed that [this
fix](https://github.com/shaka-project/shaka-player/pull/6719) was added
a while back to address this exact issue. A few months ago, [another
PR](https://github.com/shaka-project/shaka-player/pull/8210) was
submitted to abstract the feature detection logic, which I believe
unfortunately caused a regression.
The `requiresClearAndEncryptedInitSegments` helper was implemented in
both the Abstract Device and the Default Browser, but it looks like it
wasn't implemented in the Xbox class. This resulted in
`requiresClearAndEncryptedInitSegments` always returning false on that
platform (defaulting to the Abstract Device class's implementation,
which returns `false`).
This made the following logic (that fixed the
CHUNK_DEMUXER_ERROR_APPEND_FAILED error) fail:
```
if (device.requiresClearAndEncryptedInitSegments()) {
const doubleInitSegment = new Uint8Array(initSegment.byteLength +
modifiedInitSegment.byteLength);
doubleInitSegment.set(modifiedInitSegment);
doubleInitSegment.set(initSegment, modifiedInitSegment.byteLength);
return doubleInitSegment;
}
```
### Fix
Overriding this function in the Xbox class fixes the problem.
### Result
Playback now proceeds through HLS discontinuities on Xbox without
CHUNK_DEMUXER_ERROR_APPEND_FAILED.
Previously, AVERAGE-BANDWIDTH was prioritized over BANDWIDTH, but this
produces undesirable results when peaks are reproduced and the ABR is
unable to act.
Fixes https://github.com/shaka-project/shaka-player/issues/9187
This PR fixes:
- Memory leaks on requestTimestampMap_ map
The issue was identified in the request mode workflow, where the
requestTimestampMap was growing with each request. Cleanup logic has
been implemented for better handling. Response mode already handles its
own cleanup, and Event mode does not depend on this map.
This PR introduces a new `ads.disableSnapback` configuration option to
Shaka Player. When enabled, this option disables snapback behavior
during ad breaks, allowing playback to continue from the user's seek
position instead of rewinding to unplayed ads.
This PR adds `isLCEVC` check to the `basicResolutionComparison` and
appends `'LCEVC'` to the label text in `getResolutionLabel_` if the
track is LCEVC. This makes it easier to tell LCEVC profiles apart and
fixes an issue we were seeing when many different Dual-Track profiles
are contained in the manifest, it might be hard to differentiate them
(e.g. base and LCEVC profile with the same 1080p resolution).
Spec: https://www.svta.org/product/svta2053-2/
A new admanager has been created to manage this.
The new admanager works with SSAI and SGAI.
This new ad manager essentially manages ad tracking, but it's also
possible to have all ad events and disable tracking via configuration.