UNPKG

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
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