Merge main into release for tag v1.7.3

This commit is contained in:
github-actions[bot]
2025-08-12 13:37:09 +00:00
6 changed files with 36 additions and 34 deletions
+4 -4
View File
@@ -24,7 +24,7 @@
chunked: true, chunked: true,
chunkSize: 2**20 chunkSize: 2**20
}); });
const outputFormat = new Mediabunny.Mp4OutputFormat({}); const outputFormat = new Mediabunny.Mp3OutputFormat({});
const button = document.createElement('button'); const button = document.createElement('button');
button.textContent = 'Cancel'; button.textContent = 'Cancel';
@@ -41,7 +41,7 @@
target target
}), }),
audio: { audio: {
discard: true, //discard: true,
//codec: 'opus', //codec: 'opus',
//bitrate: 128000, //bitrate: 128000,
//numberOfChannels: 1, //numberOfChannels: 1,
@@ -94,8 +94,8 @@
//height: 100, //height: 100,
}), }),
trim: { trim: {
start: 0, //start: 0,
end: 20 //end: 20
}, },
}); });
console.log(conversion); console.log(conversion);
+2
View File
@@ -123,6 +123,7 @@ const sampleSource = new VideoSampleSource({
}); });
await sampleSource.add(videoSample); await sampleSource.add(videoSample);
videoSample.close(); // If it's not needed anymore
// You may optionally force samples to be encoded as key frames: // You may optionally force samples to be encoded as key frames:
await sampleSource.add(videoSample, { keyFrame: true }); await sampleSource.add(videoSample, { keyFrame: true });
@@ -285,6 +286,7 @@ const sampleSource = new AudioSampleSource({
}); });
await sampleSource.add(audioSample); await sampleSource.add(audioSample);
audioSample.close(); // If it's not needed anymore
``` ```
### `AudioBufferSource` ### `AudioBufferSource`
+6 -6
View File
@@ -1,12 +1,12 @@
{ {
"name": "mediabunny", "name": "mediabunny",
"version": "1.7.2", "version": "1.7.3",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "mediabunny", "name": "mediabunny",
"version": "1.7.2", "version": "1.7.3",
"license": "MPL-2.0", "license": "MPL-2.0",
"workspaces": [ "workspaces": [
"packages/*" "packages/*"
@@ -5900,9 +5900,9 @@
} }
}, },
"node_modules/mediabunny": { "node_modules/mediabunny": {
"version": "1.7.1", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.7.1.tgz", "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.7.2.tgz",
"integrity": "sha512-y9s+Vf6TLhXeVjvlJFSmHRrwUQi2CJCMhxthm6nfhBO1XHJhcOqNOxu4CjhYyjoWgVZB5pkPKyWgZxpPOZfglQ==", "integrity": "sha512-M84Ice7IR1OpWmmDoUh691Hjpf+w2UTt+VWUH0WkiF5MdfFZ63OAF2TmOhbAEVZyvQ088xlvmaT01t00Qgy/QA==",
"license": "MPL-2.0", "license": "MPL-2.0",
"peer": true, "peer": true,
"workspaces": [ "workspaces": [
@@ -9017,7 +9017,7 @@
}, },
"packages/mp3-encoder": { "packages/mp3-encoder": {
"name": "@mediabunny/mp3-encoder", "name": "@mediabunny/mp3-encoder",
"version": "1.7.2", "version": "1.7.3",
"license": "MPL-2.0", "license": "MPL-2.0",
"devDependencies": { "devDependencies": {
"@types/emscripten": "^1.40.1" "@types/emscripten": "^1.40.1"
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "mediabunny", "name": "mediabunny",
"author": "Vanilagy", "author": "Vanilagy",
"version": "1.7.2", "version": "1.7.3",
"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 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@mediabunny/mp3-encoder", "name": "@mediabunny/mp3-encoder",
"author": "Vanilagy", "author": "Vanilagy",
"version": "1.7.2", "version": "1.7.3",
"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",
+22 -22
View File
@@ -323,17 +323,17 @@ class VideoEncoderWrapper {
if (this.customEncoder) { if (this.customEncoder) {
this.customEncoderQueueSize++; this.customEncoderQueueSize++;
const promise = this.customEncoderCallSerializer
.call(() => this.customEncoder!.encode(videoSample, finalEncodeOptions))
.then(() => {
this.customEncoderQueueSize--;
if (shouldClose) { // We clone the sample so it cannot be closed on us from the outside before it reaches the encoder
videoSample.close(); const clonedSample = videoSample.clone();
}
}) const promise = this.customEncoderCallSerializer
.catch((error: Error) => { .call(() => this.customEncoder!.encode(clonedSample, finalEncodeOptions))
this.encoderError ??= error; .then(() => this.customEncoderQueueSize--)
.catch((error: Error) => this.encoderError ??= error)
.finally(() => {
clonedSample.close();
// `videoSample` gets closed in the finally block at the end of the method
}); });
if (this.customEncoderQueueSize >= 4) { if (this.customEncoderQueueSize >= 4) {
@@ -440,6 +440,7 @@ class VideoEncoderWrapper {
void this.muxer!.addEncodedVideoPacket(this.source._connectedTrack!, packet, meta); void this.muxer!.addEncodedVideoPacket(this.source._connectedTrack!, packet, meta);
}, },
error: (error) => { error: (error) => {
error.stack = new Error().stack; // Provide a more useful stack trace
this.encoderError ??= error; this.encoderError ??= error;
}, },
}); });
@@ -483,7 +484,6 @@ class VideoEncoderWrapper {
checkForEncoderError() { checkForEncoderError() {
if (this.encoderError) { if (this.encoderError) {
this.encoderError.stack = new Error().stack; // Provide a more useful stack trace
throw this.encoderError; throw this.encoderError;
} }
} }
@@ -939,17 +939,17 @@ class AudioEncoderWrapper {
if (this.customEncoder) { if (this.customEncoder) {
this.customEncoderQueueSize++; this.customEncoderQueueSize++;
const promise = this.customEncoderCallSerializer
.call(() => this.customEncoder!.encode(audioSample))
.then(() => {
this.customEncoderQueueSize--;
if (shouldClose) { // We clone the sample so it cannot be closed on us from the outside before it reaches the encoder
audioSample.close(); const clonedSample = audioSample.clone();
}
}) const promise = this.customEncoderCallSerializer
.catch((error: Error) => { .call(() => this.customEncoder!.encode(clonedSample))
this.encoderError ??= error; .then(() => this.customEncoderQueueSize--)
.catch((error: Error) => this.encoderError ??= error)
.finally(() => {
clonedSample.close();
// `audioSample` gets closed in the finally block at the end of the method
}); });
if (this.customEncoderQueueSize >= 4) { if (this.customEncoderQueueSize >= 4) {
@@ -1128,6 +1128,7 @@ class AudioEncoderWrapper {
void this.muxer!.addEncodedAudioPacket(this.source._connectedTrack!, packet, meta); void this.muxer!.addEncodedAudioPacket(this.source._connectedTrack!, packet, meta);
}, },
error: (error) => { error: (error) => {
error.stack = new Error().stack; // Provide a more useful stack trace
this.encoderError ??= error; this.encoderError ??= error;
}, },
}); });
@@ -1266,7 +1267,6 @@ class AudioEncoderWrapper {
checkForEncoderError() { checkForEncoderError() {
if (this.encoderError) { if (this.encoderError) {
this.encoderError.stack = new Error().stack; // Provide a more useful stack trace
throw this.encoderError; throw this.encoderError;
} }
} }