Commit Graph
2234 Commits
Author SHA1 Message Date
Harvey Zhao 9c07ea830c refactor(audio): [PKG-AUDIO-03] separate track ownership and native lifecycle 2026-09-12 02:22:13 +08:00
Harvey Zhao 26b2983daf test(hls): [PKG-HLS-SDK-01] checkpoint unresolved Firefox diagnostics 2026-09-12 01:42:47 +08:00
Harvey Zhao 2f9bee4ee0 refactor(hls): [PKG-HLS-04] migrate modules and compatible types 2026-09-12 00:49:50 +08:00
Harvey Zhao ba93b98be5 refactor(hls): [PKG-HLS-03] separate menus and SDK lifecycle 2026-09-12 00:18:19 +08:00
Harvey Zhao adec20213f refactor(core): [CORE-22] validate compatible core and defer initial layout 2026-09-11 23:18:12 +08:00
Harvey Zhao 4a9a26d4fc test: [ENG-08] add verified TS coverage and paired performance reports 2026-09-11 22:01:48 +08:00
Harvey Zhao 8ed0a5228c refactor(core): [CORE-23] complete keyboard controls and focus lifecycle 2026-09-11 21:06:33 +08:00
Harvey Zhao faaa3e8c2d refactor(core): [CORE-21] generate compatible public and editor declarations 2026-09-11 17:56:05 +08:00
Harvey Zhao ee895a558f refactor(core): [CORE-20] type entry and converge initialization 2026-09-11 16:07:06 +08:00
Harvey Zhao ccf77c4ed2 refactor(core): CORE-19 type capture and preserve progress lifetimes 2026-09-11 14:24:59 +08:00
Harvey Zhao 98a1800032 refactor(core): CORE-18 type builtins and own prompt lifetimes 2026-09-11 12:31:01 +08:00
Harvey Zhao a842058136 refactor(core): CORE-17 type input events and own interaction lifetimes 2026-09-11 11:24:15 +08:00
Harvey Zhao 88aef830df refactor(core): CORE-16 type display modes and own fullscreen lifetimes 2026-09-11 09:42:30 +08:00
Harvey Zhao 1b83081e8f refactor(core): CORE-15 type subtitles and own request and track lifetimes 2026-09-11 07:23:10 +08:00
Harvey Zhao 64d1939daa refactor(core): CORE-14 split typed settings and scope tree lifetimes 2026-09-11 06:49:04 +08:00
Harvey Zhao 697817eceb refactor(core): CORE-13 type component registries and own control lifetimes 2026-09-11 04:54:32 +08:00
Harvey Zhao 9eb7c945ca refactor(core): CORE-12 type template resources and verify bundled notices 2026-09-11 03:50:33 +08:00
Harvey Zhao b8039ad1f1 refactor(core): CORE-11 split media events and scope reconnect lifetimes 2026-09-11 03:19:52 +08:00
Harvey Zhao 5e31274f1d refactor(core): CORE-10 type playback properties and add compatible controls view 2026-09-11 02:51:55 +08:00
Harvey Zhao 44f4e083a9 refactor(core): CORE-09 isolate source operations and settle cancelled switches 2026-09-11 02:34:26 +08:00
Harvey Zhao 874dac9f22 refactor(core): CORE-08 type plugin registration and guard closed instances 2026-09-11 02:09:36 +08:00
Harvey Zhao f9707bad71 refactor(types): CORE-07 reconcile public declarations and preserve legacy consumers 2026-09-11 01:42:32 +08:00
Harvey Zhao ee859e4804 refactor(core): CORE-06 type media surfaces and playback hosts 2026-09-11 01:18:14 +08:00
Harvey Zhao 97d320bd74 refactor(core): CORE-05 separate typed defaults and resolved options 2026-09-11 01:00:15 +08:00
Harvey Zhao 4eec8112fa refactor(core): CORE-04 scope initialization and make destruction reentrant-safe 2026-09-11 00:43:49 +08:00
Harvey Zhao 3e38dd0d19 refactor(core): CORE-03 add typed resource scopes and cleanup adapters 2026-09-11 00:21:32 +08:00
Harvey Zhao 362c616998 refactor(core): CORE-02 type emitter maps and fix nested once dispatch 2026-09-11 00:03:53 +08:00
Harvey Zhao d3c695024a refactor(core): CORE-01 migrate utility contracts to TypeScript 2026-09-10 23:50:47 +08:00
Harvey Zhao bab80ff886 fix(types): PKG-CHAPTER-04 preserve CJS ESM and legacy consumer contracts 2026-09-10 23:29:06 +08:00
Harvey Zhao 48660c4e12 refactor(chapter): PKG-CHAPTER-03 split runtime into typed lifecycle and view modules 2026-09-10 23:12:56 +08:00
Harvey Zhao a0286c4e95 test(packages): ENG-07 verify installed tarball contracts and browsers 2026-09-10 23:04:19 +08:00
Harvey Zhao 12b047f9a6 test(chapter): PKG-CHAPTER-02 cover behavior and optional factory types 2026-09-10 22:43:01 +08:00
Harvey Zhao 771482426f build(types): ENG-04 add strict projects and legacy compiler checks 2026-09-10 21:21:39 +08:00
Harvey Zhao bb82f899ff Merge pull request #1061 from Mister-Hope/feat/dashjs-v5
feat(artplayer-plugin-dash-control)!: support dash.js v5
2026-09-10 17:19:00 +08:00
Harvey Zhao 59d3c9f50c fix(dash-control): select stable representation IDs 2026-09-10 17:17:54 +08:00
Harvey Zhao 37cbb6f600 Merge pull request #1058 from acaliskol/fix/unhandled-play-rejection
fix: silence unhandled play() rejections from internal callers
2026-09-10 17:06:52 +08:00
Harvey Zhao 72cf3551e2 fix: align promise helper types and test playback rejections 2026-09-10 17:03:07 +08:00
Mr.Hope cb69e4ad66 feat(artplayer-plugin-dash-control)!: support dash.js v5
- replace removed v4 APIs with their v5 equivalents:
  getRepresentationsByType / getCurrentRepresentationForType /
  setRepresentationForTypeByIndex
- bump dash.js CDN references from 4.5.2 to 5.2.1 (modern/umd build)
- rebuild dist, docs/compiled and docs/uncompiled artifacts
- regenerate vitepress docs
2026-09-10 15:58:17 +08:00
Harvey Zhao 42c4ca735d Update version.js 2026-08-31 16:59:25 +08:00
Anıl Çalışkol 0f47e11d63 fix: silence unhandled play() rejections from internal callers
`art.play()` is an async wrapper around the native `video.play()` promise, which
rejects when a pending play request is interrupted (`pause()`, `load()`, a new
`src`, or the element being removed) and when autoplay is blocked.

Every internal caller fires it from an event handler and cannot await it, so the
rejection escapes as a global `unhandledrejection`. Error trackers report it as
an uncaught crash even though the player recovers on its own — for example
destroying the player right after mount, which is routine when the video sits in
a modal the user can close quickly.

Add a `silencePromise` util (the same approach video.js uses) and apply it to the
non-awaited internal call sites: mask, play control, mini player, loop restart,
autoPlayback jump, hotkey and click toggles.

`switchMix` is fixed too, for a second symptom: `await art.play()` inside the
async `video:canplay` handler both leaked the rejection and left the `switchUrl`
promise pending forever, since the throw never reached the enclosing executor's
`reject`. It now settles.

The public API is unchanged: `art.play()` and `art.toggle()` still return the
original promise, so applications that call them keep their own rejection to
handle. Only the internal, non-awaited copy is silenced.
2026-08-30 16:31:40 +03:00
wuhua111 0b9c31a8cf fix(types): correct notice.show getter return type (#1055)
The notice.show getter was declared as boolean while the setter accepts string, Error or false. TypeScript uses the getter return type when checking property assignment, causing TS2322 when assigning a string to notice.show.
2026-08-28 17:52:07 +08:00
Harvey Zhao 014b21566c feat: expose Artplayer globally in the browser environment
- Added assignment of Artplayer to the window object in both dist and src files to allow global access.
2026-07-13 12:34:21 +08:00
Meta42 4c7d0aa9fa fix: audio pump starvation on large files with audio (#1041)
Root causes fixed:
1. Remove starvation check that suspends AudioContext — it freezes the
   video clock and causes playback to stall permanently
2. Add backpressure (1s BUFFER_AHEAD) to prevent audio pump from decoding
   unbounded buffers, starving the video decoder
3. Add setTimeout(0) yield between batches so video rAF callbacks can run
4. Batch audio buffer reads (16 per iteration) to reduce IPC overhead
5. Fix latestScheduledEndTime time-domain: use media-time (same domain as
   currentTime) instead of AudioContext-time, so backpressure check works
   correctly after seeking

Without these fixes, playing a large file (9+ GB) with audio causes:
- Audio pump decodes hundreds of buffers in 1 second (195s of audio decoded
  in 1s wall clock)
- Main thread blocked by 177 IPC calls/sec from audio iterator
- Video frames never render (rAF starved)
- After seek: backpressure never triggers due to time-domain mismatch,
  causing persistent stutter and eventual silence
2026-06-07 09:18:04 +08:00
Harvey Zhao 26841c5b1c feat: enable fullscreenWeb option in Artplayer configuration
feat: add danmuku plugin and i18n setup documentation

- Introduced a new danmuku plugin with multiple run code options in the documentation.
- Added language settings documentation for i18n, including default languages, import instructions, and examples for adding and modifying languages.
- Implemented input handling for media sources in the artplayer-proxy-mediabunny package, supporting various formats including HLS.
- Created m3u8 control functionalities for managing audio and video quality settings in the player.

Update mediabunny.js
2026-05-04 13:22:32 +08:00
Harvey Zhao 23c8f46878 feat: add bun installation command to documentation 2026-04-04 10:35:07 +08:00
Harvey Zhao 7e0b84ba7c fix: adjust percentage calculation for current time in setCurrentTime function 2026-04-01 12:49:43 +08:00
Harvey Zhao 6aa6f9ad53 feat: add danmuku plugin documentation and i18n setup guide
- Created a new documentation file for the danmuku plugin with code examples.
- Added a comprehensive guide for language settings (i18n) including default languages, importing languages, adding new languages, and modifying existing languages.
- Included code snippets for initializing the Artplayer with different language settings.

feat: implement safe area insets for improved video rotation handling

feat: add console log for safe area insets in autoOrientation plugin

feat: enhance mobile meta tags for better web app support
2026-04-01 12:24:38 +08:00
Harvey Zhao 6c79148da5 feat: add jassub worker scripts and WASM files for subtitle processing 2026-03-16 21:25:51 +08:00
Harvey Zhao 65e51751cd feat: add danmuku plugin and i18n setup documentation
- Created a new documentation file for the danmuku plugin with code examples.
- Added a new documentation file for language settings (i18n) with detailed instructions on language imports, default languages, and how to add or modify languages.
- Included code snippets for initializing the Artplayer with different language settings.
2026-03-12 22:23:44 +08:00
Harvey Zhao 740ac4cb24 Refactor styles in ArtPlayer components for improved readability and consistency
- Consolidated loading styles in loading.less for better structure.
- Updated mask styles in mask.less to enhance clarity.
- Refined mini popup styles in mini.less, adding transition effects.
- Improved mixins in mixins.less for consistent styling across components.
- Adjusted mobile styles in mobile.less for better responsiveness.
- Enhanced notice styles in notice.less for improved visibility.
- Streamlined plugin styles in plugins.less for better organization.
- Simplified poster styles in poster.less for clarity.
- Refined progress styles in progress.less, enhancing hover effects.
- Updated selector styles in selector.less for better interaction.
- Improved settings styles in setting.less for better usability.
- Enhanced subtitle styles in subtitle.less for better visibility.
- Updated variable definitions in variables.less for consistency.
- Refined video styles in video.less for improved layout.
- Enhanced volume control styles in volume.less for better user experience.
- Optimized rate limiting logic in build-llm.js and trans-docs.js for better performance.
2026-03-08 15:03:43 +08:00