NodeJS + Websockets + HTML5video标签和“stream媒体”

我正尝试使用websockets将大型video文件stream式传输到浏览器的<video>标签中。

video播放良好,但是在播放之前一直等待下载整个video,导致很大的延迟。 设置autoplay = truepreload="none"似乎对此没有影响。 所以我已经研究过把video分块,然后把它作为一个blob的URL发送到浏览器。 对于块,我正在使用节点分块stream

我的代码到目前为止:

 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中。

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

如果我直接从VLC中的HDD播放分块的video0.webm,它播放良好。 如果我从浏览器下载stream并在VLC中播放,则只播放前3秒。 本文描述了我正在做的事情,但通过HTTP。 任何人有任何websockets的指针?

删除input.pipe(chunker); 解决了这个。 我不太清楚这个原因,所以会调查为什么。