Handle missing starting key sample in ISOBMFF

This commit is contained in:
Vanilagy
2025-08-12 09:29:57 +02:00
parent c9dcebed6f
commit e0a4169bf8
2 changed files with 15 additions and 9 deletions
+9 -9
View File
@@ -8,15 +8,6 @@
document.body.append(fileInput);
fileInput.addEventListener('change', async () => {
const videoUrl = "https://upload.wikimedia.org/wikipedia/commons/5/53/1941._%D0%9A%D0%BE%D0%BD%D1%91%D0%BA-%D0%B3%D0%BE%D1%80%D0%B1%D1%83%D0%BD%D0%BE%D0%BA.webm"
const source = new Mediabunny.UrlSource(videoUrl)
const input = new Mediabunny.Input({ formats: Mediabunny.ALL_FORMATS, source });
const videoTrack = await input.getPrimaryVideoTrack();
console.log(videoTrack);
/*
const file = fileInput.files[0];
const source = new Mediabunny.BlobSource(file);
@@ -25,6 +16,15 @@
source
});
const videoTrack = await input.getPrimaryVideoTrack();
const sink = new Mediabunny.EncodedPacketSink(videoTrack);
for await (const packet of sink.packets(undefined, undefined, { verifyKeyPackets: false })) {
console.log(packet);
if (packet.timestamp >= 2.4) break;
}
/*
const audioTrack = await input.getPrimaryAudioTrack();
const sink = new Mediabunny.EncodedPacketSink(audioTrack);
+6
View File
@@ -1459,6 +1459,12 @@ export class IsobmffDemuxer extends Demuxer {
const sampleIndex = this.metadataReader.readU32() - 1; // Convert to 0-indexed
track.sampleTable.keySampleIndices.push(sampleIndex);
}
if (track.sampleTable.keySampleIndices[0] !== 0) {
// Some files don't mark the first sample a key sample, which is basically almost always incorrect.
// Here, we correct for that mistake:
track.sampleTable.keySampleIndices.unshift(0);
}
}; break;
case 'stsc': {