diff --git a/README.md b/README.md index ff407912e..6fe65da8d 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ let art = new Artplayer({ | [artplayer-plugin-danmuku-mask](https://artplayer.org/?libs=./uncompiled/artplayer-plugin-danmuku/index.js%0A./uncompiled/artplayer-plugin-danmuku-mask/index.js&example=danmuku.mask) | Danmuku masking (smart blocking) |
| | [artplayer-plugin-asr](https://artplayer.org/?libs=./uncompiled/artplayer-plugin-asr/index.js&example=asr) | Automatic Speech Recognition |
| | [artplayer-plugin-ads](https://artplayer.org/?libs=./uncompiled/artplayer-plugin-ads/index.js&example=ads) | Video advertising plugin | WIP | +| [artplayer-plugin-websr](https://artplayer.org/?libs=./uncompiled/artplayer-plugin-websr/index.js&example=websr) | AI video upscaling with WebGPU |
| ## Libraries diff --git a/docs/assets/example/websr.js b/docs/assets/example/websr.js new file mode 100644 index 000000000..a8cea5b0d --- /dev/null +++ b/docs/assets/example/websr.js @@ -0,0 +1,16 @@ +// npm i artplayer-plugin-websr +// import artplayerPluginWebsr from 'artplayer-plugin-websr'; + +var art = new Artplayer({ + container: ".artplayer-app", + url: "/assets/sample/video3.mp4", + fullscreenWeb: true, + plugins: [ + artplayerPluginWebsr({ + scale: 2, + compare: true, + weights: "/assets/websr/cnn-2x-m-an.json", + networkName: "anime4k/cnn-2x-m", + }), + ], +}); diff --git a/docs/assets/js/common.js b/docs/assets/js/common.js index aa9f61ac7..f0d258a8d 100644 --- a/docs/assets/js/common.js +++ b/docs/assets/js/common.js @@ -51,25 +51,26 @@ }) let libUris = [ - './assets/ts/artplayer-plugin-ads.d.ts', - './assets/ts/artplayer-plugin-ambilight.d.ts', - './assets/ts/artplayer-plugin-asr.d.ts', - './assets/ts/artplayer-plugin-audio-track.d.ts', - './assets/ts/artplayer-plugin-auto-thumbnail.d.ts', - './assets/ts/artplayer-plugin-chapter.d.ts', - './assets/ts/artplayer-plugin-chromecast.d.ts', - './assets/ts/artplayer-plugin-danmuku-mask.d.ts', - './assets/ts/artplayer-plugin-danmuku.d.ts', - './assets/ts/artplayer-plugin-dash-control.d.ts', - './assets/ts/artplayer-plugin-document-pip.d.ts', - './assets/ts/artplayer-plugin-hls-control.d.ts', - './assets/ts/artplayer-plugin-iframe.d.ts', - './assets/ts/artplayer-plugin-jassub.d.ts', - './assets/ts/artplayer-plugin-multiple-subtitles.d.ts', - './assets/ts/artplayer-plugin-vast.d.ts', - './assets/ts/artplayer-plugin-vtt-thumbnail.d.ts', - './assets/ts/artplayer-proxy-canvas.d.ts', - './assets/ts/artplayer-proxy-mediabunny.d.ts', + './assets/ts/packages\artplayer-plugin-ads\types\artplayer-plugin-ads.d.ts', + './assets/ts/packages\artplayer-plugin-ambilight\types\artplayer-plugin-ambilight.d.ts', + './assets/ts/packages\artplayer-plugin-asr\types\artplayer-plugin-asr.d.ts', + './assets/ts/packages\artplayer-plugin-audio-track\types\artplayer-plugin-audio-track.d.ts', + './assets/ts/packages\artplayer-plugin-auto-thumbnail\types\artplayer-plugin-auto-thumbnail.d.ts', + './assets/ts/packages\artplayer-plugin-chapter\types\artplayer-plugin-chapter.d.ts', + './assets/ts/packages\artplayer-plugin-chromecast\types\artplayer-plugin-chromecast.d.ts', + './assets/ts/packages\artplayer-plugin-danmuku-mask\types\artplayer-plugin-danmuku-mask.d.ts', + './assets/ts/packages\artplayer-plugin-danmuku\types\artplayer-plugin-danmuku.d.ts', + './assets/ts/packages\artplayer-plugin-dash-control\types\artplayer-plugin-dash-control.d.ts', + './assets/ts/packages\artplayer-plugin-document-pip\types\artplayer-plugin-document-pip.d.ts', + './assets/ts/packages\artplayer-plugin-hls-control\types\artplayer-plugin-hls-control.d.ts', + './assets/ts/packages\artplayer-plugin-iframe\types\artplayer-plugin-iframe.d.ts', + './assets/ts/packages\artplayer-plugin-jassub\types\artplayer-plugin-jassub.d.ts', + './assets/ts/packages\artplayer-plugin-multiple-subtitles\types\artplayer-plugin-multiple-subtitles.d.ts', + './assets/ts/packages\artplayer-plugin-vast\types\artplayer-plugin-vast.d.ts', + './assets/ts/packages\artplayer-plugin-vtt-thumbnail\types\artplayer-plugin-vtt-thumbnail.d.ts', + './assets/ts/packages\artplayer-plugin-websr\types\artplayer-plugin-websr.d.ts', + './assets/ts/packages\artplayer-proxy-canvas\types\artplayer-proxy-canvas.d.ts', + './assets/ts/packages\artplayer-proxy-mediabunny\types\artplayer-proxy-mediabunny.d.ts', './assets/ts/artplayer.d.ts', ] diff --git a/docs/assets/sample/video3.mp4 b/docs/assets/sample/video3.mp4 new file mode 100644 index 000000000..aef731692 Binary files /dev/null and b/docs/assets/sample/video3.mp4 differ diff --git a/docs/assets/ts/packages/artplayer-plugin-ads/types/artplayer-plugin-ads.d.ts b/docs/assets/ts/packages/artplayer-plugin-ads/types/artplayer-plugin-ads.d.ts new file mode 100644 index 000000000..ef42e2d59 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-ads/types/artplayer-plugin-ads.d.ts @@ -0,0 +1,52 @@ +interface Option { + /** + * 广告源文本,支持视频链接、图片链接、HTML文本 + */ + source: string + + /** + * 知名广告的类型:'video' | 'image' | 'html' + */ + type: 'video' | 'image' | 'html' + + /** + * 广告必看的时长,单位为秒 + */ + playDuration?: number + + /** + * 广告总的时长,单位为秒 + */ + totalDuration?: number + + /** + * 视频广告是否默认静音 + */ + muted?: boolean +} + +interface Ads { + name: 'artplayerPluginAds' + + /** + * 跳过广告 + */ + skip: () => void + + /** + * 暂停广告 + */ + pause: () => void + + /** + * 播放广告 + */ + play: () => void +} + +declare const artplayerPluginAds: (option: Option) => (art: Artplayer) => Ads + +export default artplayerPluginAds + +export = packages\artplayerPluginAds\types\artplayerPluginAds; +export as namespace packages\artplayerPluginAds\types\artplayerPluginAds; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-ambilight/types/artplayer-plugin-ambilight.d.ts b/docs/assets/ts/packages/artplayer-plugin-ambilight/types/artplayer-plugin-ambilight.d.ts new file mode 100644 index 000000000..5a8e214fd --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-ambilight/types/artplayer-plugin-ambilight.d.ts @@ -0,0 +1,20 @@ +interface Option { + blur?: string + opacity?: number + frequency?: number + zIndex?: number + duration?: number +} + +interface Result { + name: 'artplayerPluginAmbilight' + start: () => void + stop: () => void +} + +declare const artplayerPluginAmbilight: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginAmbilight + +export = packages\artplayerPluginAmbilight\types\artplayerPluginAmbilight; +export as namespace packages\artplayerPluginAmbilight\types\artplayerPluginAmbilight; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-asr/types/artplayer-plugin-asr.d.ts b/docs/assets/ts/packages/artplayer-plugin-asr/types/artplayer-plugin-asr.d.ts new file mode 100644 index 000000000..a080639fd --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-asr/types/artplayer-plugin-asr.d.ts @@ -0,0 +1,26 @@ +interface AudioChunk { + pcm: ArrayBuffer + wav: ArrayBuffer +} + +interface AsrPluginOption { + length?: number + interval?: number + sampleRate?: number + autoHideTimeout?: number + onAudioChunk?: (chunk: AudioChunk) => void | Promise +} + +interface AsrPluginInstance { + name: 'artplayerPluginAsr' + stop: () => void + hide: () => void + append: (subtitle: string) => void +} + +declare function artplayerPluginAsr(option?: AsrPluginOption): (art: Artplayer) => AsrPluginInstance + +export default artplayerPluginAsr + +export = packages\artplayerPluginAsr\types\artplayerPluginAsr; +export as namespace packages\artplayerPluginAsr\types\artplayerPluginAsr; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-audio-track/types/artplayer-plugin-audio-track.d.ts b/docs/assets/ts/packages/artplayer-plugin-audio-track/types/artplayer-plugin-audio-track.d.ts new file mode 100644 index 000000000..e7ca50117 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-audio-track/types/artplayer-plugin-audio-track.d.ts @@ -0,0 +1,40 @@ +interface Option { + /** + * Audio track URL + */ + url: string + + /** + * Time offset in seconds between video and audio + * Positive value means audio plays ahead of video + * Negative value means audio plays behind video + * @default 0 + */ + offset?: number + + /** + * Synchronization threshold in seconds + * @default 0.3 + */ + sync?: number +} + +interface Result { + name: 'artplayerPluginAudioTrack' + /** + * The audio element + */ + audio: HTMLAudioElement + + /** + * Update option + */ + update: (option: Option) => void +} + +declare const artplayerPluginAudioTrack: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginAudioTrack + +export = packages\artplayerPluginAudioTrack\types\artplayerPluginAudioTrack; +export as namespace packages\artplayerPluginAudioTrack\types\artplayerPluginAudioTrack; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-auto-thumbnail/types/artplayer-plugin-auto-thumbnail.d.ts b/docs/assets/ts/packages/artplayer-plugin-auto-thumbnail/types/artplayer-plugin-auto-thumbnail.d.ts new file mode 100644 index 000000000..b52fe3e8e --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-auto-thumbnail/types/artplayer-plugin-auto-thumbnail.d.ts @@ -0,0 +1,17 @@ +interface Option { + url?: string + width?: number + number?: number + scale?: number +} + +interface Result { + name: 'artplayerPluginAutoThumbnail' +} + +declare const artplayerPluginAutoThumbnail: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginAutoThumbnail + +export = packages\artplayerPluginAutoThumbnail\types\artplayerPluginAutoThumbnail; +export as namespace packages\artplayerPluginAutoThumbnail\types\artplayerPluginAutoThumbnail; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts b/docs/assets/ts/packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts new file mode 100644 index 000000000..40c834635 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-chapter/types/artplayer-plugin-chapter.d.ts @@ -0,0 +1,21 @@ +type Chapters = { + start: number + end: number + title: string +}[] + +interface Option { + chapters?: Chapters +} + +interface Result { + name: 'artplayerPluginChapter' + update: (option: Option) => void +} + +declare const artplayerPluginChapter: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginChapter + +export = packages\artplayerPluginChapter\types\artplayerPluginChapter; +export as namespace packages\artplayerPluginChapter\types\artplayerPluginChapter; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-chromecast/types/artplayer-plugin-chromecast.d.ts b/docs/assets/ts/packages/artplayer-plugin-chromecast/types/artplayer-plugin-chromecast.d.ts new file mode 100644 index 000000000..07b95d502 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-chromecast/types/artplayer-plugin-chromecast.d.ts @@ -0,0 +1,17 @@ +interface Option { + url?: string + sdk?: string + icon?: string + mimeType?: string +} + +interface Chromecast { + name: 'artplayerPluginChromecast' +} + +declare const artplayerPluginChromecast: (option: Option) => (art: Artplayer) => Chromecast + +export default artplayerPluginChromecast + +export = packages\artplayerPluginChromecast\types\artplayerPluginChromecast; +export as namespace packages\artplayerPluginChromecast\types\artplayerPluginChromecast; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-danmuku-mask/types/artplayer-plugin-danmuku-mask.d.ts b/docs/assets/ts/packages/artplayer-plugin-danmuku-mask/types/artplayer-plugin-danmuku-mask.d.ts new file mode 100644 index 000000000..f2e367d1c --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-danmuku-mask/types/artplayer-plugin-danmuku-mask.d.ts @@ -0,0 +1,25 @@ +interface Option { + solutionPath?: string + modelSelection?: number + smoothSegmentation?: boolean + minDetectionConfidence?: number + minTrackingConfidence?: number + selfieMode?: boolean + drawContour?: boolean + foregroundThreshold?: number + opacity?: number + maskBlurAmount?: number +} + +interface Result { + name: 'artplayerPluginDanmukuMask' + start: () => Promise + stop: () => void +} + +declare const artplayerPluginDanmukuMask: (option?: Option) => (art: Artplayer) => Result + +export default artplayerPluginDanmukuMask + +export = packages\artplayerPluginDanmukuMask\types\artplayerPluginDanmukuMask; +export as namespace packages\artplayerPluginDanmukuMask\types\artplayerPluginDanmukuMask; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-danmuku/types/artplayer-plugin-danmuku.d.ts b/docs/assets/ts/packages/artplayer-plugin-danmuku/types/artplayer-plugin-danmuku.d.ts new file mode 100644 index 000000000..d3c62ed2c --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-danmuku/types/artplayer-plugin-danmuku.d.ts @@ -0,0 +1,259 @@ +export type Mode = 0 | 1 | 2 +export type Danmuku + = | Danmu[] + | string // URL + | (() => Promise) + | Promise + +export interface Slider { + min?: number + max?: number + steps?: { + name?: string + value?: number | string + show?: boolean + }[] +} + +export interface Danmu { + /** + * 弹幕文本 + */ + text: string + + /** + * 弹幕发送模式: 0: 滚动,1: 顶部,2: 底部 + */ + mode?: Mode + + /** + * 弹幕颜色 + */ + color?: string + + /** + * 弹幕出现的时间,单位为秒 + */ + time?: number + + /** + * 弹幕是否有描边, 默认为 false + */ + border?: boolean + + /** + * 弹幕自定义样式 + */ + style?: Partial +} + +export interface Option { + /** + * 弹幕数据: 函数,数组,Promise,URL + */ + danmuku: Danmuku + + /** + * 弹幕持续时间,范围在[1 ~ 10] + */ + speed?: number + + /** + * 弹幕上下边距,支持像素数字和百分比 + */ + margin?: [number | `${number}%`, number | `${number}%`] + + /** + * 弹幕透明度,范围在[0 ~ 1] + */ + opacity?: number + + /** + * 默认弹幕颜色,可以被单独弹幕项覆盖 + */ + color?: string + + /** + * 弹幕模式: 0: 滚动,1: 顶部,2: 底部 + */ + mode?: Mode + + /** + * 弹幕可见的模式 + */ + modes?: Mode[] + + /** + * 弹幕字体大小,支持像素数字和百分比 + */ + fontSize?: number | `${number}%` + + /** + * 弹幕是否防重叠 + */ + antiOverlap?: boolean + + /** + * 是否同步播放速度 + */ + synchronousPlayback?: boolean + + /** + * 弹幕发射器挂载点, 默认为播放器控制栏中部 + */ + mount?: HTMLDivElement | string + + /** + * 是否开启弹幕热度图 + */ + heatmap?: + | boolean + | { + xMin?: number + xMax?: number + yMin?: number + yMax?: number + scale?: number + opacity?: number + minHeight?: number + sampling?: number + smoothing?: number + flattening?: number + } + + /** + * 当播放器宽度小于此值时,弹幕发射器置于播放器底部 + */ + width?: number + + /** + * 热力图数据 + */ + points?: { time: number, value: number }[] + + /** + * 弹幕载入前的过滤器,只支持返回布尔值 + */ + filter?: (danmu: Danmu) => boolean + + /** + * 弹幕发送前的过滤器,支持返回 Promise + */ + beforeEmit?: (danmu: Danmu) => boolean | Promise + + /** + * 弹幕显示前的过滤器,支持返回 Promise + */ + beforeVisible?: (danmu: Danmu) => boolean | Promise + + /** + * 弹幕是否可见 + */ + visible?: boolean + + /** + * 是否开启弹幕发射器 + */ + emitter?: boolean + + /** + * 弹幕输入框最大长度, 范围在[1 ~ 1000] + */ + maxLength?: number + + /** + * 输入框锁定时间,范围在[1 ~ 60] + */ + lockTime?: number + + /** + * 弹幕主题,只在自定义挂载时生效 + */ + theme?: 'light' | 'dark' + + /** + * 不透明度配置项 + */ + OPACITY?: Slider + + /** + * 弹幕速度配置项 + */ + SPEED?: Slider + + /** + * 显示区域配置项 + */ + MARGIN?: Slider + + /** + * 弹幕字号配置项 + */ + FONT_SIZE?: Slider + + /** + * 颜色列表配置项 + */ + COLOR?: string[] +} + +export interface Result { + name: 'artplayerPluginDanmuku' + + /** + * 发送一条实时弹幕 + */ + emit: (danmu: Danmu) => Result + + /** + * 重载弹幕源,或者切换新弹幕 + */ + load: (danmuku?: Danmuku) => Promise + + /** + * 实时改变弹幕配置 + */ + config: (option: Option) => Result + + /** + * 隐藏弹幕层 + */ + hide: () => Result + + /** + * 显示弹幕层 + */ + show: () => Result + + /** + * 挂载弹幕输入框 + */ + mount: (el?: HTMLDivElement | string) => void + + /** + * 重置弹幕 + */ + reset: () => Result + + /** + * 弹幕配置 + */ + option: Option + + /** + * 是否隐藏弹幕层 + */ + isHide: boolean + + /** + * 是否弹幕层停止状态 + */ + isStop: boolean +} + +declare const artplayerPluginDanmuku: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginDanmuku + +export = packages\artplayerPluginDanmuku\types\artplayerPluginDanmuku; +export as namespace packages\artplayerPluginDanmuku\types\artplayerPluginDanmuku; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts b/docs/assets/ts/packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts new file mode 100644 index 000000000..8f4e1574c --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-dash-control/types/artplayer-plugin-dash-control.d.ts @@ -0,0 +1,17 @@ +interface Config { + control?: boolean + setting?: boolean + title?: string + auto?: string + getName?: (level: object) => string +} + +declare const artplayerPluginDashControl: (option: { quality?: Config, audio?: Config }) => (art: Artplayer) => { + name: 'artplayerPluginDashControl' + update: () => void +} + +export default artplayerPluginDashControl + +export = packages\artplayerPluginDashControl\types\artplayerPluginDashControl; +export as namespace packages\artplayerPluginDashControl\types\artplayerPluginDashControl; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-document-pip/types/artplayer-plugin-document-pip.d.ts b/docs/assets/ts/packages/artplayer-plugin-document-pip/types/artplayer-plugin-document-pip.d.ts new file mode 100644 index 000000000..bcb7fc5b1 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-document-pip/types/artplayer-plugin-document-pip.d.ts @@ -0,0 +1,22 @@ +interface Option { + width?: number + height?: number + placeholder?: string + fallbackToVideoPiP?: boolean +} + +interface Result { + name: 'artplayerPluginDocumentPip' + isSupported: boolean + isActive: boolean + open: () => void + close: () => void + toggle: () => void +} + +declare const artplayerPluginDocumentPip: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginDocumentPip + +export = packages\artplayerPluginDocumentPip\types\artplayerPluginDocumentPip; +export as namespace packages\artplayerPluginDocumentPip\types\artplayerPluginDocumentPip; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-hls-control/types/artplayer-plugin-hls-control.d.ts b/docs/assets/ts/packages/artplayer-plugin-hls-control/types/artplayer-plugin-hls-control.d.ts new file mode 100644 index 000000000..6d16fe2d3 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-hls-control/types/artplayer-plugin-hls-control.d.ts @@ -0,0 +1,17 @@ +interface Config { + control?: boolean + setting?: boolean + title?: string + auto?: string + getName?: (level: object) => string +} + +declare const artplayerPluginHlsControl: (option: { quality?: Config, audio?: Config }) => (art: Artplayer) => { + name: 'artplayerPluginHlsControl' + update: () => void +} + +export default artplayerPluginHlsControl + +export = packages\artplayerPluginHlsControl\types\artplayerPluginHlsControl; +export as namespace packages\artplayerPluginHlsControl\types\artplayerPluginHlsControl; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-iframe/types/artplayer-plugin-iframe.d.ts b/docs/assets/ts/packages/artplayer-plugin-iframe/types/artplayer-plugin-iframe.d.ts new file mode 100644 index 000000000..78e94018e --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-iframe/types/artplayer-plugin-iframe.d.ts @@ -0,0 +1,32 @@ +interface Message { + type: string + data: any + id?: number +} + +declare class ArtplayerPluginIframe { + constructor(option: { iframe: HTMLIFrameElement, url: string }) + + static iframe: boolean + static postMessage(message: Message): void + static onMessage(event: MessageEvent & { data: Message }): void + static inject(): void + + readonly promises: Record any, reject: (...args: any[]) => any }> + readonly injected: boolean + readonly destroyed: boolean + readonly $iframe: HTMLIFrameElement + readonly url: string + readonly messageCallback: (...args: any[]) => any + + onMessage(event: MessageEvent & { data: Message }): void + postMessage(message: Message): Promise + commit any>(callback: T): Promise> + message(callback: (...args: any[]) => any): void + destroy(): void +} + +export default ArtplayerPluginIframe + +export = packages\artplayerPluginIframe\types\artplayerPluginIframe; +export as namespace packages\artplayerPluginIframe\types\artplayerPluginIframe; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-jassub/types/artplayer-plugin-jassub.d.ts b/docs/assets/ts/packages/artplayer-plugin-jassub/types/artplayer-plugin-jassub.d.ts new file mode 100644 index 000000000..63c8f79d8 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-jassub/types/artplayer-plugin-jassub.d.ts @@ -0,0 +1,38 @@ +export interface JassubOption { + workerUrl: string + wasmUrl: string + modernWasmUrl: string + subUrl?: string + subContent?: string + timeOffset?: number + debug?: boolean + prescaleFactor?: number + prescaleHeightLimit?: number + maxRenderHeight?: number + fonts?: string[] | Uint8Array[] + availableFonts?: Record + fallbackFont?: string + useLocalFonts?: boolean + libassMemoryLimit?: number + libassGlyphLimit?: number + [key: string]: any +} + +export interface JassubInstance { + resize: (force?: boolean, width?: number, height?: number, top?: number, left?: number) => Promise + setVideo: (video: HTMLVideoElement) => Promise + destroy: () => Promise + [key: string]: any +} + +interface Result { + name: 'artplayerPluginJassub' + instance: JassubInstance +} + +declare const artplayerPluginJassub: (option: JassubOption) => (art: Artplayer) => Result + +export default artplayerPluginJassub + +export = packages\artplayerPluginJassub\types\artplayerPluginJassub; +export as namespace packages\artplayerPluginJassub\types\artplayerPluginJassub; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-multiple-subtitles/types/artplayer-plugin-multiple-subtitles.d.ts b/docs/assets/ts/packages/artplayer-plugin-multiple-subtitles/types/artplayer-plugin-multiple-subtitles.d.ts new file mode 100644 index 000000000..c1bd2ac56 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-multiple-subtitles/types/artplayer-plugin-multiple-subtitles.d.ts @@ -0,0 +1,16 @@ +declare const artplayerPluginMultipleSubtitles: (option: { + subtitles: { + url?: string + name?: string + type?: 'vtt' | 'srt' | 'ass' + encoding?: string + onParser?: (...args: object[]) => object + }[] +}) => (art: Artplayer) => { + name: 'multipleSubtitles' +} + +export default artplayerPluginMultipleSubtitles + +export = packages\artplayerPluginMultipleSubtitles\types\artplayerPluginMultipleSubtitles; +export as namespace packages\artplayerPluginMultipleSubtitles\types\artplayerPluginMultipleSubtitles; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-vast/types/artplayer-plugin-vast.d.ts b/docs/assets/ts/packages/artplayer-plugin-vast/types/artplayer-plugin-vast.d.ts new file mode 100644 index 000000000..30eadbe2a --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-vast/types/artplayer-plugin-vast.d.ts @@ -0,0 +1,36 @@ +declare global { + interface Window { + artplayerPluginVast?: typeof artplayerPluginVast + } +} + +type PlayUrlFn = (url: string, config?: any) => void +type PlayResFn = (res: string, config?: any) => void + +interface VastPluginContext { + art: Artplayer + ima: any + imaPlayer: Player | null + playUrl: PlayUrlFn + playRes: PlayResFn + init: () => Player + adsRenderingSettings: any + playerOptions: PlayerOptions + container: HTMLDivElement | null +} + +export type ArtplayerPluginVastOption = (params: VastPluginContext) => void | Promise + +export interface ArtplayerPluginVastInstance { + name: 'artplayerPluginVast' + destroy?: () => void +} + +declare function artplayerPluginVast( + option: ArtplayerPluginVastOption, +): (art: Artplayer) => ArtplayerPluginVastInstance + +export default artplayerPluginVast + +export = packages\artplayerPluginVast\types\artplayerPluginVast; +export as namespace packages\artplayerPluginVast\types\artplayerPluginVast; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-vtt-thumbnail/types/artplayer-plugin-vtt-thumbnail.d.ts b/docs/assets/ts/packages/artplayer-plugin-vtt-thumbnail/types/artplayer-plugin-vtt-thumbnail.d.ts new file mode 100644 index 000000000..ff816fccf --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-vtt-thumbnail/types/artplayer-plugin-vtt-thumbnail.d.ts @@ -0,0 +1,10 @@ +declare const artplayerPluginVttThumbnail: (option: { vtt?: string, style?: Partial }) => ( + art: Artplayer, +) => { + name: 'artplayerPluginVttThumbnail' +} + +export default artplayerPluginVttThumbnail + +export = packages\artplayerPluginVttThumbnail\types\artplayerPluginVttThumbnail; +export as namespace packages\artplayerPluginVttThumbnail\types\artplayerPluginVttThumbnail; \ No newline at end of file diff --git a/docs/assets/ts/packages/artplayer-plugin-websr/types/artplayer-plugin-websr.d.ts b/docs/assets/ts/packages/artplayer-plugin-websr/types/artplayer-plugin-websr.d.ts new file mode 100644 index 000000000..e18cf0696 --- /dev/null +++ b/docs/assets/ts/packages/artplayer-plugin-websr/types/artplayer-plugin-websr.d.ts @@ -0,0 +1,95 @@ +interface Option { + /** + * Upscale factor + * @default 2 + */ + scale?: number; + /** + * Network name for upscaling (required) + * e.g., 'anime4k/cnn-2x-m-an' + */ + networkName: string; + /** + * Weights for the neural network (required) + * Can be a URL string or a pre-loaded weights object + * e.g., '/path/to/weights.json' or { layers: [...] } + */ + weights: string | object; + /** + * Enable comparison mode + * @default false + */ + compare?: boolean; +} + +interface Result { + name: 'artplayerPluginWebsr'; + /** + * Get WebSR instance + */ + websr: () => any; + /** + * Get GPU context + */ + gpu: () => any; + /** + * Get canvas element + */ + canvas: () => HTMLCanvasElement; + /** + * Enable WebSR upscaling + */ + enable: () => Promise; + /** + * Disable WebSR upscaling + */ + disable: () => void; + /** + * Toggle WebSR upscaling + */ + toggle: () => Promise; + /** + * Check if WebSR is enabled + */ + isEnabled: () => boolean; + /** + * Check if WebSR is initialized + */ + isInitialized: () => boolean; + /** + * Update options at runtime + * Supported options: enabled, weights, networkName, scale + */ + update: (option: Partial