Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node和ffmpeg将编程创建的视频流传输到youtube_Javascript_Node.js_Ffmpeg_Youtube_Rtmp - Fatal编程技术网

Javascript 使用node和ffmpeg将编程创建的视频流传输到youtube

Javascript 使用node和ffmpeg将编程创建的视频流传输到youtube,javascript,node.js,ffmpeg,youtube,rtmp,Javascript,Node.js,Ffmpeg,Youtube,Rtmp,我一直在尝试使用node将通过编程创建的图像实时流式传输到youtube。我使用FFmpeg的成功非常有限。虽然我已经通过insightful thread创建并保存了一个图像,但我还没有将代码用于流式传输到RTMP服务器 const cp=require('child_process'), 目的地rtmp://a.rtmp.youtube.com/live2/[redacted],//流标记已编辑 proc=cp.spawn(“./ffmpeg/bin/ffmpeg.exe”[ “-f”,“r

我一直在尝试使用node将通过编程创建的图像实时流式传输到youtube。我使用FFmpeg的成功非常有限。虽然我已经通过insightful thread创建并保存了一个图像,但我还没有将代码用于流式传输到RTMP服务器

const cp=require('child_process'),
目的地rtmp://a.rtmp.youtube.com/live2/[redacted],//流标记已编辑
proc=cp.spawn(“./ffmpeg/bin/ffmpeg.exe”[
“-f”,“rawvideo”,
“-pix_fmt”,“rgb24”,
“-s”,“426x240”,
'-i','-',//允许我们通过stdin插入缓冲区
“-f”、“flv”,
目的地
]);
过程标准管(过程标准管);
(函数循环(){
setTimeout(循环,1000/30);//以30 fps的速度运行循环
const data=Array.from({length:426*240*4},()=>~(Math.random()*0xff));//使用随机数据创建数组
proc.stdin.write(Buffer.from(data));//将数组转换为缓冲区并将其发送到ffmpeg
})();
当运行此代码时,不会出现任何错误,并且一切正常,但是,YouTube报告没有收到任何数据。有人知道这里出了什么问题吗


更新:这确实违反直觉,但在目标中添加了一个斜杠,如下所示
'rtmp://a.rtmp.youtube.com/live2/[redact]/'
导致ffmpeg抛出一个通用的
I/O错误
。这对我来说真的很奇怪。抱歉,如果答案很明显,我对ffmpeg真的没有经验。

这是一个明确的
ffmpeg
问题,因此节点和javascript内容是一个不必要的复杂问题(除非
ffmpeg
甚至没有执行)。最好在将
ffmpeg
命令添加到任何代码之前,让它在命令行界面中工作

  • YouTube需要音频流,因此添加
    -re-f lavfi-i anullsrc
    输入选项以生成无声音频

  • 对于实时流媒体,输出必须是YUV 4:2:0,因此添加
    -vf format=yuv420p
    输出选项

  • 还建议在流式处理时添加
    -g
    -b:v
    -maxrate
    ,以及
    -bufsize
    输出选项()

  • 使用
    -c:v libx264-c:a aac
    输出选项设置编码器,以确保不会自动选择名为flv1的破旧编码器,这是flv muxer的默认值(
    -f flv