我在使用socket.io和node传输视频文件时遇到了一些困难。我的视频文件在我的服务器上,我使用fs模块将其读入readStream。我是他们将大块数据传递到客户端的mediasource,它输入到html 5视频标签。
虽然客户端正在接收块(我记录它们),并且我将块附加到媒体源的缓冲区,但视频标记中没有任何内容。
任何人都知道如何解决这个问题?
这是我的代码:
客户方:
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);
})
})
非常感谢。
答案 0 :(得分:0)
问题在于,如果没有更新源缓冲区,则只附加源缓冲区
if(!sourceBuffer.updating){
sourceBuffer.appendBuffer(data);
console.log(data);
}
在我添加了其他内容之后继续我的控制台并记录它不会附加的时间
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
您应该存储未附加到数组中的那些。然后用set Interval
创建一个循环