把视频接口写入HTML,html5 – MediaSource API – 将多个视频追加/连接到一个缓冲区中...

更新:

所以我能够通过使用offsetTimestamp属性(在附加每个视频后递增它)来使其工作.

我现在的问题:

1)为什么在将MediaSource.mode设置为序列时没有正确完成?

2)为什么我的MediaSource.duration总是“无限”而不是正确的持续时间?

我正在尝试使用MediaSource API附加多个视频文件并无缝播放,就好像它是1个视频一样.

我根据规范(DASH-MPEG)正确地对我的视频进行了转码,当单独播放时,它们工作正常.

但是,当我尝试追加多个时,我遇到的问题是段相互覆盖,持续时间不正确等等.即使所有内容似乎都按预期执行.

我已经尝试过使用offsetTimestamp,但根据文档设置MediaSource.mode到’sequence’应该自动处理这个.此外,出于某种原因,MediaSource.duration即使在追加一个片段之后也总是似乎是“无限”.

这是我的代码:

function downloadData(url,cb) {

console.log("Downloading " + url);

var xhr = new XMLHttpRequest;

xhr.open('get',url);

xhr.responseType = 'arraybuffer';

xhr.onload = function () {

cb(new Uint8Array(xhr.response));

};

xhr.send();

}

if (MediaSource.isTypeSupported('video/mp4; codecs="avc1.64001E"')) {

console.log("mp4 codec supported");

}

var videoSources = [

"{% static 'mp4/ff_97.mp4' %}","{% static 'mp4/ff_98.mp4' %}","{% static 'mp4/ff_99.mp4' %}","{% static 'mp4/ff_118.mp4' %}"

]

var mediaSource = new MediaSource();

mediaSource.addEventListener('sourceopen',function(e) {

var sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.64001E"');

sourceBuffer.mode = 'sequence';

console.log('SourceBuffer mode set to ' + sourceBuffer.mode);

sourceBuffer.addEventListener('updateend',function(e) {

console.log('Finished updating buffer');

console.log('New duration is ' + String(mediaSource.duration));

if (videoSources.length == 0) {

mediaSource.endOfStream();

video.currentTime = 0;

video.play();

return;

}

downloadData(videoSources.pop(),function(arrayBuffer) {

console.log('Finished downloading buffer of size ' + String(arrayBuffer.length));

console.log('Updating buffer');

sourceBuffer.appendBuffer(arrayBuffer);

});

console.log('New duration: ' + String(mediaSource.duration));

});

downloadData(videoSources.pop(),function(arrayBuffer) {

console.log('Finished downloading buffer of size ' + String(arrayBuffer.length));

console.log('Updating buffer');

sourceBuffer.appendBuffer(arrayBuffer);

});

},false);

var video = document.querySelector('video');

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

这是日志:

mp4 codec supported

(index):78 SourceBuffer mode set to sequence

(index):45 Downloading /static/mp4/ff_118.mp4

(index):103 Finished downloading buffer of size 89107

(index):104 Updating buffer

(index):81 Finished updating buffer

(index):82 New duration is Infinity

(index):45 Downloading /static/mp4/ff_99.mp4

(index):98 New duration: Infinity

(index):92 Finished downloading buffer of size 46651

(index):93 Updating buffer

(index):81 Finished updating buffer

(index):82 New duration is Infinity

(index):45 Downloading /static/mp4/ff_98.mp4

(index):98 New duration: Infinity

(index):92 Finished downloading buffer of size 79242

(index):93 Updating buffer

(index):81 Finished updating buffer

(index):82 New duration is Infinity

(index):45 Downloading /static/mp4/ff_97.mp4

(index):98 New duration: Infinity

(index):92 Finished downloading buffer of size 380070

(index):93 Updating buffer

(index):81 Finished updating buffer

(index):82 New duration is Infinity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值