1
0
mirror of https://github.com/videojs/video.js.git synced 2025-07-17 01:42:41 +02:00
Commit Graph

1777 Commits

Author SHA1 Message Date
2c6e4397bb fix: silence play promise in the play toggle. (#7189)
Fixes #6998
2021-04-16 14:06:19 -04:00
4707ce82c0 fix: always have an enabled audio track when switching (#7163) 2021-04-06 16:22:54 -04:00
17a61474d0 perf: wrap prototype methods in handlers in an arrow function (#7060) 2021-03-24 15:38:27 -04:00
b2edfd24ac feat: Add a mouse volume tooltip (#6824) 2021-03-23 18:02:07 -04:00
239c9a1552 feat: enable responsive controls on fullscreen (#7098)
Co-authored-by: Ileana Padilla <ipadilla@brightcove.com>
2021-03-23 17:50:59 -04:00
22e9843942 feat: retry on error (#7038)
Add a `retryOnError` option. When set, during source selection, if a source fails to load, we will retry the next item in the sources list. In the future, we may enable this by default.

A source that fails during playback will *not* trigger this behavior.

Fixes #1805.
2021-03-23 17:50:12 -04:00
5f59391a74 feat: Add a player option noUITitleAttributes to prevent title attributes in the UI (#7134)
Fixes #6767
2021-03-23 17:47:16 -04:00
b2336aacc9 fix: remove extra timeupdate event when progress controls is disabled (#7142) 2021-03-23 14:56:17 -04:00
b76e816044 fix: do not preload default text track if preloadTextTracks is false (#7021)
When preloadTextTracks option is set to false, it still preloads the default text track. This leads to duplicate tracks once the mode changes to showing and the track is loaded a second time. This includes the default text track in the behavior defined by the preloadTextTracks option.

Fixes #7019
2021-03-09 15:07:38 -05:00
45eef66b09 fix: add display block to all buttons icon placeholder (#7094)
Fixes #6989
2021-03-09 15:07:14 -05:00
1b52e7bea0 fix: focus-visible shouldn't change background styles (#7113)
Only set background:none focus styles on menu
2021-03-09 15:06:35 -05:00
3d676d68ca fix: try enabling liveui on canplay (#7114)
On native playback engines, like Safari, for some streams, seekable and
currentTime won't have correct values until video data has started
loading. Previously, we only tried to turn toggle tracking on
durationchange, now we also do it on canplay.

This is a followup to #7034 which helped prevent the live tracker from
showing up in some cases.
2021-03-08 16:27:53 -05:00
ba47953851 chore: video.js debug build (#7082)
Adds a debug build to video.js that does the following:
- Exposes DomData on video.js. DomData our internal event tracking object and should be empty on player dispose.
- Set log level to debug by default.
2021-02-18 10:00:42 -05:00
134f039573 fix: clear progress control related rAFs when tab is hidden (#7099)
The progress control is updated inside of requestAnimationFrames (rAFs). Normally, this is fine. However, when a tab is hidden, rAFs are generally not triggered. So, what happens is that we get a cached rAF from the last time the tab was active. When we come back to be active, we update again, but because we already have a named rAF, we don't clear it out and instead that one gets triggered. This isn't an issue if the video is still playing, because in a second, another rAF will be triggered which will update things. However, if the video has ended, we won't get any more updated and the progress bar will still be in the old position.

Instead, when the document becomes hidden, we should clear out both the SeekBar#update and the Slider#update rAFs. Doing just one, unfortunately, isn't enough. In addition, we also only re-enable the interval if we aren't ended or paused and ignore the update method if the tab is hidden.

Fixes #7086
2021-02-18 09:58:40 -05:00
542cead6ea fix(dom): account for translated parent in pointer position on iOS (#7079)
Since we switched to using adding up offsets to calculate the pointer position relative to the current element, we've had some issues, particularly on iOS, where a translated parent would cause us to miscalculate the position. This is currently a quickfix for the issue, and I'd like to spend some time to figure out a better solution that hopefully won't require us to iterate through the DOM and add up the transform matrix.
2021-02-04 11:33:25 -05:00
541f2e584b fix(dom): stop findPosition at a fullscreenElement (#7074)
On iPads, if the player is inside a floating div, when fullscreen, we'll have an incorrect offset value. Instead, we should stop counting our offsets once we get to our fullscreen element (i.e. the player) because in fullscreen it's outside the regular flow, and we don't actually want to add offset the float gives us inline.
2021-02-03 17:21:38 -05:00
85575dbaba fix(evented): log an error on invalid type (#7067)
Follow up from #6982. We previously threw an error, but we've seen it
happen unexpectedly. Instead, we should log an error.
We will still throw an error if the event is undefined or null.

Here, if we have a `log` object on the current object, we should use it,
otherwise, we use a default `log` object.
2021-01-26 13:56:41 -05:00
b13cb07d5b fix: only preventDefault if event is cancelable (#7063) 2021-01-25 11:55:46 -05:00
ed3c54d13a fix(time-display): fix IE11 appending times instead of replacing (#7059)
IE11 only supports HTMLElement and not text nodes in the contains
method. See https://developer.mozilla.org/en-US/docs/Web/API/Node/contains
Instead, compare firstChild.
2021-01-22 13:55:58 -05:00
dceedb6746 fix(fs): make sure handlers are unique per player (#7035)
Using Video.js's .bind still makes us attach prototype methods as
handlers. Then when one is removed, all handlers are removed.

Instead, use arrow methods to make these methods unique.

Fixes #7013.
2021-01-22 13:06:58 -05:00
db46578ac6 fix: prevent dispose error and text track duplicate listeners (#6984) 2021-01-21 17:02:15 -05:00
ffb690af6f fix: better evented validation and error messages (#6982) 2021-01-21 17:00:12 -05:00
330c82c88f fix: set liveWindow to 0 liveCurrentTime is Infinity (#7034)
Fixes an issue in native Safari and Android HLS playback where liveCurrentTime returns Infinity (as we don't have a seekableEnd or seekableEnd is actually Infinity). Which causes the new live ui to show up when we don't really have a live window.

Instead of returning Infinity when liveCurrentTime is Infinity, return 0. So that everything knows that we do not have a seekable window of live playback.
2021-01-11 17:24:53 -05:00
661962cb3a fix(player): Ensure fluid works when dimensions not initially known (#7023)
The video dimensions aren't necessarily known at loadedmetadata particularly with native playback on iOS. In fluid mode, the player defaults to 16:9 and does not update once the dimensions are known.

- Updates player styles on resize events.
- Fixes arguments passed to addEventedCallback so the callbacks are executed.

Fixes #6939
2021-01-06 12:49:57 -05:00
503141c75f docs: Remove Flash (#6994) 2020-12-22 14:10:53 -05:00
a35a1217f0 fix(MapSham): fix set method to use map property (#7000) 2020-12-17 17:19:17 -05:00
11d37e28fd fix: clear readyQueue with dispose (#6967) 2020-12-11 16:04:09 -05:00
3e30f83bb1 fix(time-display): add a null check for text node (#6977)
fixes #6699
closes #6700
2020-12-11 16:01:36 -05:00
799616deee fix: play progress time tooltip from jittering during live (#6968) 2020-12-11 15:57:51 -05:00
dcce0e908d fix: cast TOUCH_ENABLED to boolean (#6943)
This needs to be cast before exporting so users
can confidently pass it into their videojs config
and not worry about videojs internals doing strict
equality checks against true/false.

Co-authored-by: Kevin Kipp <kkipp@cloudflare.com>
2020-11-16 14:46:21 -05:00
3901ab0e72 fix(css): set seek to live button's align-items prop to center (#6942)
Fixes https://github.com/videojs/themes/issues/7
2020-11-16 14:44:29 -05:00
ee0637c078 feat(track): make label property mutable and fire a labelchange event when the label is changed (#6928)
Allows the editing of a track's label after its creation. Menu buttons will listen for the labelchange event and update their content accordingly.

This is technically divergent from the spec, which says it's readonly, but it can be useful for Video.js users.

Co-authored-by: Claudia Hinkle <chinkle@chinkle-mn1.linkedin.biz>
2020-11-10 18:11:53 -05:00
0140b28cc3 fix: always set tabIndex to restore keydown a11y (#6871)
Skipping the tabIndex property on created elements due to #6145
optimizations blocks them from receiving keyboard events, due to not
being focusable; for example this breaks closing ModalDialog elements by
pressing Escape.
Fix this by always setting tabIndex, as the element may return the same
value even though the property has not been explicitly set.

Fixes #6870
2020-11-10 18:10:59 -05:00
694fe0f787 fix(menu): focus correct MenuItem on keyboard open (#6914)
Closes #6912

Co-authored-by: Aaron Mertzenich <aaron.mertzenich@sonicfoundry.net>
2020-11-10 18:10:25 -05:00
a803484a39 feat(tech): add a scrubbing getter. (#6920)
This is helpful for source handlers and anything else that could have
customer behavior for when we're scrubbing or not.
2020-11-10 18:10:04 -05:00
a0d09c107a feat: trigger languagechange event on a language change (#6891) 2020-11-10 18:09:37 -05:00
affc0611d9 fix(text-track): don't overlap captions when font-size changes (#6874)
For whatever reason, when the font size for text tracks is changed in
the text track settings dialog, we set a bottom of 2px on the cue.
This was added as part of the initial vtt work for Video.js in
4e5c28cc56 (diff-8169d53aa7eee6cab5f85b6641ef3117R176).
However, this doesn't seem to be doing anything right now and having it
means that when font-size is changed, multiple cues end up with a button
value of 2px causing them to overlap and obscure each other.

This works fine if the cues are positioned away from each other,
however, if multiple cues are positioned by default and a large font
size is used, while they will now stay on their lines, they may
partially obscure each other. This does not fix that issue and may
require modification (addition of overrides) to vtt.js to properly
support.
2020-10-06 10:18:23 -04:00
1963086aef fix(dom): vertical getPointerPosition value (#6864)
From my understand, in the changes #5773, the Y position of all the
boxes is already calculated and accounted for in the offsetY value we
get. However, because the HTML coordinate system has Y=0 at the top,
when we do offsetY/boxH, we get a position relative to the top of the
element. However, we expect that position relative to the "start" of the
slider, or the bottom of it. Therefore, we want to get the inverse
value, which is '1 - clamp(offsetY/boxH)'.

Fixes #6863
2020-10-01 11:16:53 -04:00
f22ead10f0 docs: Fix simple typo, intial -> initial (#6851)
There is a small typo in src/js/player.js, src/js/tech/html5.js, test/unit/sourceset.test.js.

Should read `initial` rather than `intial`.
2020-09-22 14:38:19 -04:00
c4c8fc1caf fix: Better mouse position handling (#5773)
This uses offsetX and offsetY on the MouseEvents which helps account for transforms on the player. Unfortunately, this isn't available on TouchEvents, so, while this helps desktop devices with using a mouse, it doesn't help mobile devices using touch.

Fixes #6726, fixes #1102.
2020-08-31 12:32:57 -04:00
c91b510ef2 fix(tech): add abstract setScrubbing in tech.js (#6808) 2020-08-17 15:15:32 -04:00
245efacb59 fix(tech): add abstract crossOrigin method on Tech (#6765)
As part of #6588, we started using the crossOrigin method. However, it's
possible that a tech doesn't support this. Notably, the Flash tech. We
should instead have an abstract method on Tech that returns nothing so
we don't fail on those browsers.
2020-07-20 17:02:12 -04:00
94bea3502e fix: limit fastSeek to Safari based browsers only (#6752)
Fixes #6722
2020-07-13 12:00:17 -04:00
8d462bcab0 feat: Add support for CAF, FLAC and WAV formats in known mimetypes (#6657)
Following https://en.wikipedia.org/wiki/HTML5_audio#Supported_audio_coding_formats
and https://hpr.dogphilosophy.net/test/index.php . These are formats that are supported
on some (most?) browsers.

Tested with a patched version of seafile. The flac and wav files correctly plays on
chromium on my Linux laptop and the caf file plays on my iPad.
(Chromium appears to play the caf file just fine but claim to not support it.)

Of course not all browsers support these but according to #5982 and my test result
I assume the browser detection is implemented somewhere else already.
2020-07-10 12:25:41 -04:00
3d505ef0c5 feat: add debug mode (#6687)
When `debug(true)` is called, it will fire a `debugon` event that plugins and components can then use to do extra logging or anything else that's helpful to for debugging. It will also set the log level to debug.

When `debug(false)` is called, it will fire a `debugoff` event that plugins and components can then use to stop doing extra logging or helpful debugging. It will reset the log level to whatever it was previously.

Co-authored-by: ipadilla4 <ipadilla@brightcove.com>
2020-07-10 12:24:58 -04:00
f6a66e62de feat: Add a default, plugin-specific logger to advanced plugins (#6693) 2020-07-10 11:59:04 -04:00
fdd807b81e fix: Fullscreen broken in iOS (#6735)
The Fullscreen API is unsupported in iOS, so self.fsApi_.fullscreenerror and self.fsApi_.fullscreenchange are undefined, which was breaking the player after entering fullscreen by removing all bound player events.

Fixes #6707, fixes #6684, fixes #6645.
2020-07-07 17:33:03 -04:00
cad9114b2e fix: Use clamp correctly in progress control (#6625) 2020-06-19 15:06:49 -04:00
6e7cc75aaa feat: Add named requestAnimationFrame to prevent performance issues (#6627)
Make sure we don't create multiple rAFs particularly when in a background tab.

Fixes #5937
2020-06-19 14:50:39 -04:00
907d1cd730 fix: Disable PIP if tech doesn't support it (#6678)
The requestPictureInPicture API and button currently assume thta if the browser supports the PIP API, the tech supports it. This results in a broken button with certain techs, such as youtube or HTML5 with an audio el.

Checks if disablePictureInPicture is exactly false. If true it's disabled and if undefined the tech does not support it.

Fixes #6398.
2020-06-19 14:36:43 -04:00