node.js - Nodejs 从 CouchDB 流式传输视频并显示在视频标签中

标签 node.js video-streaming html5-video couchdb couchdb-nano

我正在尝试使用 NodeJS 中的 Nano 中间件从 CouchDB 流式传输视频附件。视频在浏览器上接收。我不知道如何在客户端上传输它以及如何在 HTML 标签中显示它。

这是我从 here 找到的 CouchDB 读取附件的 NodeJS 代码。 :

if (req.headers.range) {
    var stream = db.attachment.get(docid, docname, {Range: req.headers.range});
    stream.on('response', function(response) {
        var start = req.headers.range.replace(/bytes=/, "").split("-")[0];
        var end = response.headers['content-length'];
        res.writeHead(206, {
            'ETag': response.headers.etag,
            'Content-Range': 'bytes ' + start + "-" + (end - 1) + '/' + end,
            'Accept-Ranges': 'bytes',
            'Content-Length': end - start,
            'Content-Type': response.headers['content-type']
        });
    });
} else {
    stream = db.attachment.get(docid, docname);
}
stream.pipe(res);
stream.on('end', function() {
    res.end();
});

在客户端,我的 ajax 调用如下所示:

jQuery.ajax({
        url: '/getvideoattachment/?id=' + this.id + "&name=" + videoname,
        contentType: 'video/webm',
        type: 'GET',
        headers : { "Range" : 'bytes=0-3200' },
        processData : false,
        success: function(content) {
            var oMyBlob = new Blob([content], { "type" : "video\/webm" });
            var docURL = window.URL.createObjectURL(oMyBlob);
            var elVideo = document.getElementById("videoid" );
            elVideo.addEventListener("load", function (evt) { window.URL.revokeObjectURL(docURL); });
            elVideo.setAttribute("src", docURL);
        },
        error : function(content)
        {
            Em.Logger.info('Model:', this.id, 'has no image', err);
            return '';
        }
    });

在 HTML Video 标签中是这样的:

<video controls id="videoid" >
                    <source src="" type="video/webm" />
                </video> 

我不确定 Blob 是否是将视频流式传输到视频标记的正确方法。我应该如何将流附加到视频标签?

编辑:

你们是对的。 有用!我已经设置了视频地址。但我在视频标签中得到的是这样的:

<video controls="" id="videoa" class="visible" data-bindattr-7="7">
                    <source src="/getvideoattachment/?id=a26de29ded4e33ad47205187f4000f46&amp;name=c.webm" data-bindattr-8="8" type="video/webm">
                </video>

但是当我点击播放时,它不播放视频。但是,当我单击检查元素中的链接时,它会在新的浏览器窗口中播放视频。

这个解决方案已经差不多了。

最佳答案

@brianchirls 的回答有帮助。

通过更改视频标签的 src 属性而不是源标签开始视频流。

谢谢!

关于node.js - Nodejs 从 CouchDB 流式传输视频并显示在视频标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24281682/

相关文章:

node.js - Nodejs 流与 sendFile

video - 通过浏览器在 VLC Player 上打开视频流

javascript - ReactJS 组件中显示的视频未更新

HTML视频类型属性需要视频在/之前

ajax - 带有 Video.js 和 AJAX 的 HTML5 视频

javascript - 未捕获错误 : process. 不支持绑定(bind)(browserify+selenium-webdriver)

javascript - 为 youtube-notifaction api 设置 hubCallback 的内容

OpenCV MPEG 视频流

opencv - 如何找出视频的帧率?

javascript - 挑战 : Aggregate Second Element from Input Element