UNPKG

newpipe-extractor-js

Version:
151 lines 4.3 kB
import { AudioStream, VideoStream } from '../types'; import { CodecParseResult } from './CodecUtils'; /** * Format sorting preferences configuration */ export interface FormatSorterConfig { preferHighQuality?: boolean; preferHighFramerate?: boolean; preferHDR?: boolean; preferModernCodecs?: boolean; preferredVideoCodecs?: string[]; preferredAudioCodecs?: string[]; preferredContainers?: string[]; preferUnencrypted?: boolean; preferDash?: boolean; preferProgressive?: boolean; preferredLanguages?: string[]; targetPlatform?: 'web' | 'mobile' | 'desktop' | 'smart_tv'; customSortFields?: string[]; } /** * Extended stream info for sorting */ interface ExtendedStreamInfo { stream: AudioStream | VideoStream; codecInfo: CodecParseResult; qualityScore: number; codecScore: number; containerScore: number; hdrScore: number; encryptionPenalty: number; platformCompatibility: number; languageScore: number; totalScore: number; } /** * Advanced Format Sorter class based on yt-dlp methodology */ export declare class FormatSorter { private config; private static readonly CODEC_RANKINGS; private static readonly CONTAINER_RANKINGS; constructor(config?: FormatSorterConfig); /** * Sort audio streams by quality and preferences */ sortAudioStreams(streams: AudioStream[]): AudioStream[]; /** * Sort video streams by quality and preferences */ sortVideoStreams(streams: VideoStream[]): VideoStream[]; /** * Get the best audio stream based on quality analysis */ getBestAudioStream(streams: AudioStream[]): AudioStream | null; /** * Get the best video stream based on quality analysis */ getBestVideoStream(streams: VideoStream[]): VideoStream | null; /** * Analyze audio stream and calculate comprehensive scores */ private analyzeAudioStream; /** * Analyze video stream and calculate comprehensive scores */ private analyzeVideoStream; /** * Extract codec information from stream */ private getCodecInfo; /** * Calculate audio quality score based on bitrate, sample rate, etc. */ private calculateAudioQualityScore; /** * Calculate video quality score based on resolution, bitrate, fps, etc. */ private calculateVideoQualityScore; /** * Calculate codec quality score */ private calculateCodecScore; /** * Calculate container format score */ private calculateContainerScore; /** * Calculate HDR bonus score */ private calculateHDRScore; /** * Calculate encryption penalty */ private calculateEncryptionPenalty; /** * Calculate platform compatibility score */ private calculatePlatformCompatibility; /** * Calculate language preference score */ private calculateLanguageScore; /** * Check web browser compatibility */ private isWebCompatible; /** * Check mobile device compatibility */ private isMobileCompatible; /** * Check smart TV compatibility */ private isSmartTVCompatible; /** * Get detailed format analysis for debugging */ getFormatAnalysis(stream: AudioStream | VideoStream): ExtendedStreamInfo; /** * Update sorting configuration */ updateConfig(newConfig: Partial<FormatSorterConfig>): void; /** * Get current configuration */ getConfig(): FormatSorterConfig; } /** * Create a format sorter with predefined configurations for common use cases */ export declare class FormatSorterPresets { /** * High quality preset - prefer best codecs and highest quality */ static createHighQualityPreset(): FormatSorter; /** * Web compatibility preset - prefer formats that work well in browsers */ static createWebCompatibilityPreset(): FormatSorter; /** * Mobile preset - prefer formats that work well on mobile devices */ static createMobilePreset(): FormatSorter; /** * Bandwidth optimized preset - prefer smaller file sizes */ static createBandwidthOptimizedPreset(): FormatSorter; } export {}; //# sourceMappingURL=FormatSorter.d.ts.map