ffmpeg-stream-manager
Version:
🎥 A powerful TypeScript library for managing multiple simultaneous RTMP streams using FFmpeg. Perfect for streaming to platforms like YouTube Live, Twitch, and others.
142 lines • 4.27 kB
TypeScript
import { EventEmitter } from 'events';
import { StreamConfig, StreamStatus, StreamUpdate, StreamManagerOptions, FFmpegLog, YouTubeRTMPConfig } from './types';
export interface StreamManagerEvents {
'stream-started': (streamId: string) => void;
'stream-stopped': (streamId: string) => void;
'stream-error': (streamId: string, error: Error) => void;
'stream-restarted': (streamId: string) => void;
'log': (log: FFmpegLog) => void;
}
export declare class FFmpegStreamManager extends EventEmitter {
private streams;
private options;
constructor(options?: StreamManagerOptions);
on<K extends keyof StreamManagerEvents>(event: K, listener: StreamManagerEvents[K]): this;
emit<K extends keyof StreamManagerEvents>(event: K, ...args: Parameters<StreamManagerEvents[K]>): boolean;
/**
* Start a new stream with the given configuration
*/
startStream(config: Omit<StreamConfig, 'id'>): Promise<string>;
/**
* Start a stream for YouTube Live
*/
startYouTubeStream(config: Omit<StreamConfig, 'id' | 'rtmpUrl'>, youtubeConfig: YouTubeRTMPConfig): Promise<string>;
/**
* Stop a stream by ID
*/
stopStream(streamId: string): Promise<void>;
/**
* Restart a stream by ID
*/
restartStream(streamId: string): Promise<void>;
/**
* Update stream configuration (stream must be stopped)
*/
updateStreamConfig(streamId: string, updates: StreamUpdate): void;
/**
* Get status of a specific stream
*/
getStreamStatus(streamId: string): StreamStatus;
/**
* Get status of all streams
*/
getAllStreamStatuses(): StreamStatus[];
/**
* Get list of active stream IDs
*/
getActiveStreamIds(): string[];
/**
* Get total number of streams
*/
getStreamCount(): number;
/**
* Check if a stream exists
*/
hasStream(streamId: string): boolean;
/**
* Stop all streams
*/
stopAllStreams(): Promise<void>;
/**
* Get default configurations for common use cases
*/
static getDefaultConfigs(): {
youTube1080p: {
videoConfig: {
width: number;
height: number;
bitrate: string;
framerate: number;
codec: string;
profile: string;
level: string;
};
audioConfig: {
codec: string;
bitrate: string;
sampleRate: number;
channels: number;
};
presetConfig: {
preset: string;
tune: string;
bufsize: string;
maxrate: string;
};
};
youTube720p: {
videoConfig: {
width: number;
height: number;
bitrate: string;
framerate: number;
codec: string;
profile: string;
level: string;
};
audioConfig: {
codec: string;
bitrate: string;
sampleRate: number;
channels: number;
};
presetConfig: {
preset: string;
tune: string;
bufsize: string;
maxrate: string;
};
};
youTube480p: {
videoConfig: {
width: number;
height: number;
bitrate: string;
framerate: number;
codec: string;
profile: string;
level: string;
};
audioConfig: {
codec: string;
bitrate: string;
sampleRate: number;
channels: number;
};
presetConfig: {
preset: string;
tune: string;
bufsize: string;
maxrate: string;
};
};
};
private setupStreamHandlers;
private shouldLogLevel;
private log;
/**
* Cleanup all resources
*/
destroy(): Promise<void>;
}
//# sourceMappingURL=ffmpeg-stream-manager.d.ts.map