frameflow
Version:
Audio/Video stream processing library for JavaScript world
106 lines (105 loc) • 3.39 kB
TypeScript
import { Decoder, Encoder, Frame, Packet } from './codecs';
import { ModuleType as FF, FFmpegModule, StdVector, StreamInfo } from './types/ffmpeg';
import { ChunkData, SourceInstance, TargetInstance, WriteChunkData } from "./types/graph";
export declare const vec2Array: <T>(vec: StdVector<T>) => T[];
export declare function getFFmpeg(): FFmpegModule;
declare class OutputIO {
#private;
get offset(): number;
write(data: ChunkData): void;
seek(pos: number): void;
pullOutputs(): WriteChunkData[];
}
/**
* Lazy loading Filterer, create on the fly. It dynamically accept frames with types.
*/
declare class Filterer {
filterer?: FF['Filterer'];
buffers: Frame[];
src2args: {
[k in string]?: string;
};
sink2args: {
[k in string]?: string;
};
mediaTypes: {
[k in string]?: 'audio' | 'video';
};
spec: string;
constructor(inputs: string[], outputs: string[], mediaTypes: Filterer['mediaTypes'], spec: string);
filter(frames: Frame[]): Promise<Frame[]>;
flush(): Frame[];
createFilterer(): void;
close(): void;
}
/**
* pushInputs (nodeId) -> Reader -> frames (streamId) -> Writer -> pullOutputs (nodeId)
*/
export declare type SourceReader = VideoSourceReader | FrameSourceReader;
export declare type TargetWriter = VideoTargetWriter | FrameTargetWriter;
declare class VideoSourceReader {
#private;
node: SourceInstance;
demuxer: FF['Demuxer'];
decoders: {
[streamIndex in number]?: Decoder;
};
constructor(node: SourceInstance, demuxer: FF['Demuxer'], decorders: VideoSourceReader['decoders']);
get inputEnd(): boolean;
get currentTime(): number;
get progress(): number | null;
readPacket(): Promise<Packet>;
readFrames(): Promise<Frame[]>;
close(): void;
}
declare class FrameSourceReader {
#private;
node: SourceInstance;
count: number;
fps: number;
streamInfo: StreamInfo;
decoder?: Decoder;
Packet: FFmpegModule['Packet'];
constructor(node: SourceInstance, streamInfo: StreamInfo, useWebCodecs?: boolean);
get inputEnd(): boolean;
get currentTime(): number;
get progress(): null;
readFrames(): Promise<Frame[]>;
close(): void;
}
declare class VideoTargetWriter {
#private;
node: TargetInstance;
encoders: {
[streamId: string]: Encoder;
};
targetStreamIndexes: {
[streamId: string]: number;
};
muxer: FF['Muxer'];
firstWrite: boolean;
dataFilterers: {
[streamId: string]: Filterer | undefined | null;
};
constructor(node: TargetInstance, muxer: FF['Muxer'], encoders: VideoTargetWriter['encoders'], outputIO: OutputIO, targetStreamIndexes: VideoTargetWriter['targetStreamIndexes']);
writePacket(pkt: Packet, streamId: string): void;
/**
* @param frames last writing when frames=undefined
*/
writeFrames(frames: Frame[]): Promise<void>;
dataFormatFilter(frame: Frame): Promise<Frame>;
writeEnd(): Promise<void>;
pullOutputs(): WriteChunkData[];
close(): void;
}
declare class FrameTargetWriter {
#private;
node: TargetInstance;
encoder: Encoder;
constructor(node: TargetInstance, streamInfo: StreamInfo);
writeFrames(frames: Frame[]): Promise<void>;
writeEnd(): Promise<void>;
pullOutputs(): WriteChunkData[];
close(): void;
}
export {};