mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-29 11:53:52 +02:00
Add language getter to InputTrack
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
colorSpaceIsComplete,
|
||||
IDENTITY_MATRIX,
|
||||
rotationMatrix,
|
||||
UNDETERMINED_LANGUAGE,
|
||||
} from '../misc';
|
||||
import {
|
||||
AudioCodec,
|
||||
@@ -429,7 +430,7 @@ export const mdhd = (
|
||||
const u32OrU64 = needsU64 ? u64 : u32;
|
||||
|
||||
let language = 0;
|
||||
for (const character of (trackData.track.metadata.languageCode ?? 'und')) {
|
||||
for (const character of (trackData.track.metadata.languageCode ?? UNDETERMINED_LANGUAGE)) {
|
||||
language <<= 5;
|
||||
language += character.charCodeAt(0) - 0x60;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import {
|
||||
last,
|
||||
AsyncMutex,
|
||||
findLastIndex,
|
||||
UNDETERMINED_LANGUAGE,
|
||||
} from '../misc';
|
||||
import { Reader } from '../reader';
|
||||
import { EncodedAudioSample, EncodedVideoSample, PLACEHOLDER_DATA, SampleType } from '../sample';
|
||||
@@ -47,6 +48,7 @@ type InternalTrack = {
|
||||
durationInMovieTimescale: number;
|
||||
durationInMediaTimescale: number;
|
||||
rotation: Rotation;
|
||||
languageCode: string;
|
||||
sampleTableByteOffset: number;
|
||||
sampleTable: SampleTable | null;
|
||||
fragmentLookupTable: FragmentLookupTableEntry[] | null;
|
||||
@@ -557,6 +559,7 @@ export class IsobmffDemuxer extends Demuxer {
|
||||
durationInMovieTimescale: -1,
|
||||
durationInMediaTimescale: -1,
|
||||
rotation: 0,
|
||||
languageCode: UNDETERMINED_LANGUAGE,
|
||||
sampleTableByteOffset: -1,
|
||||
sampleTable: null,
|
||||
fragmentLookupTable: null,
|
||||
@@ -642,6 +645,17 @@ export class IsobmffDemuxer extends Demuxer {
|
||||
track.timescale = this.isobmffReader.readU32();
|
||||
track.durationInMediaTimescale = this.isobmffReader.readU64();
|
||||
}
|
||||
|
||||
let language = this.isobmffReader.readU16();
|
||||
|
||||
if (language > 0) {
|
||||
track.languageCode = '';
|
||||
|
||||
for (let i = 0; i < 3; i++) {
|
||||
track.languageCode = String.fromCharCode(0x60 + (language & 0b11111)) + track.languageCode;
|
||||
language >>= 5;
|
||||
}
|
||||
}
|
||||
}; break;
|
||||
|
||||
case 'hdlr': {
|
||||
@@ -1689,6 +1703,10 @@ abstract class IsobmffTrackBacking<
|
||||
return (lastSample?.timestamp ?? 0) + (lastSample?.duration ?? 0);
|
||||
}
|
||||
|
||||
async getLanguageCode() {
|
||||
return this.internalTrack.languageCode;
|
||||
}
|
||||
|
||||
async getFirstTimestamp() {
|
||||
const firstSample = await this.getFirstSample({ metadataOnly: true });
|
||||
return firstSample?.timestamp ?? 0;
|
||||
|
||||
Reference in New Issue
Block a user