javascript - 第一次后附加到 SourceBuffer 的 MediaSource 不起作用

标签 javascript node.js video stream socket.io

我目前正在尝试通过 socket.io 将 .webm 视频文件流式传输到我的客户端(当前使用 Chrome 作为客户端)。

将第一个 Uint8Array 附加到 SourceBuffer 可以正常工作,但附加更多的则不起作用并引发以下错误: 未捕获的 DOMException:无法在“SourceBuffer”上执行“appendBuffer”:HTMLMediaElement.error 属性不为空。

我当前的代码:

'use strict';

let socket = io.connect('http://localhost:1337');

let mediaSource = new MediaSource();
let video = document.getElementById("player");
let queue = [];
let sourceBuffer;

video.src = window.URL.createObjectURL(mediaSource);

mediaSource.addEventListener('sourceopen', function() {
    sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"');

    socket.on("video", function(data) {
        let uIntArray = new Uint8Array(data);

        if (!sourceBuffer.updating) {
            sourceBuffer.appendBuffer(uIntArray);
        } else {
            queue.push(data);
        }
    });
});

服务器端代码(片段)

io.on('connection', function(socket) {
            console.log("Client connected");

            let readStream = fs.createReadStream("bunny.webm");
            readStream.addListener('data', function(data) {
                socket.emit('video', data);
            });
        });

我还删除了 webkit 检查,因为它只会在 Chromium 浏览器上运行。

最佳答案

我认为你必须释放缓冲区,请参阅 remove() 函数 http://w3c.github.io/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end

如果有帮助,请告诉我。

关于javascript - 第一次后附加到 SourceBuffer 的 MediaSource 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050326/

相关文章:

node.js - MongoError : server instance pool was destroyed

android - 是否可以在没有音频源的情况下使用 CamcorderProfile?

javascript - 如何创建流畅的滚动效果?

javascript - TypeScript 包含流程

javascript - 在循环使用 Mongoose 查询时有希望 - Node Bluebird

IOS - 从非 UI 类启动视频弹出窗口

javascript - Video.js - loadeddata 事件永远不会触发

javascript - Javascript 中的 XML DOM 与对象

javascript - 等待来自 Javascript 模态的 "return value"

javascript - 如何添加新 key :value pair to existing sub object of a mongoDB document