node.js - 如何使用 ffmpeg 将 h.264 流转换为 MP4 并将结果通过管道传输到客户端?
问题描述
我的服务器(node.js)上有一个 h.264 编码的视频流,我想用ffmpeg
它来将它转换为 MP4 流。然后我想使用我设置的 HTTP 服务器的响应将 MP4 流从子进程传送到客户端。我对所有选项感到非常困惑,ffmpeg
并且不确定如何将子进程的输出通过管道传输到 HTTP 响应。
我尝试了几种ffmpeg
选项组合,但视频无法在浏览器中播放(或显示任何接收数据的迹象),我不知道我是否将其正确转换为 MP4。我也不确定我的管道是否正确。我在服务器或客户端都没有收到任何错误。
HTML:
<video id="videoPlayer" poster="assets/logo_25.png" autoplay muted controls>
<source src="http://localhost:3001" type="video/mp4">
</video>
节点服务器:
const videoPORT = 3001;
var videoServer = http.createServer(function (req, res) {
var videoIncommingPORT = 11111;
var videoSocket = dgram.createSocket('udp4');
videoSocket.on('listening', function () {
var address = videoSocket.address();
});
videoSocket.on('message', function (message, remote) {
var child_converter = spawn('ffmpeg', ['-fflags', '+genpts', '-r', '25', '-i', `${message}`, '-vcodec', 'libx264', '-f', 'mp4', 'copy', '-']);//convert h.264 to MP4 container
child_converter.stdout.pipe(res);//pipe to response
child_converter.stdout.on('data', (data) => {
console.log(data);
});
child_converter.stderr.on('data', (data) => {
console.log(data);
});
});
videoSocket.bind(videoIncommingPORT);
});
videoServer.listen(videoPORT);
解决方案
推荐阅读
- sql - 如何在 where 子句中应用 if/else 逻辑?
- scala - 在 spark-shell 中预加载脚本并解析 `args`
- javascript - 单击不会调用单击
- plsql - ORA-06550:第 6 行,第 1 列:PLS-00103:遇到符号“CREATE”
- qt - QMouseEvent::localPos() 和高 DPI 显示 (Mac Retina)
- java - 使用 Maven 添加文件夹中的所有文件以构建路径依赖项
- c# - 有没有一种方法可以等待当前不是异步的方法?
- excel - Excel VBA 处理工作簿在随机数量的工作簿后停止
- javascript - 在 React 中使用泛型键入 defaultProp 箭头函数方法
- php - 生成 WSSE-Header 时使用 Koltin 访问 ORO-Platform API 失败