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',