我一直在尝试使用节点为youtube创建一个以编程方式创建的图像。我使用FFmpeg的成功非常有限。虽然我成功地创建和保存了一个映像,这要归功于这有洞察力的线程,但我还没有将代码用于流到RTMP服务器。
const cp = require('child_process'),
destination = 'rtmp://a.rtmp.youtube.com/live2/[redacted]', //stream token redacted
proc = cp.spawn('./ffmpeg/bin/ffmpeg.exe', [
'-f', 'rawvideo',
'-pix_fmt', 'rgb24',
'-s', '426x240',
'-i', '-', //allow us to insert a buffer through stdin
'-f', 'flv',
destination
]);
proc.stderr.pipe(process.stdout);
(function loop() {
setTimeout(loop, 1000 / 30); //run loop at 30 fps
const data = Array.from({length: 426 * 240 * 4}, () => ~~(Math.random() * 0xff)); //create array with random data
proc.stdin.write(Buffer.from(data)); //convert array to buffer and send it to ffmpeg
})();但是,当运行此代码时,不会出现错误,而且一切似乎都正常,但是,YouTube报告说没有收到任何数据。有人知道这里出了什么问题吗?
更新:,这确实是违反直觉的,但是向目标添加一个斜杠(如'rtmp://a.rtmp.youtube.com/live2/[redacted]/' )会导致ffmpeg抛出一个通用的I/O error。这对我来说很奇怪。很抱歉,如果这个问题的答案很明显的话,我真的对ffmpeg缺乏经验。
发布于 2020-09-23 17:57:56
这是一个具体的ffmpeg问题,因此节点和javascript的内容是不必要的复杂问题(除非ffmpeg甚至没有执行)。在将ffmpeg命令添加到任何代码之前,最好让它在命令行接口中工作。
-re -f lavfi -i anullsrc输入选项来生成无声音频。-vf format=yuv420p输出选项。-g、-b:v、-maxrate和-bufsize输出选项。-c:v libx264 -c:a aac输出选项的编码器,以确保它不会自动选择名为flv1的糟糕的老式编码器,这是flv1 (-f flv)的默认设置。https://stackoverflow.com/questions/64029637
复制相似问题