diff --git a/dev/convert.html b/dev/convert.html
index 53dda3c..bc1f9d1 100644
--- a/dev/convert.html
+++ b/dev/convert.html
@@ -115,7 +115,7 @@
return ctx.canvas;
},
*/
- width: 300,
+ //width: 300,
//alpha: 'keep',
//width: 320,
//discard: true,
diff --git a/dev/demux.html b/dev/demux.html
index 953fa06..2bca413 100644
--- a/dev/demux.html
+++ b/dev/demux.html
@@ -14,6 +14,24 @@
source: new Mediabunny.BlobSource(file),
});
+ const videoTrack = await input.getPrimaryVideoTrack();
+ const sink = new Mediabunny.VideoSampleSink(videoTrack);
+
+ console.log(await videoTrack.getDecoderConfig())
+
+ const sink2 = new Mediabunny.EncodedPacketSink(videoTrack);
+ for await (const packet of sink2.packets()) {
+ console.log(packet.data.join(', '))//, window.findNalUnitsInLengthPrefixed(packet.data, 4).map(x => window.extractNalUnitTypeForAvc(x)));
+ if (packet.timestamp > 1) break;
+ }
+
+ //return;
+
+ for await (const sample of sink.samples()) {
+ console.log(sample);
+ }
+
+ /*
let total = 0;
input.source.onread = (start, end) => {
total += end - start;
@@ -22,6 +40,7 @@
const videoTrack = await input.getPrimaryVideoTrack();
const sink = new Mediabunny.EncodedPacketSink(videoTrack);
+ */
//console.log(await sink.getPacket(0));
/*
@@ -38,7 +57,7 @@
- const stats = await videoTrack.computePacketStats();
+ //const stats = await videoTrack.computePacketStats();
/*
const sink = new Mediabunny.EncodedPacketSink(videoTrack);
@@ -47,9 +66,9 @@
}
*/
//console.log(await videoTrack.computeDuration());
- console.log("Done", stats, total, file.size)
+ //console.log("Done", stats, total, file.size)
- console.log(input);
+ //console.log(input);
/*
const videoTrack = await input.getPrimaryVideoTrack();
diff --git a/src/media-source.ts b/src/media-source.ts
index 2ca13a2..c89b24a 100644
--- a/src/media-source.ts
+++ b/src/media-source.ts
@@ -1159,7 +1159,7 @@ export class MediaStreamVideoTrackSource extends VideoSource {
type: 'videoTrack',
trackId: this._workerTrackId,
track: this._track,
- }, [this._track]);
+ });
this._workerListener = (event: MessageEvent) => {
const message = event.data as MediaStreamTrackProcessorWorkerMessage;
@@ -1978,17 +1978,19 @@ const mediaStreamTrackProcessorWorkerCode = () => {
});
const abortControllers = new Map();
- const stoppedTracks = new Set();
+ const activeTracks = new Map();
self.addEventListener('message', (event) => {
const message = event.data as MediaStreamTrackProcessorControllerMessage;
switch (message.type) {
case 'videoTrack': {
+ activeTracks.set(message.trackId, message.track);
+
const processor = new MediaStreamTrackProcessor({ track: message.track });
const consumer = new WritableStream({
write: (videoFrame) => {
- if (stoppedTracks.has(message.trackId)) {
+ if (!activeTracks.has(message.trackId)) {
videoFrame.close();
return;
}
@@ -2026,7 +2028,9 @@ const mediaStreamTrackProcessorWorkerCode = () => {
abortControllers.delete(message.trackId);
}
- stoppedTracks.add(message.trackId);
+ const track = activeTracks.get(message.trackId);
+ track?.stop();
+ activeTracks.delete(message.trackId);
sendMessage({
type: 'trackStopped',