Nginx ffmpeg转码到youtube live坏视频容器
我一直在尝试将obs studio生成的流转码到我的nginx服务器并发送到youtube。现在,我已经使它与twitch一起工作,我知道这些设置实际上基本正确地转换了代码,并且可以查看。问题是youtube live将其视为坏的视频设置,并告诉我更改当前的视频容器格式。另一个可能不相关的副作用是,这条流在youtube上看起来非常糟糕。看起来它是以很差的比特率流的,但是真正的问题是坏的视频设置错误 正在使用的ffmpeg命令如下Nginx ffmpeg转码到youtube live坏视频容器,nginx,video,ffmpeg,youtube,live-streaming,Nginx,Video,Ffmpeg,Youtube,Live Streaming,我一直在尝试将obs studio生成的流转码到我的nginx服务器并发送到youtube。现在,我已经使它与twitch一起工作,我知道这些设置实际上基本正确地转换了代码,并且可以查看。问题是youtube live将其视为坏的视频设置,并告诉我更改当前的视频容器格式。另一个可能不相关的副作用是,这条流在youtube上看起来非常糟糕。看起来它是以很差的比特率流的,但是真正的问题是坏的视频设置错误 正在使用的ffmpeg命令如下 ffmpeg -i rtmp://localhost/Priva
ffmpeg -i rtmp://localhost/Private/Private1 -vb 6000k -minrate 6000k -maxrate 6000k -bufsize 6000k -s 1280x720 -c:v libx264 -preset faster -r 50 -g 100 -keyint_min 50 -x264opts nal-hrd=cbr:force-cfr=1 -sws_flags lanczos -tune film -pix_fmt yuv420p -c:a copy -f flv -threads 6 -strict normal rtmp://a.rtmp.youtube.com/live2/{key}
我尝试了不同的帧率,在谷歌上搜索了一段时间,没有发现任何东西,也没有错误地解释一切。不管怎样,我都很乐意在这里得到帮助
系统信息
操作系统:Ubuntu服务器16.04 LTS
内存:10gb
处理器:AMD Phenomtm II X6 1090T
GPU:Geforce GT 520
互联网
上传15比特
下载150mbit
如果你需要更多的信息,我很乐意发送给你。谢谢你的阅读
编辑1
在谷歌搜索了一下我做错了什么之后,我决定尝试稍微改变一下,然后想出了这个命令
ffmpeg -re -i rtmp://localhost/(app)/(key) -c:v libx264 -r 50 -g 100 -keyint_min 100 -x264opts "keyint=100:min-keyint=100:no-scenecut" -sws_flags lanczos -profile:v baseline -preset veryfast -vb 6000K -minrate 6000k -maxrate 6000k -bufsize 6000k -s 1280x720 -tune film,zerolatency -pix_fmt yuv420p -f flv -c:a copy -ac 1 -strict normal rtmp://(output site)/(output app)/(output key)
在我目前的测试中,如果我只直接输出到youtube live,它至少有一个健康的流超过2分钟。我找到了我的nginx服务器的输出,然后youtube live破坏了一切
我的nginx rtmp设置在此链接上
编辑2
如果我将该流推送到一个像restream这样的网站,将其流到youtube,那么它似乎可以工作。测试了25分钟,没有改变他们说的坏视频容器或任何东西。所以我要说,nginx的文件分发方式在一定程度上应该受到谴责?不确定我做错了什么。我很确定ffmpeg在这里不是罪魁祸首至少YouTube似乎不喜欢nginx。我找到了两种解决方案 解决方案1 添加元拷贝;对于您的nginx配置,如下所示:
rtmp {
server {
listen 1935;
application youtube{
live on;
meta copy;
push rtmp://a.rtmp.youtube.com/live2/(key);
}
}
}
解决方案2
修改nginx rtmp module/ngx\u rtmp\u codec\u module.c并替换以下行:
ngx_string("Server"),
与
然后重新编译nginx。我想我已经确认了nginx推流是现在的问题,要想弄清楚这一部分,看看我是否能找到替代方案。抱歉,我之前没有提到这一点,但它工作得非常好。我发现做那件事没有什么问题。谢谢
ngx_string("xtradata"),