我在使用socket.io和node流式传输视频文件时遇到了一些困难。我的视频文件在我的服务器上,我使用fs模块将其读取到readStream中。我正在向客户端的mediasource传递大块数据,该媒体源提供给html5视频标签。
虽然客户端正在接收块(我正在记录它们),并且我正在将这些块附加到媒体源的缓冲区中,但video标记中没有显示任何内容。
有人知道怎么解决这个问题吗?
下面是我的代码:
客户端:
var mediaSource = new MediaSource();
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
document.getElementById('video').src = window.URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', function(event) {
var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
console.log(sourceBuffer);
socket.on('chunk', function (data) {
if(!sourceBuffer.updating){
sourceBuffer.appendBuffer(data);
console.log(data);
}
});
socket.emit('go',{})
});服务端: var stream = fs.createReadStream(window.currentvidpath);
socket.on('go', function(){
console.log('WENT');
stream.addListener('data',function(data){
console.log('VIDDATA',data);
socket.emit('chunk',data);
})
})非常感谢。
发布于 2016-11-02 01:13:43
问题在于,只有在源缓冲区没有更新if(!sourceBuffer.updating){ sourceBuffer.appendBuffer(data); console.log(data); }的情况下才追加源缓冲区
这是我添加了一个else之后的控制台,并记录了它没有附加的次数
SourceBuffer {mode: "segments", updating: false, buffered: TimeRanges, timestampOffset: 0, appendWindowStart: 0…}
site.html:24 connect
site.html:17 ArrayBuffer {}
30 site.html:20 not appending因此它附加了视频的一块,并忽略了30
你应该存储那些没有被追加到数组中的元素。然后用设定的间隔做一个循环
https://stackoverflow.com/questions/39522036
复制相似问题