首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用socket io流式传输视频

使用socket io流式传输视频
EN

Stack Overflow用户
提问于 2016-09-16 08:03:26
回答 1查看 2.2K关注 0票数 0

我在使用socket.io和node流式传输视频文件时遇到了一些困难。我的视频文件在我的服务器上,我使用fs模块将其读取到readStream中。我正在向客户端的mediasource传递大块数据,该媒体源提供给html5视频标签。

虽然客户端正在接收块(我正在记录它们),并且我正在将这些块附加到媒体源的缓冲区中,但video标记中没有显示任何内容。

有人知道怎么解决这个问题吗?

下面是我的代码:

客户端:

代码语言:javascript
运行
复制
  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);

代码语言:javascript
运行
复制
socket.on('go', function(){ 
  console.log('WENT');
    stream.addListener('data',function(data){
      console.log('VIDDATA',data);
      socket.emit('chunk',data);
    })
  })

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-02 01:13:43

问题在于,只有在源缓冲区没有更新if(!sourceBuffer.updating){ sourceBuffer.appendBuffer(data); console.log(data); }的情况下才追加源缓冲区

这是我添加了一个else之后的控制台,并记录了它没有附加的次数

代码语言:javascript
运行
复制
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

你应该存储那些没有被追加到数组中的元素。然后用设定的间隔做一个循环

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39522036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档