import type Room from '../../Room'; import type { Track } from '../Track'; /** * @experimental */ export type ProcessorOptions = { kind: T; track: MediaStreamTrack; element?: HTMLMediaElement; audioContext?: AudioContext; }; export interface AudioProcessorOptions extends ProcessorOptions { audioContext: AudioContext; } /** * @experimental */ export interface VideoProcessorOptions extends ProcessorOptions {} export interface TrackProcessor< T extends Track.Kind, U extends ProcessorOptions = ProcessorOptions, > { name: string; init: (opts: U) => Promise; restart: (opts: U) => Promise; destroy: () => Promise; processedTrack?: MediaStreamTrack; onPublish?: (room: Room) => Promise; onUnpublish?: () => Promise; }