Skip to content

Commit

Permalink
chore(Format): Clean up and add some extra fields
Browse files Browse the repository at this point in the history
  • Loading branch information
LuanRT committed Jun 16, 2024
1 parent 4cbaa79 commit 67376af
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 65 deletions.
185 changes: 123 additions & 62 deletions src/parser/classes/misc/Format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,61 +6,63 @@ export default class Format {
#this_response_nsig_cache?: Map<string, string>;

itag: number;
mime_type: string;
is_type_otf: boolean;
bitrate: number;
average_bitrate?: number;
width: number;
height: number;
url?: string;
width?: number;
height?: number;
last_modified: Date;
content_length?: number;
quality?: string;
xtags?: string;
drm_families?: string[];
fps?: number;
quality_label?: string;
projection_type?: 'RECTANGULAR' | 'EQUIRECTANGULAR' | 'EQUIRECTANGULAR_THREED_TOP_BOTTOM' | 'MESH';
average_bitrate?: number;
bitrate: number;
spatial_audio_type?: 'AMBISONICS_5_1' | 'AMBISONICS_QUAD' | 'FOA_WITH_NON_DIEGETIC';
target_duration_dec?: number;
fair_play_key_uri?: string;
stereo_layout?: 'LEFT_RIGHT' | 'TOP_BOTTOM';

max_dvr_duration_sec?: number;
high_replication?: boolean;
audio_quality?: string;
approx_duration_ms: number;
audio_sample_rate?: number;
audio_channels?: number;
loudness_db?: number;
signature_cipher?: string;
is_drc?: boolean;
drm_track_type?: string;
distinct_params?: string;
track_absolute_loudness_lkfs?: number;
mime_type: string;
is_type_otf: boolean;
init_range?: {
start: number;
end: number;
};

index_range?: {
start: number;
end: number;
};

last_modified: Date;
content_length?: number;
quality?: string;
quality_label?: string;
fps?: number;
url?: string;
cipher?: string;
signature_cipher?: string;
audio_quality?: string;
audio_track?: {
audio_is_default: boolean;
display_name: string;
id: string;
};
approx_duration_ms: number;
audio_sample_rate?: number;
audio_channels?: number;
loudness_db?: number;
spatial_audio_type?: 'AMBISONICS_5_1' | 'AMBISONICS_QUAD' | 'FOA_WITH_NON_DIEGETIC';
max_dvr_duration_sec?: number;
target_duration_dec?: number;
has_audio: boolean;
has_video: boolean;
has_text: boolean;
language?: string | null;
is_dubbed?: boolean;
is_descriptive?: boolean;
is_original?: boolean;
is_drc?: boolean;

color_info?: {
primaries?: string;
transfer_characteristics?: string;
matrix_coefficients?: string;
};

caption_track?: {
display_name: string;
vss_id: string;
Expand All @@ -79,64 +81,123 @@ export default class Format {
this.is_type_otf = data.type === 'FORMAT_STREAM_TYPE_OTF';
this.bitrate = data.bitrate;
this.average_bitrate = data.averageBitrate;
this.width = data.width;
this.height = data.height;
this.projection_type = data.projectionType;
this.stereo_layout = data.stereoLayout?.replace('STEREO_LAYOUT_', '');

this.init_range = data.initRange ? {
start: parseInt(data.initRange.start),
end: parseInt(data.initRange.end)
} : undefined;
if (Reflect.has(data, 'width') && Reflect.has(data, 'height')) {
this.width = parseInt(data.width);
this.height = parseInt(data.height);
}

if (Reflect.has(data, 'projectionType'))
this.projection_type = data.projectionType;

this.index_range = data.indexRange ? {
start: parseInt(data.indexRange.start),
end: parseInt(data.indexRange.end)
} : undefined;
if (Reflect.has(data, 'stereoLayout'))
this.stereo_layout = data.stereoLayout?.replace('STEREO_LAYOUT_', '');

if (Reflect.has(data, 'initRange'))
this.init_range = {
start: parseInt(data.initRange.start),
end: parseInt(data.initRange.end)
};

if (Reflect.has(data, 'indexRange'))
this.index_range = {
start: parseInt(data.indexRange.start),
end: parseInt(data.indexRange.end)
};

this.last_modified = new Date(Math.floor(parseInt(data.lastModified) / 1000));
this.content_length = parseInt(data.contentLength);
this.quality = data.quality;
this.quality_label = data.qualityLabel;
this.fps = data.fps;
this.url = data.url;
this.cipher = data.cipher;
this.signature_cipher = data.signatureCipher;
this.audio_quality = data.audioQuality;

if (Reflect.has(data, 'contentLength'))
this.content_length = parseInt(data.contentLength);

if (Reflect.has(data, 'quality'))
this.quality = data.quality;

if (Reflect.has(data, 'qualityLabel'))
this.quality_label = data.qualityLabel;

if (Reflect.has(data, 'fps'))
this.fps = data.fps;

if (Reflect.has(data, 'url'))
this.url = data.url;

if (Reflect.has(data, 'cipher'))
this.cipher = data.cipher;

if (Reflect.has(data, 'signatureCipher'))
this.signature_cipher = data.signatureCipher;

if (Reflect.has(data, 'audioQuality'))
this.audio_quality = data.audioQuality;

this.approx_duration_ms = parseInt(data.approxDurationMs);
this.audio_sample_rate = parseInt(data.audioSampleRate);
this.audio_channels = data.audioChannels;
this.loudness_db = data.loudnessDb;
this.spatial_audio_type = data.spatialAudioType?.replace('SPATIAL_AUDIO_TYPE_', '');
this.max_dvr_duration_sec = data.maxDvrDurationSec;
this.target_duration_dec = data.targetDurationSec;

if (Reflect.has(data, 'audioSampleRate'))
this.audio_sample_rate = parseInt(data.audioSampleRate);

if (Reflect.has(data, 'audioChannels'))
this.audio_channels = data.audioChannels;

if (Reflect.has(data, 'loudnessDb'))
this.loudness_db = data.loudnessDb;

if (Reflect.has(data, 'spatialAudioType'))
this.spatial_audio_type = data.spatialAudioType?.replace('SPATIAL_AUDIO_TYPE_', '');

if (Reflect.has(data, 'maxDvrDurationSec'))
this.max_dvr_duration_sec = data.maxDvrDurationSec;

if (Reflect.has(data, 'targetDurationSec'))
this.target_duration_dec = data.targetDurationSec;

this.has_audio = !!data.audioBitrate || !!data.audioQuality;
this.has_video = !!data.qualityLabel;
this.has_text = !!data.captionTrack;

this.color_info = data.colorInfo ? {
primaries: data.colorInfo.primaries?.replace('COLOR_PRIMARIES_', ''),
transfer_characteristics: data.colorInfo.transferCharacteristics?.replace('COLOR_TRANSFER_CHARACTERISTICS_', ''),
matrix_coefficients: data.colorInfo.matrixCoefficients?.replace('COLOR_MATRIX_COEFFICIENTS_', '')
} : undefined;
if (Reflect.has(data, 'xtags'))
this.xtags = data.xtags;

if (Reflect.has(data, 'fairPlayKeyUri'))
this.fair_play_key_uri = data.fairPlayKeyUri;

if (Reflect.has(data, 'audioTrack')) {
if (Reflect.has(data, 'drmFamilies'))
this.drm_families = data.drmFamilies;

if (Reflect.has(data, 'drmTrackType'))
this.drm_track_type = data.drmTrackType;

if (Reflect.has(data, 'distinctParams'))
this.distinct_params = data.distinctParams;

if (Reflect.has(data, 'trackAbsoluteLoudnessLkfs'))
this.track_absolute_loudness_lkfs = data.trackAbsoluteLoudnessLkfs;

if (Reflect.has(data, 'highReplication'))
this.high_replication = data.highReplication;

if (Reflect.has(data, 'colorInfo'))
this.color_info = {
primaries: data.colorInfo.primaries?.replace('COLOR_PRIMARIES_', ''),
transfer_characteristics: data.colorInfo.transferCharacteristics?.replace('COLOR_TRANSFER_CHARACTERISTICS_', ''),
matrix_coefficients: data.colorInfo.matrixCoefficients?.replace('COLOR_MATRIX_COEFFICIENTS_', '')
};

if (Reflect.has(data, 'audioTrack'))
this.audio_track = {
audio_is_default: data.audioTrack.audioIsDefault,
display_name: data.audioTrack.displayName,
id: data.audioTrack.id
};
}

if (Reflect.has(data, 'captionTrack')) {
if (Reflect.has(data, 'captionTrack'))
this.caption_track = {
display_name: data.captionTrack.displayName,
vss_id: data.captionTrack.vssId,
language_code: data.captionTrack.languageCode,
kind: data.captionTrack.kind,
id: data.captionTrack.id
};
}

if (this.has_audio || this.has_text) {
const args = new URLSearchParams(this.cipher || this.signature_cipher);
Expand Down
2 changes: 1 addition & 1 deletion src/utils/FormatUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ export function chooseFormat(options: FormatOptions, streaming_data?: IStreaming
return false;
if (!is_best && format.quality_label !== quality)
return false;
if (best_width < format.width)
if (format.width && (best_width < format.width))
best_width = format.width;
return true;
});
Expand Down
4 changes: 2 additions & 2 deletions src/utils/StreamingInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ export interface VideoSet {
export interface VideoRepresentation {
uid: string;
bitrate: number;
width: number;
height: number;
width?: number;
height?: number;
fps?: number;
codecs?: string;
segment_info: SegmentInfo;
Expand Down

0 comments on commit 67376af

Please sign in to comment.