mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-03 22:03:49 +02:00
Merge main into release for tag v1.39.2
This commit is contained in:
+1
-1
@@ -189,7 +189,7 @@
|
|||||||
},
|
},
|
||||||
trim: {
|
trim: {
|
||||||
//start: 0,
|
//start: 0,
|
||||||
//end: 10
|
end: 10
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
console.log(conversion);
|
console.log(conversion);
|
||||||
|
|||||||
+5
-1
@@ -21,7 +21,11 @@
|
|||||||
const sink = new Mediabunny.EncodedPacketSink(videoTrack);
|
const sink = new Mediabunny.EncodedPacketSink(videoTrack);
|
||||||
|
|
||||||
for await (const packet of sink.packets()) {
|
for await (const packet of sink.packets()) {
|
||||||
console.log(packet.timestamp);
|
console.log(packet.type, packet.timestamp);
|
||||||
|
|
||||||
|
if (packet.timestamp >= 5) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Generated
+9
-9
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "mediabunny",
|
"name": "mediabunny",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "mediabunny",
|
"name": "mediabunny",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
@@ -7751,9 +7751,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mediabunny": {
|
"node_modules/mediabunny": {
|
||||||
"version": "1.39.0",
|
"version": "1.39.1",
|
||||||
"resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.39.0.tgz",
|
"resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.39.1.tgz",
|
||||||
"integrity": "sha512-NDeht2Sf7kYfrUu7b/9AhVK4KdQhy6UeTF/EPNXW+PdpIYvSv36ZQ/SRBoFAJN2LRl6XrGb8JYY4MCnhsGQ2yg==",
|
"integrity": "sha512-gaQKDWtfLhgSN9tRj37lgznHf9MOvey7sbT6GdQA7mWl1kaE5R+P1lfl9CDsgtzongx12IG9X/y2vgZmTHzGDg==",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"peer": true,
|
"peer": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
@@ -12077,7 +12077,7 @@
|
|||||||
},
|
},
|
||||||
"packages/aac-encoder": {
|
"packages/aac-encoder": {
|
||||||
"name": "@mediabunny/aac-encoder",
|
"name": "@mediabunny/aac-encoder",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/emscripten": "^1.40.1"
|
"@types/emscripten": "^1.40.1"
|
||||||
@@ -12092,7 +12092,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ac3": {
|
"packages/ac3": {
|
||||||
"name": "@mediabunny/ac3",
|
"name": "@mediabunny/ac3",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/emscripten": "^1.40.1"
|
"@types/emscripten": "^1.40.1"
|
||||||
@@ -12107,7 +12107,7 @@
|
|||||||
},
|
},
|
||||||
"packages/flac-encoder": {
|
"packages/flac-encoder": {
|
||||||
"name": "@mediabunny/flac-encoder",
|
"name": "@mediabunny/flac-encoder",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/emscripten": "^1.40.1"
|
"@types/emscripten": "^1.40.1"
|
||||||
@@ -12122,7 +12122,7 @@
|
|||||||
},
|
},
|
||||||
"packages/mp3-encoder": {
|
"packages/mp3-encoder": {
|
||||||
"name": "@mediabunny/mp3-encoder",
|
"name": "@mediabunny/mp3-encoder",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/emscripten": "^1.40.1"
|
"@types/emscripten": "^1.40.1"
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "mediabunny",
|
"name": "mediabunny",
|
||||||
"author": "Vanilagy",
|
"author": "Vanilagy",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.",
|
"description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@mediabunny/aac-encoder",
|
"name": "@mediabunny/aac-encoder",
|
||||||
"author": "Vanilagy",
|
"author": "Vanilagy",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"description": "AAC encoder extension for Mediabunny, based on FFmpeg.",
|
"description": "AAC encoder extension for Mediabunny, based on FFmpeg.",
|
||||||
"main": "./dist/bundles/mediabunny-aac-encoder.mjs",
|
"main": "./dist/bundles/mediabunny-aac-encoder.mjs",
|
||||||
"module": "./dist/bundles/mediabunny-aac-encoder.mjs",
|
"module": "./dist/bundles/mediabunny-aac-encoder.mjs",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@mediabunny/ac3",
|
"name": "@mediabunny/ac3",
|
||||||
"author": "Vanilagy",
|
"author": "Vanilagy",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"description": "AC-3 and E-AC-3 (Dolby Digital) decoder and encoder extension for Mediabunny, based on FFmpeg.",
|
"description": "AC-3 and E-AC-3 (Dolby Digital) decoder and encoder extension for Mediabunny, based on FFmpeg.",
|
||||||
"main": "./dist/bundles/mediabunny-ac3.mjs",
|
"main": "./dist/bundles/mediabunny-ac3.mjs",
|
||||||
"module": "./dist/bundles/mediabunny-ac3.mjs",
|
"module": "./dist/bundles/mediabunny-ac3.mjs",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@mediabunny/flac-encoder",
|
"name": "@mediabunny/flac-encoder",
|
||||||
"author": "Vanilagy",
|
"author": "Vanilagy",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"description": "FLAC encoder extension for Mediabunny, based on libFLAC.",
|
"description": "FLAC encoder extension for Mediabunny, based on libFLAC.",
|
||||||
"main": "./dist/bundles/mediabunny-flac-encoder.mjs",
|
"main": "./dist/bundles/mediabunny-flac-encoder.mjs",
|
||||||
"module": "./dist/bundles/mediabunny-flac-encoder.mjs",
|
"module": "./dist/bundles/mediabunny-flac-encoder.mjs",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@mediabunny/mp3-encoder",
|
"name": "@mediabunny/mp3-encoder",
|
||||||
"author": "Vanilagy",
|
"author": "Vanilagy",
|
||||||
"version": "1.39.1",
|
"version": "1.39.2",
|
||||||
"description": "MP3 encoder extension for Mediabunny, based on LAME.",
|
"description": "MP3 encoder extension for Mediabunny, based on LAME.",
|
||||||
"main": "./dist/bundles/mediabunny-mp3-encoder.mjs",
|
"main": "./dist/bundles/mediabunny-mp3-encoder.mjs",
|
||||||
"module": "./dist/bundles/mediabunny-mp3-encoder.mjs",
|
"module": "./dist/bundles/mediabunny-mp3-encoder.mjs",
|
||||||
|
|||||||
+1
-1
@@ -530,7 +530,7 @@ export class MpegTsInputFormat extends InputFormat {
|
|||||||
} else if (bytes[0] === 0x47 && bytes[TS_PACKET_SIZE + 16] === 0x47) {
|
} else if (bytes[0] === 0x47 && bytes[TS_PACKET_SIZE + 16] === 0x47) {
|
||||||
// MPEG-TS with Forward Error Correction
|
// MPEG-TS with Forward Error Correction
|
||||||
return true;
|
return true;
|
||||||
} else if (bytes[4] === 0x47 && bytes[4 + TS_PACKET_SIZE] === 0x47) {
|
} else if (bytes[4] === 0x47 && bytes[4 + TS_PACKET_SIZE + 4] === 0x47) {
|
||||||
// MPEG-2-TS (DVHS)
|
// MPEG-2-TS (DVHS)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,10 +161,10 @@ export class MpegTsDemuxer extends Demuxer {
|
|||||||
// MPEG-TS with Forward Error Correction
|
// MPEG-TS with Forward Error Correction
|
||||||
this.packetOffset = 0;
|
this.packetOffset = 0;
|
||||||
this.packetStride = TS_PACKET_SIZE + 16;
|
this.packetStride = TS_PACKET_SIZE + 16;
|
||||||
} else if (startingBytes[4] === 0x47 && startingBytes[4 + TS_PACKET_SIZE] === 0x47) {
|
} else if (startingBytes[4] === 0x47 && startingBytes[4 + TS_PACKET_SIZE + 4] === 0x47) {
|
||||||
// MPEG-2-TS (DVHS)
|
// MPEG-2-TS (DVHS)
|
||||||
this.packetOffset = 4;
|
this.packetOffset = 4;
|
||||||
this.packetStride = TS_PACKET_SIZE;
|
this.packetStride = TS_PACKET_SIZE + 4;
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Unreachable.');
|
throw new Error('Unreachable.');
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-11
@@ -46,12 +46,16 @@ export abstract class Muxer {
|
|||||||
|
|
||||||
private trackTimestampInfo = new WeakMap<OutputTrack, {
|
private trackTimestampInfo = new WeakMap<OutputTrack, {
|
||||||
maxTimestamp: number;
|
maxTimestamp: number;
|
||||||
maxTimestampBeforeLastKeyPacket: number;
|
maxTimestampBeforeLastKeyPacket: number | null;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
protected validateAndNormalizeTimestamp(track: OutputTrack, timestampInSeconds: number, isKeyPacket: boolean) {
|
protected validateAndNormalizeTimestamp(track: OutputTrack, timestampInSeconds: number, isKeyPacket: boolean) {
|
||||||
timestampInSeconds += track.source._timestampOffset;
|
timestampInSeconds += track.source._timestampOffset;
|
||||||
|
|
||||||
|
if (timestampInSeconds < 0) {
|
||||||
|
throw new Error(`Timestamps must be non-negative (got ${timestampInSeconds}s).`);
|
||||||
|
}
|
||||||
|
|
||||||
let timestampInfo = this.trackTimestampInfo.get(track);
|
let timestampInfo = this.trackTimestampInfo.get(track);
|
||||||
if (!timestampInfo) {
|
if (!timestampInfo) {
|
||||||
if (!isKeyPacket) {
|
if (!isKeyPacket) {
|
||||||
@@ -60,28 +64,27 @@ export abstract class Muxer {
|
|||||||
|
|
||||||
timestampInfo = {
|
timestampInfo = {
|
||||||
maxTimestamp: timestampInSeconds,
|
maxTimestamp: timestampInSeconds,
|
||||||
maxTimestampBeforeLastKeyPacket: timestampInSeconds,
|
maxTimestampBeforeLastKeyPacket: null,
|
||||||
};
|
};
|
||||||
this.trackTimestampInfo.set(track, timestampInfo);
|
this.trackTimestampInfo.set(track, timestampInfo);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
if (timestampInSeconds < 0) {
|
|
||||||
throw new Error(`Timestamps must be non-negative (got ${timestampInSeconds}s).`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isKeyPacket) {
|
if (isKeyPacket) {
|
||||||
timestampInfo.maxTimestampBeforeLastKeyPacket = timestampInfo.maxTimestamp;
|
timestampInfo.maxTimestampBeforeLastKeyPacket = timestampInfo.maxTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timestampInSeconds < timestampInfo.maxTimestampBeforeLastKeyPacket) {
|
if (
|
||||||
|
timestampInfo.maxTimestampBeforeLastKeyPacket !== null
|
||||||
|
&& timestampInSeconds < timestampInfo.maxTimestampBeforeLastKeyPacket
|
||||||
|
) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a key`
|
`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a`
|
||||||
+ ` packet and ends right before the next key packet). Got ${timestampInSeconds}s, but largest`
|
+ ` key packet and ends right before the next key packet). Got ${timestampInSeconds}s, but largest`
|
||||||
+ ` timestamp is ${timestampInfo.maxTimestampBeforeLastKeyPacket}s.`,
|
+ ` timestamp is ${timestampInfo.maxTimestampBeforeLastKeyPacket}s.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
timestampInfo.maxTimestamp = Math.max(timestampInfo.maxTimestamp, timestampInSeconds);
|
timestampInfo.maxTimestamp = Math.max(timestampInfo.maxTimestamp, timestampInSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
return timestampInSeconds;
|
return timestampInSeconds;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user