refactor(mediabunny): [PKG-MB-04] isolate typed playback and readiness coordination

This commit is contained in:
Harvey Zhao committed 2026-09-12 19:00:21 +08:00
1 parent 9af253a5a9
commit 5d0b128483
29 files changed
+2841 -726

No files matched your search

@@ -0,0 +1,60 @@
import type { Input } from 'mediabunny'
import type { ProxyOptions } from './engine-types'
import type EventTarget from './EventTarget'
import type { PlaybackMedia } from './media'
export interface AudioPort {
readonly currentTime: number
duration: number
paused: boolean
load: (media: PlaybackMedia, metadata?: () => void) => Promise<void>
play: () => Promise<void>
pause: () => void
seek: (time: number) => Promise<void>
setVolume: (volume: number, muted: boolean) => void
setPlaybackRate: (rate: number) => void
handleNoAudioTrack: () => void
destroy: () => void
}
export interface VideoPort {
width: number
height: number
duration: number
preflight: (source: unknown, signal?: AbortSignal, current?: () => boolean) => Promise<boolean>
load: (media: PlaybackMedia, metadata?: () => void) => Promise<void>
start: (clock: AudioPort) => void
stop: () => void
seek: (time: number) => Promise<void>
setPlaybackRate: (rate: number) => void
handleNoVideoTrack: () => void
destroy: () => void
}
export interface VideoOptions {
canvas: HTMLCanvasElement
ctx: CanvasRenderingContext2D | null
events: EventTarget
timeupdateInterval: number
avSyncTolerance: number
dropLateFrames: boolean
poster: string
preflightRange: boolean
}
export interface PlaybackHost {
audio: AudioPort
video: VideoPort
events: EventTarget
readonly destroyed: boolean
readonly loadSeq: number
paused: boolean
ended: boolean
seeking: boolean
readyState: number
networkState: number
media: PlaybackMedia | null
input: Input | null
option: ProxyOptions
reportError: (error: unknown) => void
}