Javascript将多个缓冲区附加到sourceBuffer,并将其作为单个视频播放

Javascript将多个缓冲区附加到sourceBuffer,并将其作为单个视频播放,javascript,Javascript,我正在尝试连接多个缓冲区,但它不起作用,这是我正在使用的代码: let socket = io(); let mediaSource = new MediaSource(); let video = document.getElementById("player"); let queue = []; let sourceBuffer; video.src = window.URL.createObjectURL(mediaSource); mediaSource.addEventListener

我正在尝试连接多个缓冲区,但它不起作用,这是我正在使用的代码:

let socket = io();
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('broadcast', function (buffer) {
        console.log('new  buffer');
        let uIntArray = new Uint8Array(buffer);
        if (!sourceBuffer.updating) {
            sourceBuffer.appendBuffer(uIntArray);
        } else {
            queue.push(uIntArray);
        }
    })
});  

当第一个缓冲区出现时,视频开始播放,但一旦第二个缓冲区通过socketIO视频冻结,我不知道如何添加第二个缓冲区,因此当第一个缓冲区结束时,它会移动以播放第二个,就像它是一个视频一样。请原谅我的英语不好

每次追加后,您必须抵消当前
源缓冲区的持续时间:

var duration = 0;

...

(within loop)
sourceBuffer.timestampOffset = duration;
var delta = buffer.duration
duration = duration + delta;

如果您正在处理顺序流,只需设置
sourceBuffer.mode=“sequence”
,那么
timestampOffset
将按照添加的块的顺序自动增加


请参阅。

我在这里解决了同样的问题:如何将您的代码与我的代码合并?您的意思是我需要添加
var duration=0
在最顶端有其他变量,但我不知道我需要在哪里添加其他代码每次向
sourceBuffer
添加内容时,都需要运行其他代码。e、 g.运行
sourceBuffer.appendBuffer(uIntArray)后
,应需要更新
时间间隔偏移量
sourceBuffer.timestampOffset=持续时间;var delta=缓冲区。持续时间;持续时间=持续时间+增量