繁体   English   中英

NodeJS + Websockets + HTML5视频标签和“流”

[英]NodeJS + Websockets + HTML5 video tag and 'streaming'

我正在尝试使用websocket在<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秒。

如果我直接从VLC中的HDD播放分块视频0.webm,则可以正常播放。 如果我从浏览器中下载流并在VLC中播放,则仅播放前3秒。 本文介绍了我要通过HTTP执行的操作。 任何人都有websocket的指针吗?

删除input.pipe(chunker); 解决了这个。 我不太确定原因,因此将调查原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM