出于此目的,我已经下载并安装了videogular
,现在正在尝试设置它,但我确定该怎么做。
根据视频加载视频的文档,您需要这样的语法:
sources: [
{src: $sce.trustAsResourceUrl(myMp4Resource), type: "video/mp4"}
]
当你想在没有流媒体的情况下加载内容时,这很好。
但是比如说你有一个节点服务器在端口8105上运行,而你想要收集的文件的id为1,那么结果可能如下所示:
sources: [
{src: $sce.trustAsResourceUrl('http://localhost:8105/loadvideo/1'), type: "video/mp4"}
]
然而,在我尝试这样做时,它只会告诉我资源不是实际资源。
我的问题是你如何流式传输视频内容(最好是视频内容),有没有人知道人们做到这一点的例子?
服务器端代码
好的,所以我最初的想法(我知道这是对上述代码的更改)是创建一个route
,其路径为:
router.route('/retrieveFile')
.post(function (request, response) {
var path = '../' + request.body.data;
var file = fs.createReadStream(path);
file.pipe(response);
});
然后输出文件的输出。
然后使用它来传输文件
答案 0 :(得分:1)
要将文件作为文件提供,您需要在管道
之前设置相应的标题要加载文件,您将此代码放入路由器,以及您使用post
的位置,如果您没有充分理由我只使用get
或all
如果客户决定断开中间流
,您可能还希望能够结束传输或者,您可能希望使用res.download
代替流,在这种情况下会自动处理相应的标头和中断。
所以整个代码可能如下所示:
router.route('/path/to/video.mp4')
.all(function(req, res){
res.header('content-disposition', 'filename="video.mp4"')
var stream = fs.createReadStream('./resources/video.mp4');
stream.pipe(res);
require('on-finished')(res, stream.abort.bind(stream));
// or simply
res.download(fs.readSync('/path'))
});
然后您可以使用http://localhost:8000/path/to/video.mp4
直接将视频加载到浏览器中,只要它可以播放,或者只是提供下载。或者,您可以在videgular
sources: [ {src: $sce.trustAsResourceUrl('http://localhost:8000/path/to/video.mp4'), type: "video/mp4"} ]
答案 1 :(得分:1)
如果您的硬盘上有视频文件,而您希望使用其文件名为所有视频文件提供服务,那么您应该像使用其他资源一样使用Express Static来提供服务
您可以添加路径前缀' / videos'将它们与常规资源区分开来。
app.use('/videos', express.static('videos'));
然后视频文件./videos/myvid.mp4
可用作http://localhost:8000/videos/myvid.mp4