1
0
mirror of https://github.com/videojs/video.js.git synced 2025-10-31 00:08:01 +02:00
Commit Graph

130 Commits

Author SHA1 Message Date
Alex Barstow
eddda97eeb feat: Add methods to add and remove <source> elements (#8886)
## Description
It is useful to have methods for appending and removing `<source>`
elements to the `<video>` element, as they are sometimes required to
enable certain playback features, for example, using [Airplay with
MSE](https://webkit.org/blog/15036/how-to-use-media-source-extensions-with-airplay).

## Specific Changes proposed
Add new methods-- `addSourceElement()` and `removeSourceElement()` to
the player and tech. The former will take a source object and create and
append a new `<source>` element to the `<video>` element, and the latter
will take a source url and remove any `<source>` element with a matching
`src`.

## Requirements Checklist
- [ ] Feature implemented / Bug fixed
- [ ] If necessary, more likely in a feature request than a bug fix
- [ ] Change has been verified in an actual browser (Chrome, Firefox,
IE)
  - [ ] Unit Tests updated or fixed
  - [ ] Docs/guides updated
- [ ] Example created ([starter template on
JSBin](https://codepen.io/gkatsev/pen/GwZegv?editors=1000#0))
- [ ] Has no DOM changes which impact accessiblilty or trigger warnings
(e.g. Chrome issues tab)
  - [ ] Has no changes to JSDoc which cause `npm run docs:api` to error
- [ ] Reviewed by Two Core Contributors
2024-10-09 12:16:04 -04:00
Jon Dufresne
423f7ebd67 Fix several typos in docs and comments (#8110) 2023-03-22 15:00:01 +01:00
mister-ben
0022867a2a fix(types): Improve Typescript coverage (#8148) 2023-03-02 06:41:57 +01:00
mister-ben
509b3d0757 fix: Ensures iOS can use native fullscreen (#8071) 2023-01-24 11:45:49 +01:00
mister-ben
2d96c9d780 feat: Use userAgentData in favour of userAgent (#7979) 2022-11-23 09:49:37 -05:00
Grzegorz Blaszczyk
0545df5289 feat: generate Typescript definitions (#7954) 2022-11-23 09:49:35 -05:00
Pat O'Neill
cc84ff4f80 refactor: remove internal Map, Set, and WeakMap shams, assume window.performance and requestAnimationFrame support (#7775) 2022-11-23 09:49:24 -05:00
Pat O'Neill
28029d93f4 feat: update exposed utility functions and deprecate several top-level methods of the videojs global (#7761) 2022-11-23 09:49:23 -05:00
Alex Barstow
3faa866834 feat: Change addRemoteTextTrack's manualCleanup option default value to false (#7588) 2022-11-23 09:48:11 -05:00
mister-ben
d178d9ae3c fix: Conditional requestVideoFrameCallback on Safari (#7854)
Safari's requestVideoFrameCallback is (intentionally?) broken when DRM is playing, so in that case use the fallback with requestAnimationFrame instead.
2022-07-28 14:20:46 -04:00
Joe Flateau
b22a08aad0 fix: need to determine featuresVideoFrameCallback before setting source (#7812)
the tech needs to know whether or not the underlying element supports requestVideoFrameCallback before calling setSource

Fixes #7807
2022-06-28 16:01:00 -04:00
mister-ben
a14ace202b fix: HTML5 tech with audio tag shouldn't use requestVideoFrameCallback (#7778) 2022-05-31 15:50:51 -04:00
mister-ben
1179826cbc feat: Greater text track precision using requestVideoFrameCallback (#7633) 2022-03-02 10:34:13 -05:00
mister-ben
f16d73b528 fix: Guard against Safari adding native controls after fullscreen (#7634) 2022-02-23 12:17:49 -05:00
Gary Katsevman
3c213455ee fix: volume control showing up on iOS (#7550)
This is a follow-up to #7514. But turns out, that we still had a timing
issue around when we were doing the check and when the volume control
was created.

Instead, we should make `featuresVolumeControl` not be a lazy property,
so, that we do that check as early as possible. Also, we should
default this property to `false` in this case, so, that we assume we
can't until we confirm we can.

Additionally, added a null check for Html5, to be extra defensive since
the timeout isn't tied to a player.
2021-12-01 17:33:11 -05:00
Gary Katsevman
1d96d1cf20 fix: try again on volume feature detection on iOS (#7514)
On latest iOS, we are seeing times when the volume feature detection is
showing that we are able to change the volume, though, that is not the
case. Instead, on iOS, when we detect that we can control the volume, we
set a short timer to retest and reset the featuresVolumeControl property.

Fixes #7040
2021-11-17 12:27:08 -05:00
Gary Katsevman
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
Tim Gates
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
Gary Katsevman
c91b510ef2 fix(tech): add abstract setScrubbing in tech.js (#6808) 2020-08-17 15:15:32 -04:00
Gary Katsevman
94bea3502e fix: limit fastSeek to Safari based browsers only (#6752)
Fixes #6722
2020-07-13 12:00:17 -04:00
Gary Katsevman
d6b07f089e fix(fs): don't set player element css props on native fullscreen (#6673)
Fixes #6640
2020-05-28 10:29:36 -04:00
Grzegorz Blaszczyk
dbd5203a0b feat: adds disablePictureInPicture method to the player API. (#6378) 2020-04-22 12:41:21 -04:00
Gary Katsevman
8c66c58346 feat: support fastSeek during scrubbing if available (#6525)
This will allow us to use iframe playlists on HLS on Safari browsers and eventually, add support in VHS.
2020-04-22 12:40:26 -04:00
Aaron Stone
ea20edcd99 feat(cors): add crossOrigin option to enable cookies on requests (#6533)
Co-authored-by: Abraham Cruz Sustaita <abraham.sustaita@gmail.com>
Co-authored-by: Gary Katsevman <git@gkatsev.com>
2020-04-06 11:53:45 -04:00
Gary Katsevman
da37fab130 feat(fs): return a promise from requestFullscreen and exitFullscreen when we can (#6424) 2020-03-26 17:26:26 -04:00
Gary Katsevman
52c181ddb0 fix: trigger change events on remoteTextTrack when nativeTextTrack is set to true (#6410)
It seems we have never triggered change events on remoteTextTrack when we were using native text tracks. This was a problem for VHS, which exclusively uses text tracks.
This makes it so we do trigger the event. Main issue with this change is that it creates a potential for a false positive where a change event was triggered from a non-remote text track but the remoteTextTrack list still received a change event. This issue is mitigated by best practices of looping through the list looking for the modes that you care about.

Co-authored-by: Kevin Kipp <kevin.kipp@gmail.com>
Co-authored-by: Kyle Boutette <kyleveB@gmail.com>
2020-03-12 11:26:09 -04:00
Gary Katsevman
17d8046836 revert: Revert "fix(iOS): pause player on suspend or stalled if extra buffer is available (#6199)" (#6373)
This reverts commit c791cd8c4e.

Fixes #6330
2019-12-24 11:25:01 -05:00
Gary Katsevman
ca84448026 fix: turn on strict mode again (#6334)
We had to turn off strict mode (#4551) in Video.js due to a change in vtt.js. That has now been fixed in videojs/vtt.js#40 and released as part of 0.15.2 which will be available via #6333.

Fixes videojs/vtt.js#15
2019-12-02 14:13:36 -05:00
Marco Del Toro Barragan
c791cd8c4e fix(iOS): pause player on suspend or stalled if extra buffer is available (#6199)
On iOS, when disconnecting the headphones, we may receive a stalled or suspend event. In those case, we may actually still have buffer available for us to play through rather than actually having stalled or suspended. In those cases, we should pause the player to prevent playback issues.
2019-10-04 13:31:41 -04:00
Brandon Casey
22782b8425 perf: Another 5ms of startup time improvements (#6145) 2019-08-29 16:44:06 -04:00
Brandon Casey
549552ed43 fix: remove deprecated tsml dependency (#6174) 2019-08-19 14:56:16 -04:00
Brandon Casey
266cb151fa perf: Improve performance of toTitleCase, register with lower and TitleCase (#6148) 2019-08-07 16:05:41 -04:00
François Beaufort
83541dceeb feat: add Picture-in-Picture API methods (#6001)
Following #5824, this PR adds support for some Picture-in-Picture methods described in the spec and article. It also makes sure that we can listen to the enterpictureinpicture and leavepictureinpicture events on the player.
2019-06-11 13:21:02 -04:00
Gary Katsevman
6bff3ce779 fix(vjsstandard): update to 8.0.2 and fixup linting (#5413) 2018-09-28 14:58:15 -04:00
Darius Oleskevicius
b430461335 feat(browser): include iOS Chrome UA pattern when detecting Google Chrome (#5262)
Make IS_CHROME return true and IS_ANY_SAFARI return false for iOS Chrome.
2018-06-26 14:36:33 -04:00
Darius Oleskevicius
237041698c feat: show mute toggle button if the tech supports muting volume (#5052)
Currently, VideoJS combines volume control with muted support, and these actions aren't actually the same. Muting/unmuting volume work independently from the volume control. For example, iOS doesn't support controlling volume programmatically but allows muting/unmuting volume.

This change will display the volume control panel and mute toggle button if the tech supports muting volume. The volume slider will continue to be hidden if the platform doesn't allow programmatically control volume. If neither muting nor control volume is supported, volume panel will not be displayed.

Fixes #4478.
2018-06-21 14:33:08 -04:00
Brandon Casey
59c6261cb5 fix: check for el before resetSourceSet (#5176) 2018-05-16 11:19:45 -04:00
Brandon Casey
6147e5f7aa fix: sourceset and browser behavior inconsistencies (#5054)
* We now trigger `sourceset` any time a `<source>` element is appended to a mediaEl with no source.
  * `load` should always fire a `sourceset`
  * `sourceset` should always be the absolute url.
2018-05-09 15:51:47 -04:00
Oshin Karamian
083a86c363 feat: split overrideNative method into separate methods (#5107)
Split overrideNative method into one for Audio and Video. Fixes issues with differing track support in IE11.
2018-04-19 20:11:11 -04:00
Oshin Karamian
22bbbc948c feat: add tech method to allow override native audio and video (#5074) 2018-04-19 13:16:01 -04:00
Mayde
064c1be2ba docs: fix some misspellings (#5082) 2018-04-10 10:34:20 -04:00
Brandon Casey
9eb5de7ec7 fix: fire sourceset on initial source append (#5038)
In Chrome/Firefox/Safari appending a <source> element when the media element has no source, causes what we think of as a `sourceset`. These changes make our code actual fire that event.
2018-04-02 16:06:47 -04:00
Brandon Casey
1cb67ab9c9 refactor: move sourceset code out of tech (#5037) 2018-03-23 13:51:47 -04:00
Gary Katsevman
bc2da7c67b refactor: remove IE8 specific changes (#5041)
BREAKING CHANGE: remove IE8, IE9, and IE10 specific JavaScript and CSS code. Remove Android 2.3 workaround.
2018-03-23 13:25:12 -04:00
Gary Katsevman
1b3c827d5e feat: require enableSourceset option for event (#5031)
While sourceset is experimental, require the option `enableSourceset`.
This can easily be reversed in a minor update.
2018-03-19 13:47:45 -04:00
Gary Katsevman
46d8b37385 fix(sourceset): set evt.src to empty string or src attr from load (#5016)
If .load() is called, we don't know what the new source will be because of the asynchronous nature of the resource selection algorithm. However, we can know if the src attribute is set on the video element because that's what will be chosen. So, set the src property on the event object to be the src attribute or be the empty string. This matches how currentSrc works where it is an empty string when no source is set. So, when sourceset is triggered and src is "" in the event object, it means that the source is changing.
In addition, we're going to be releasing sourceset as an experimental feature so we could improve the API and make changes in minor releases.
2018-03-15 15:05:41 -04:00
Brandon Casey
df96a74f6b feat: sourceset event (#4660)
Trigger a sourceset event whenever the source is set in the Html5 tech, including initial source. We override the video element's src and setAttribute methods so that we can trigger the sourceset event when people change the src with both the video element and our API methods.
The event object for sourceset will contain the src string that was provided at the time the sourceset was triggered. This is mostly important if a source is being set while a tech is changing.
A Tech has a featuresSourceset option that it can set to for sourceset handling. It can then call the helper triggerSourceset(src) to trigger the sourceset.
2018-03-07 14:28:37 -05:00
mister-ben
f03ac5e9b5 fix: do not patch canplaytype on android chrome (#4885)
Patching canPlayType on Android shouldn't be necessary on Android Chrome since it reports its ability to player HLS correctly.
2018-01-30 11:20:33 -05:00
Gary Katsevman
409a13e1f6 fix(html5): loop video el attributes in order (#4805)
Due to historical issues, we loops the settings attributes like muted
and autoplay in reverse order but we want to loop them in order.
2017-12-13 14:49:02 -05:00
Gary Katsevman
2da7af1137 perf: null out els on dispose to minimize detached els (#4745)
A we retained a lot of references to DOM elements in various components. Here we clear it up. Also, make sure that we remove unused listeners as they can retain objects as well.
Update evented mixin to null out the eventBusEl_ after the component is disposed.
Add a feature for components, to tell it not to auto-initialize the evented mixin.
Re-enable the tests that were removed in #4640.
2017-11-16 11:19:47 -05:00