@api.video/media-stream-composer
Version:
api.video media stream composer
85 lines (84 loc) • 3.11 kB
TypeScript
import { Options as RecorderOptions, ProgressiveUploaderOptionsWithAccessToken, ProgressiveUploaderOptionsWithUploadToken, VideoUploadResponse } from "@api.video/media-recorder";
import { DrawingSettings } from "./drawing-layer";
import { Resolution } from "./stream-position";
import { StreamDetails, StreamUserOptions } from "./stream/stream";
export { StreamDetails };
export interface Options {
resolution: Resolution;
}
export interface AudioSourceDetails {
id: string;
stream: MediaStream;
}
declare type EventType = "error" | "recordingStopped" | "videoPlayable";
declare global {
interface Window {
AudioContext: AudioContext;
webkitAudioContext: any;
}
interface AudioContext {
createGainNode: any;
}
interface HTMLCanvasElement {
captureStream(frameRate?: number): MediaStream;
}
interface HTMLMediaElement {
_mediaElementSource: any;
}
interface HTMLVideoElement {
playsInline: boolean;
}
}
export type MouseTool = "draw" | "move-resize";
type RecordingOptions = RecorderOptions & (ProgressiveUploaderOptionsWithUploadToken | ProgressiveUploaderOptionsWithAccessToken) & {
timeslice?: number;
};
export declare class MediaStreamComposer {
private result;
private recorder?;
private streams;
private eventTarget;
private fps;
private resolution;
private audioContext?;
private audioDestinationNode?;
private audioDelayNode?;
private canvas?;
private canvasRenderingContext;
private frameCount;
private started;
private mouseTool;
private drawingLayer;
constructor(options: Partial<Options>);
private init;
private _backgroundAudioHack;
getResultStream(): MediaStream | null;
static getSupportedMimeTypes(): string[];
startRecording(options: RecordingOptions): void;
destroy(): void;
addEventListener(type: EventType, callback: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions | undefined): void;
stopRecording(): Promise<VideoUploadResponse>;
updateStream(streamId: string, userOptions: StreamUserOptions): void;
appendCanvasTo(containerQuerySelector: string): void;
removeStream(streamId: string): void;
addAudioSource(mediaStream: MediaStream): string;
removeAudioSource(id: string): void;
addStream(mediaStream: MediaStream | HTMLImageElement, userOptions: StreamUserOptions): Promise<string>;
getCanvas(): HTMLCanvasElement | undefined;
getAudioSources(): AudioSourceDetails[];
getAudioSource(id: string): AudioSourceDetails | undefined;
getStreams(): StreamDetails[];
getStream(id: string): StreamDetails | undefined;
moveUp(streamId: string): void;
moveDown(streamId: string): void;
setMouseTool(tool: MouseTool): void;
setDrawingSettings(settings: Partial<DrawingSettings>): void;
clearDrawing(): void;
private dispatch;
private _draw;
private _requestAnimationFrame;
private _updateAudioDelay;
private onMouseMove;
private onMouseDragEnd;
private onMouseDrag;
}