使用express.js使用HTML5进行视频流传输

时间:2015-02-24 15:41:22

标签: javascript node.js express video-streaming html5-video

我正在尝试使用node.js设置一个支持将视频流式传输到HTML5视频代码的网络服务器。

灵感来自gist

node.js代码:

exports.getTrailer = function (req, res, next) {
    var path = config.rootContentFilesPath + '/movie.mp4';
    var stat = fs.statSync(path);
    var total = stat.size;
    if (req.headers['range']) {
        var range = req.headers.range;
        var parts = range.replace(/bytes=/, "").split("-");
        var partialstart = parts[0];
        var partialend = parts[1];

        var start = parseInt(partialstart, 10);
        var end = partialend ? parseInt(partialend, 10) : total - 1;
        var chunksize = (end - start) + 1;
        console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize);

        var file = fs.createReadStream(path, { start: start, end: end });
        res.writeHead(206, {
            'Content-Range': 'bytes ' + start + '-' + end + '/' + total,
            'Accept-Ranges': 'bytes',
            'Content-Length': chunksize,
            'Content-Type': 'video/mp4'
        });
        file.pipe(res);
    } else {
        console.log('ALL: ' + total);
        res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' });
        fs.createReadStream(path).pipe(res);
    }
};

HTML5代码:

<video src="http://localhost:3000/getTrailer" controls>
    <!-- fallback -->
    Your browser does not support the
    <code>video</code> element.
</video>

问题: 我在chrome中测试了上面的代码,它可以工作但不一致。在一次又一次地刷新浏览器时,我发现视频会在有时不播放的时候播放。任何人都可以帮助解决这个问题。

0 个答案:

没有答案