@api.video/media-stream-composer
Version:
api.video media stream composer
108 lines (107 loc) • 3.02 kB
TypeScript
import { DragEvent } from "../mouse-event-listener";
import { Position, Resolution, StreamMask, StreamPosition, StreamPositionType } from "../stream-position";
interface StreamAudio {
audioSource?: MediaStreamAudioSourceNode;
audioOutput?: GainNode;
}
interface StreamDisplaySettings {
displayResolution: Resolution;
streamResolution: Resolution;
position: Position;
radius?: number;
}
type StreamType = "AUDIO" | "VIDEO";
export interface StreamOptions {
name?: string;
position: StreamPosition;
draggable: boolean;
resizable: boolean;
mask: StreamMask;
mute: boolean;
hidden: boolean;
opacity: number;
index: number;
onClick?: (streamId: string, event: {
x: number;
y: number;
}) => void;
}
export interface StreamDetails {
type: StreamType;
id: string;
options: StreamOptions;
displaySettings?: StreamDisplaySettings;
stream?: MediaStream;
streamVideo?: CanvasImageSource;
streamAudio?: StreamAudio;
}
interface BanubaEffect {
clientToken: string;
moduleUrls?: string[];
effectUrl?: string;
}
export interface StreamUserOptions {
name?: string;
position?: StreamPositionType;
x?: number;
y?: number;
width?: number;
height?: number;
draggable?: boolean;
resizable?: boolean;
mask?: StreamMask;
index?: number;
mute?: boolean;
hidden?: boolean;
opacity?: number;
onClick?: (streamId: string, event: {
x: number;
y: number;
}) => void;
banubaEffect?: BanubaEffect;
}
export declare class Stream {
private static lastStreamId;
private id;
private name?;
private position;
private draggable;
private resizable;
private mask;
private mute;
private hidden;
private opacity;
private onClick?;
private mediaStream?;
private videoElement?;
private streamAudio?;
private type;
private displaySettings?;
private containerResolution;
private audioDelayNode;
constructor(type: StreamType, audioDelayNode: DelayNode, containerResolution: Resolution);
load(mediaStream: MediaStream | CanvasImageSource, audioContext: AudioContext, options: StreamUserOptions): Promise<void>;
private createBanubaEffect;
getId(): string;
updateOptions(userOptions: StreamUserOptions): {
streamResolution: {
width: number;
height: number;
};
displayResolution: Resolution;
position: Position;
radius?: number | undefined;
} | undefined;
destroy(): void;
getDisplaySettings(): StreamDisplaySettings | undefined;
getStreamDetails(): StreamDetails;
updatePosition(position: StreamPosition): void;
draw(canvasRenderingContext: CanvasRenderingContext2D): void;
hasDisplay(): boolean;
onMouseDrag(e: DragEvent): void;
private onMouseResize;
private updateDisplaySettings;
private createStreamVideoElement;
private createStreamAudioElement;
}
export {};