ffmpeg转码到youtube直播坏视频容器

时间:2017-07-09 03:41:57

标签: nginx video ffmpeg youtube live-streaming

我一直在尝试将obs studio生成的流转码到我的nginx服务器并将其发送到youtube。现在我已经让它工作了抽搐,我知道这些设置实际上是正确地转码它并且是可见的。问题是youtube live将其视为错误的视频设置并告诉我更改当前的视频容器格式。另一个可能无关的副作用是在youtube上流看起来很糟糕。看起来它是以一个糟糕的比特率和东西流式传输,但真正的问题是糟糕的视频设置错误。

正在使用的ffmpeg命令如下

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 Server 16.04 LTS
  • Ram:10gb
  • 处理器:AMD Phenom(tm)II X6 1090T
  • GPU:Geforce GT 520

互联网。

  • 上传15mbit
  • 下载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直播,那么截至我目前的测试似乎至少有一个健康的流超过2分钟。我已经找到输出到我的nginx服务器,然后youtube直播中断。

我的nginx rtmp设置位于此链接https://pastebin.com/siE99Tv8

修改2

如果我将流推送到像restream这样的站点以将其流式传输到youtube,那么它似乎正在工作。测试了25分钟没有改变他们说坏视频容器或任何东西。所以我要说nginx部分归咎于它如何分发文件?不确定我做错了什么。我很确定ffmpeg至少不应该责怪

1 个答案:

答案 0 :(得分:0)

似乎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_rtmp_codec_module.c并替换该行:

ngx_string("Server"),

ngx_string("xtradata"),

然后重新编译nginx。