node.js - 如何将流从 h265 转换为 h264

标签 node.js ffmpeg video-streaming html5-video fluent-ffmpeg

我正在尝试使用 nodejs 创建一个媒体服务器,并且流式传输任何格式都没有问题,但是
由于网络浏览器无法播放 H265 编解码器视频,我需要将它们转换为 H264,而 createReadStream 创建一个 block ,这样我就不必事先完全转换它们,只需将服务器发送到浏览器的那个 block 。

const path = 'assets/yourfavmov.mkv';
const stat = fs.statSync(path);
const fileSize = stat.size;
const range = req.headers.range;
if (range) {  
const rangeArray = range.replace(/bytes=/, "").split("-"); 
console.log(rangeArray) 
const start = parseInt(rangeArray[0], 10); 
const end = rangeArray[1] ? parseInt(rangeArray[1], 10) : fileSize-1; 
const chunksize = (end-start) + 1; 
const fileChunk = fs.createReadStream(path, {start, end});
const head = {
    'Content-Range': `bytes ${start}-${end}/${fileSize}`,  
    'Accept-Ranges': 'bytes', 
    'Content-Length': chunksize, 
    'Content-Type': 'video/x-matroska' 
};
res.writeHead(206, head); 
fileChunk.pipe(res); 
} else {
   res.end("wont let you stream");
}
我尝试使用 ffmpeg-stream 转换流,就像这样
const converter = new Converter();
const input = converter.createInputStream({
      f: "matroska,webm",
      vcodec : "hevc"
})
const fileChunk = fs.createReadStream(path, {start, end}); 
fileChunk.pipe(input);
converter
  .createOutputStream({ f: "matroska,webm", vcodec: "h264" })
  .pipe(res);
但我不知道我所做的是对还是错,所以没有运气
那么有没有办法做到这一点呢?
提前致谢。

最佳答案

“有没有办法做到正确”:
不是开箱即用,不。您正在尝试做的事情称为“及时”转码,它非常复杂。您必须考虑容器时间戳、音频启动样本、视频序列 header 和其他一些东西。 ffmpeg 不会为您执行此操作。出于所有意图和目的,您想要做的事情在今天的开源工具中是不可能的。

关于node.js - 如何将流从 h265 转换为 h264,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66972582/

相关文章:

php - php中的音频动态范围压缩

iphone - 除 ffmpeg x264 之外的 H264 编码器

ffmpeg视频流播放延迟?

html - 在添加了图形覆盖的网站上直播直播

javascript - 如何将我的网站连接到我的 Node 应用程序?

angularjs - [Node][Angular] 如何下载node生成的excel文件

javascript - 类型错误 : user. 比较密码不是函数

javascript - 无法使用 socket.io 发送发布请求

ffmpeg - ARM 板 (i.MX6) 中的 USB 网络摄像头流式传输

c++ - 使用 OpenCV 访问相机(通过 GStreamer)