使用套接字io流式传输视频

时间:2016-09-16 00:03:26

标签: node.js video socket.io streaming

我在使用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);
    })
  })

非常感谢。

1 个答案:

答案 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

创建一个循环