* Make simple playlist selecor easier to extend
Refactor from positional parameters to a single `settings`
argument. This makes it clearer what each argument means in calls of
the function. Additional parameters can now be added without making
the argument list overly long.
Key names were chosen to match those of
`minRebufferMaxBandwidthSelector` to align the signatures.
* Make simpleSelector test easier to understand
Inline the passed bandwidth value instead of referencing the config
constant since the concrete value is needed to understand why the
expected playlist is chosen. Also if the config constant should ever
change the test will fail for no good reason.
* Consider object-fit when selecting playlist by player size
So far, when `limitRenditionByPlayerDimensions` is `true`,
`simpleSelector` tried to either find a rendition with a resolution
that matches the size of the player exactly or, if that does not
exist, a rendition with the smallest resolution that has either
greater width or greater height than the player. This makes sense
since by default the video will be scaled to fit inside the media
element. So every resolution that exceeds player size in at least one
dimension will be scaled down.
Most browsers support [1] customizing this scaling behavior via the
`object-fit` CSS property [2]. If it set to `cover`, the video will
instead be scaled up if video and player aspect ratio do not match.
The previous behavior caused renditions with low resolution to be
selected for players with small width (e.g. portrait phone aspect
ratio) even when videos were then scaled up to cover the whole player.
We therefore detect if `object-fit` is set to `cover` and instead
select the smallest rendition with a resolution that exceeds player
dimensions in both width and height.
[1] https://caniuse.com/?search=object-fit
[2] https://developer.mozilla.org/de/docs/Web/CSS/object-fit
* Add usePlayerObjectFit option
Only consider `object-fit` CSS property when selecting playlists based
on play size when `usePlayerObjectFit` option is `true` to make new
behavior an opt-in.
* chore: add object-fit option to the demo page
---------
Co-authored-by: Dzianis Dashkevich <98566601+dzianis-dashkevich@users.noreply.github.com>
* chore: filter audio-only playlists when we have playlists with video-only or muxed
* chore: set use network info api to true by default
* chore: simplify filter logic
* chore: use infinity exclude
* chore: default to true only if unset
* chore: fix tests
* feat: use default as true for networkInformation api
* chore: clear previous dash media request timeout everytime we clear or update it
* chore: call fast-quality-switch only when we enable playlist from quality selector
* chore: add isPaused for dash playlist loader to mitigate duplicate playlist trigger for the main segment loader
* chore: fix fastQualityChange_ tests
* chore: add fast quality change debounce
* chore: add debounce tick to the tests
* chore: restart all loaders when we hit fix bad timeline change
* chore: update segment loader
* chore: update run-fast-quality-switch and fix bad timeline changes
* fix test
* chore: fix lint issues
---------
Co-authored-by: Dzianis Dashkevich <ddashkevich@brightcove.com>
Adds basic support for ManagedMediaSource. Must be enabled with the `useManagedMediaSource` VHS option.
Does not implement an alternate AirPlay source - this requires a more significant change, to add two source els. This means remote playback has to be disabled on the video el when using MMS.
Event listeners for advanced control are not yet implemented - `startstreaming`, `endstreaming`, `qualitychange`