我有一个Node.js进程,可以将视频流输出到我的Node.js应用程序。
在客户端,有一个<video>
标签。我希望将视频从Node.js中流式传输到视频标签的src
属性中。根据我之前的经验,我们必须使用blob
对象来实现。但是,我不太确定如何以及为什么要使用它。
我想到的另一种可能的解决方案是,在我的服务器上创建某种临时文件,然后将流写入该文件,然后将该文件作为视频的源提供服务。但这似乎不太直观。我想知道是否有更成熟的解决方案来解决这个问题。
我有一个Node.js进程,可以将视频流输出到我的Node.js应用程序。
在客户端,有一个<video>
标签。我希望将视频从Node.js中流式传输到视频标签的src
属性中。根据我之前的经验,我们必须使用blob
对象来实现。但是,我不太确定如何以及为什么要使用它。
我想到的另一种可能的解决方案是,在我的服务器上创建某种临时文件,然后将流写入该文件,然后将该文件作为视频的源提供服务。但这似乎不太直观。我想知道是否有更成熟的解决方案来解决这个问题。
实际上我在两周前的黑客马拉松中尝试过这个。最终我勉强让这个FLV流工作了,下面是我发布的内容。我的目的是制作一个库来自动化大部分涉及到的流程。
正如你所见,我在服务器上打开了一个新端口来处理流向客户端的不同数据流。这反映在客户端的src标签中。
三件事情你需要注意:
这是 ffmpeg 的 Linux 版本。
在 js 方面使用 Flowplayer。
npm fluent-ffmpeg
// StreamServer.js
var express = require('express'),
app = express(),
ffmpeg = require('fluent-ffmpeg');
module.exports = function () {
app.stream(req, res)
{
res.contentType('flv');
// 确保您设置了正确的视频文件存储路径
var pathToMovie = '/path/to/storage/' + req.params.filename;
var proc = ffmpeg(pathToMovie)
// 使用“flashvideo”预设(位于/lib/presets/flashvideo.js中)
.preset('flashvideo')
// 设置事件处理程序
.on('end', function () {
console.log('文件已成功转换');
})
.on('error', function (err) {
console.log('发生错误:' + err.message);
})
// 保存到流
.pipe(res, { end: true });
};
}
//routes.js
'use strict';
var stream = require('../controllers/streaming.server.controller'),
streamServer = require('../controllers/StreamServer.js'),
express = require('express');
//streaming.server.controller.js
module.exports = function (app) {
app.get('/api/stream', function (req, res) {
streamServer.stream(req, res);
});
};
var path = require('path'),
express = require('express'),
app = express(),
routes = require('../routes/routes.js')(app),
ffmpeg = require('fluent-ffmpeg');
app.listen(4000);
编辑:客户端部分:
https://github.com/fluent-ffmpeg/node-fluent-ffmpeg/tree/master/examples/flowplayer
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="/flowplayer.min.js"></script>
<title>node-fluent-ffmpeg</title>
</head>
<body>
<!-- this A tag is where your Flowplayer will be placed. it can be anywhere -->
<a
href="http://localhost:4000/api/stream"
style="display:block;width:520px;height:330px"
id="player">
</a>
<!-- this will install flowplayer inside previous A- tag. -->
<script>
flowplayer("player", "/flowplayer.swf");
</script>
</body>
</html>
(只需更改href属性)
childProcess
来生成其他进程来处理视频流。 - sg.cc