Skip to content
This repository was archived by the owner on May 16, 2024. It is now read-only.

upstream merge#12

Open
hannojg wants to merge 1441 commits intocuvent:masterfrom
TheWidlarzGroup:master
Open

upstream merge#12
hannojg wants to merge 1441 commits intocuvent:masterfrom
TheWidlarzGroup:master

Conversation

@hannojg
Copy link
Copy Markdown

@hannojg hannojg commented May 24, 2021

No description provided.

fnwk and others added 30 commits January 13, 2026 22:26
* fix: external subtitle asset composition

* fix: filter for supported subtitles before adding them
* fix(ios): prevent KVO crash in HybridVideoPlayer.release()

Fix a crash that occurs when rapidly creating/destroying video players
(e.g., fast swiping through a FlatList of videos). The crash message is:
"Cannot remove an observer for the key path 'currentItem.status'"

Root cause:
When release() was called, it would set playerItem = nil and then
playerObserver = nil, which triggered the observer's deinit. However,
the KVO observers were still registered on the playerItem, causing
a crash when the system tried to remove them.

Solution:
1. Explicitly invalidate all KVO observers BEFORE changing any state
2. Change invalidatePlayerItemObservers() from private to internal
   so it can be called from HybridVideoPlayer.release()
3. Skip self.player.replaceCurrentItem(with: nil) which was also
   triggering the crash by changing currentItem while observers
   were still active

This ensures clean KVO removal before any state changes that could
interfere with the observer lifecycle.

* refactor: address review feedback - clean up comments and reorganize release()

- Remove verbose KVO CRASH FIX comments
- Move observer invalidation calls to "Clear player observer" section
- Restore replaceCurrentItem(with: nil) after observer cleanup

* refactor: reorder cleaners

---------

Co-authored-by: Eran Kaufman <eran@sefirot.io>
Co-authored-by: Kamil Moskała <91079590+moskalakamil@users.noreply.github.com>
* docs: refactor tabs

* docs: update video-view docs

* docs: lowercase tabs

* feat(docs): add downloading section

* chore: add chapters example video

* docs: update sidebar type

* docs: update tab heading

* docs: add title to fundaments

* docs: lowercase plugin

* docs(sidebar): remove link to offline sdk

* docs: add `ads` tab

* chore: add `build` to eslint ignore

* docs: remove theme mermaid

* refactor: update deploy values

* chore: upper case tabs

* refactor: update configuration tabs name

* feat: add `ask for plugin` tab

* refactor: update analytics tab

* docs: update player class tip

* docs: make chapters paid

* docs: update utm's

* docs(downloading): update intro

* chore: bump `docusaurus-ui` package to 0.1.2

* fix: update paths

* docs: update dashes

* docs: update downloading events example imports

* docs: update readme

* docs: update case

* refactor: update intro & offer
* fix: update observer thread

* fix(ios): fix showNotificationControls not working when set during initialization

* fix(ios): set custom metadata on AVPlayerItem for now playing info

* refactor: warn when wront artwork url

* docs: update file header

* chore: warn when failed to load artwork image
…4852)

* fix(ios): restore inline UI after PIP stop to prevent black screen

* fix: restore pip when view is attached
* fix: fixed audio focus change on ios

* Fix formatting for audio session category options

---------

Co-authored-by: Kamil Moskała <91079590+moskalakamil@users.noreply.github.com>
* fix(ios): load artwork asynchronously to unblock notification controls

* fix(ios): remove playback observer on player removal and guard artwork callback

* fix: cleaning up player

* refactor: `if` syntax

* fix: add missing cleaner

* fix: remove `rounded` from current time

* chore: update pod versions

* refactor(ios): use targeted update functions at each call site

* refactor(ios): use async/await to load artwork metadata

* fix(ios): update static now playing info after setting external metadata

* fix: find new player before updating playback state

* fix(ios): take over notification controls when registering an already-playing player

* fix(ios): clear stale artwork and guard against item change in async artwork load

* fix: guard notification controls updates against stale player item

* fix: update playback duration periodically to handle streams with initially unknown duration
* fix(ios): stabilize NowPlaying controls

* fix(ios): dispatch NowPlaying update to main thread (#4862)

* docs: remove comment (#4863)

* rename player with `_`
* fix: video in fullscreen freezing after swiping

* fix(ios): use optional chainin
* chore: Upgrade to Nitro 0.35.0

* Replace `bigint` with `UInt64`

* chore: Regenerate specs now for Nitro 0.35.0

* fix: Use Int64 as it can be -1

* Remove unnecessary patches

* fix: change duration type to number

* fix: avoid mutating VideoInformation fields after init

* chore: regenerate specs with new duration type

* fix: use Double for duration in VideoInformation

* docs: react-native-nitro-modules version

* chore: update react-native-nitro-modules version (rnv & drm)

---------

Co-authored-by: fnwk <filip.wnek200@gmail.com>
* chore(nitro): update generated files

* feat: implement disableAudioSessionManagement for IOS
* docs(seo): add meta titles, descriptions and keywords to all pages

* docs(seo): configure sitemap, metadata, JSON-LD and enable llms.txt

* docs(seo): improve homepage title and description

* docs(seo): add robots.txt with AI crawler rules

* docs(geo): add curated llms.txt for AI discoverability

* docs: fix typo baners → banners

* docs(geo): generate llms.txt via plugin instead of static file
* docs(seo): add meta titles, descriptions and keywords to all pages

* docs(seo): configure sitemap, metadata, JSON-LD and enable llms.txt

* docs(seo): improve homepage title and description

* docs(seo): add robots.txt with AI crawler rules

* docs(geo): add curated llms.txt for AI discoverability

* docs: fix typo baners → banners

* docs(geo): generate llms.txt via plugin instead of static file

* docs(seo): refine meta titles, sidebar labels and descriptions
* Add shaka as an optional dependency and fix their type

* Scaffold web

* Implement VideoView for web

* Implement html video properties using headless video

* Implement event handlers for web

* Map source

* Fix package lock

* Some cleanup

* Fix typescript issues

* Fix event listeners `this`

* Rework everything to use videojs instead of shaka

* Handle media sessions

* Add optional `mimeType` string in source object

* Add error handling for the web

* Fix media session for web

* Add audio track support

* Add video track handling on web

* Add quality selector

* Handle text track change event

* Add text track handling

* Fix typescript

* Fix native compilation due to double/long mismatch

* fix(web): fix naming and typos

Rename WebEventEmiter→WebEventEmitter, ViewViewProps→VideoViewProps.
Fix field/comment typos and update all imports.

* fix(web): critical runtime fixes

Fix BigInt(NaN), player.src(undefined), codeMap fallback, videoWidth,
quality guard, listener leaks, vid.style, window.videojs, MediaSession SSR.

* fix(web): bridge onError to consumers and fix __destroy cleanup

* refactor(web): extract WebTrackHandler and shared video.js types

* feat(web): add supportedFeatures and __DEV__ warnings for unsupported methods

* chore: split tsconfig into web & default

* refactor(web): split events by platform and isolate DOM types

* chore: remove audio/video track and quality APIs from both platforms

* feat(web): migrate from video.js v8 to v10 (@videojs/react)

* fix(web): proper store attach order and video element fallback

* fix(web): fix container warning and store lifecycle

* feat(example): web

* refactor(web): move events to folder, fix error codes

* refactor: remove dead code

* fix(web): resize mode

* refactor(web): add preload type

* refactor(web): extract VideoStore type, simplify player with media getter

* chore: remove .editorconfig and shell.nix

* style: normalize quotes to single in non-web files

* fix(web): use WeakRef for store to prevent DESTROYED errors on re-render

* fix(web): fullscreen targets container, guard double enable, remove unused mimeType

* feat(web): add experimental audio/video track APIs with WebVideoPlayer type

* docs: add web support page

* fix(web): types

* fix(web): overlay radius

* fix: lint errors, add missing VideoPlayerBase members, fix eslint for web files

* docs: update web docs

* docs: fix broken links in web support page

* fix(web): add WebError type with proper HTML5 MediaError code mapping

* refactor: extract WebMediaProxy for unified store/video access

* lint: code

* docs(web): update event note

* fix(web): bufferAhead

* refactor: events logic

* feat: implement missins no-op fn on web

* fix(web): types

* fix(android): duration in seconds

* fix(web): notification controls race condition

* docs(web-support): update seo

---------

Co-authored-by: Kamil Moskała <moskalakamil07@gmail.com>
Co-authored-by: Kamil Moskała <91079590+moskalakamil@users.noreply.github.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.