newpipe-extractor-js
Version:
JavaScript/Node.js port of NewPipeExtractor
151 lines • 4.3 kB
TypeScript
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