mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-27 10:53:50 +02:00
Fix sample closing before it reaches the custom encoder
This commit is contained in:
+4
-4
@@ -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);
|
||||||
|
|||||||
@@ -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`
|
||||||
|
|||||||
Generated
+6
-6
@@ -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
@@ -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,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
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user