NodeJS + Websockets + HTML5 视频标签和'streaming'



我正在尝试使用websockets将<video>标记中的大型视频文件流式传输到浏览器。

视频播放正常,但它总是要等到下载完整个视频才播放,导致很大的延迟。设置autoplay = truepreload="none"似乎没有影响。因此,我研究了将视频分成块,然后将其作为blob URL发送到浏览器。对于分块,我使用Node-Chunking-Streams

我的代码:

var chunkingStreams = require('chunking-streams');
            var SizeChunker = chunkingStreams.Chunker;
            var input = fs.createReadStream('src-videos/redcliff450.webm'),
                chunker = new SizeChunker({                       
                    chunkSize: 2000000                         
                }),
                output;
            chunker.on('chunkStart', function(id, done) {
                output = fs.createWriteStream('src-videos/output/' + id + '.webm');
                done();
            });
            chunker.on('chunkEnd', function(id, done) { 
                output.end();
                done();
            });
            chunker.on('data', function(chunk) {
                output.write(chunk.data);
            });               

            input.pipe(chunker);
            //test out the video using just the first chunk
            var smallChunk = fs.createReadStream('src-videos/output/0.webm');              
            client.send(smallChunk);

我的计划是使块足够小以快速加载-例如~2MB -然后在客户端准备好时发送下一个。我的问题是,虽然第一个块(0)只播放3秒左右,然后直接跳到最后并停止。这发生在Chrome和FF。

增加块大小直到它包含整个视频仍然只导致前3秒播放。

如果我播放分块视频0。webm直接从硬盘在VLC,它运行良好。如果我从浏览器中下载流并在VLC中播放,它只播放前3秒。本文描述了我希望通过HTTP实现的功能。有人对websockets有什么建议吗?

移除input.pipe(chunker);解决了这个问题。我不太确定这是为什么,所以我会调查一下原因。

相关内容

  • 没有找到相关文章

最新更新