import Subject from '../../rx/Subject'; import { VideoCodec } from '../decode/bitstream/codec/VideoCodec'; import { AudioCodec } from '../decode/bitstream/codec/AudioCodec'; import { IStreamTrackTransform } from '../transformation/StreamTrackTransform'; import { IEncodedStreamSink } from '../transformation/EncodedStreamSink'; import TransformMessageRouter from '../transformation/worker/MessageRouter'; export type StreamTransformContextOptions = { hasInsertableStreams: boolean; hasEncodedInsertableStreams: boolean; videoStreamTransformCallback: IStreamTrackTransform | undefined; audioStreamTransformCallback: IStreamTrackTransform | undefined; encodedVideoStreamSink: IEncodedStreamSink | undefined; encodedAudioStreamSink: IEncodedStreamSink | undefined; }; export type StreamTransformContextTrack = { mediaStreamTrack: MediaStreamTrack | null; receiver: RTCRtpReceiver | null; mid: string | null; codec: VideoCodec | AudioCodec | null; transformPipelineWorker: Worker | null; transformMessageRouter: TransformMessageRouter | null; transformFunctionNames: string[]; }; export default class StreamTransformContext { readonly hasInsertableStreams: Subject; readonly hasEncodedInsertableStreams: Subject; readonly videoStreamTransformCallback: IStreamTrackTransform | undefined; readonly audioStreamTransformCallback: IStreamTrackTransform | undefined; readonly encodedVideoStreamSink: IEncodedStreamSink | undefined; readonly encodedAudioStreamSink: IEncodedStreamSink | undefined; readonly audioTrack: StreamTransformContextTrack; readonly videoTrack: StreamTransformContextTrack; constructor(options: StreamTransformContextOptions); }