mux.js icon indicating copy to clipboard operation
mux.js copied to clipboard

Sample code: It does not work.

Open jynxio opened this issue 3 years ago • 2 comments

Discretion

The sample code of README.md does not work, it will throw this error:

Uncaught (in promise) DOMException: Failed to execute 'appendBuffer' on 'SourceBuffer': This SourceBuffer has been removed from the parent media source.

The specific location of the error is here:

<script>
    function appendNextSegment () {
        // ......
        transmuxer.on('data', (segment) => {
            sourceBuffer.appendBuffer(new Uint8Array(segment.data)); // 👈 here!
        })
        // ......
    }
</script>

Screenshot

Snipaste_2022-01-07_16-39-24

Environment

platform: chrome ( 97.0.4692.71 ), Windows10

jynxio avatar Jan 07 '22 08:01 jynxio

same here. did you find any solution?

erickythierry avatar Feb 22 '22 13:02 erickythierry

same here. did you find any solution?

not yet

jynxio avatar Feb 22 '22 15:02 jynxio

In addition to that - the latest release didn't publish assets like it did before, so that's also one more reason why the sample code fails. Talking about this URL https://github.com/videojs/mux.js/releases/latest/download/mux.js.

arturparkhisenko avatar Oct 03 '23 01:10 arturparkhisenko

But the core of the reported problem is that with the current code sample, we're getting two data events for one updateend event of source buffer. So yes the current SourceBuffer is still in the appendBuffer state.

The simplest 1 line change we can make seems to me like this:

function appendNextSegment(){
  // reset the 'data' event listener to just append (moof/mdat) boxes to the Source Buffer
  transmuxer.off('data');
  transmuxer.on('data', (segment) =>{
    sourceBuffer.appendBuffer(new Uint8Array(segment.data));
    transmuxer.off('data'); // ⬅️ 🆕 This is added, to close the listener for the current append.
  })
  // ... rest of the code
}

arturparkhisenko avatar Oct 03 '23 03:10 arturparkhisenko