【发布时间】:2021-01-09 18:05:57
【问题描述】:
我一直在尝试使用 node.js 将一个以编程方式创建的图像直播到 youtube。我使用 FFmpeg 的成功非常有限。虽然感谢this 富有洞察力的线程,我已经设法创建并保存了一张图片,但我还没有让代码工作以流式传输到 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 真的很缺乏经验。
【问题讨论】:
标签: javascript node.js ffmpeg youtube rtmp