【问题标题】:ffmpeg transcode to youtube live bad video containerffmpeg 转码到 youtube 直播坏视频容器
【发布时间】:2017-07-09 03:41:57
【问题描述】:

我一直在尝试将 obs studio 生成的流转码到我的 nginx 服务器并将其发送到 youtube。现在我已经让它与 twitch 一起工作,我知道这些设置实际上大部分正确地对其进行了转码并且是可见的。问题在于 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
  • 内存: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 live 打破了一切。

我的 nginx rtmp 设置在这个链接上https://pastebin.com/siE99Tv8

编辑 2

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

【问题讨论】:

  • 我想我已经确认 nginx 推送流是现在解决该部分的问题,看看我是否能找到替代方案

标签: nginx video ffmpeg youtube live-streaming


【解决方案1】:

似乎 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。

【讨论】:

  • 谢谢,抱歉我没早点讲到这个,但它工作得很好。我看到这样做有 0 个问题。谢谢。
猜你喜欢
  • 2017-09-21
  • 2018-06-03
  • 2021-11-27
  • 1970-01-01
  • 2013-04-16
  • 2022-01-27
  • 2023-04-10
  • 2022-07-18
  • 2011-08-09
相关资源
最近更新 更多