muaz-khan / RecordRTC

RecordRTC is WebRTC JavaScript library for audio/video as well as screen activity recording. It supports Chrome, Firefox, Opera, Android, and Microsoft Edge. Platforms: Linux, Mac and Windows.
https://www.webrtc-experiment.com/RecordRTC/
MIT License
6.49k stars 1.75k forks source link

getSeekableBlob no longer working in Chrome 92 #760

Open KrypticCoder opened 3 years ago

KrypticCoder commented 3 years ago

After upgrade to Chrome 92, getSeekableBlob breaks on line 1923 in RecordRTC.js at tools.makeMetadataSeekable.

/**
 * @param {Blob} file - File or Blob object.
 * @param {function} callback - Callback function.
 * @example
 * getSeekableBlob(blob or file, callback);
 * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}
 */
function getSeekableBlob(inputBlob, callback) {
    // EBML.js copyrights goes to: https://github.com/legokichi/ts-ebml
    if (typeof EBML === 'undefined') {
        throw new Error('Please link: https://www.webrtc-experiment.com/EBML.js');
    }

    var reader = new EBML.Reader();
    var decoder = new EBML.Decoder();
    var tools = EBML.tools;

    var fileReader = new FileReader();
    fileReader.onload = function(e) {
        var ebmlElms = decoder.decode(this.result);
        ebmlElms.forEach(function(element) {
            reader.read(element);
        });
        reader.stop();

       /** --- Breaks here. --- */
        var refinedMetadataBuf = tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);

        var body = this.result.slice(reader.metadataSize);
        var newBlob = new Blob([refinedMetadataBuf, body], {
            type: 'video/webm'
        });

        callback(newBlob);
    };
    fileReader.readAsArrayBuffer(inputBlob);
}

The following error is shown in console: image

EDIT Also broken in Safari Version 14.1.2 (16611.3.10.1.3) Works in Firefox 90.0.2 (64-bit)

angekouf commented 2 years ago

fyi, this issue has apparently been reported to the ts-ebml package and after investigation the dependency packages are missing some schema definitions.

Here is the issue which also includes a temporary workaround https://github.com/legokichi/ts-ebml/issues/33