我正在尝试使用NodeJS中的纳米中间件从CouchDB流式传输视频附件。视频在浏览器上收到。我不知道如何在客户端上传输它以及如何在HTML Tag中显示它。
以下是我从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 controls id="videoid" >
<source src="" type="video/webm" />
</video>
我不确定Blob是否是将视频流式传输到视频代码的正确方法。我该如何将视频流附加到视频广告代码?
修改:
你是对的brianchirls。 有用!我已经设置了视频网址。但我在视频标签中得到的是:
<video controls="" id="videoa" class="visible" data-bindattr-7="7">
<source src="/getvideoattachment/?id=a26de29ded4e33ad47205187f4000f46&name=c.webm" data-bindattr-8="8" type="video/webm">
</video>
但是当我点击播放时它不播放视频。但是当我点击inspect元素的链接时,它会在新的浏览器窗口中播放视频。
此解决方案几乎就在那里。
答案 0 :(得分:0)
@brianchirls的答案有所帮助。
通过更改视频标记的src属性而非源标记启动视频流。
谢谢!
答案 1 :(得分:0)
@Bhoomi,我知道已经很久了,但是从稳定性和性能方面来说,您是如何直接从CouchDB流式传输的?