【问题标题】:FFMPEG to Youtube LiveFFMPEG 到 Youtube 直播
【发布时间】:2017-09-21 00:53:46
【问题描述】:

我有一个音频流,我使用 ffmpeg 使用以下命令将其以图像作为背景实时流式传输到 youtube,

ffmpeg -loop 1 -i x.jpg -i http://xxx.xxx.xxx.xxxx:5305/stream -c:a aac -s 1280x720 -ab 128k -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/xxxxx

但我在 youtube 上收到以下消息,

YouTube is not receiving enough video to maintain smooth streaming. As such, viewers will experience buffering 这会导致输出流中的缓冲。

有人知道怎么解决吗?

我们将不胜感激。

【问题讨论】:

  • 添加-g 50 以定期插入关键帧。

标签: video ffmpeg youtube video-streaming live-streaming


【解决方案1】:

经过大量试验和错误,以下解决方案非常完美。为确保它 24/7 全天候运行,请将其包装在某种描述的服务中。

这是最新版本的 FFMPEG,包括 -stream_loop -1。
背景是 mp4 文件。
http://localhost:3888 = 音频流。

ffmpeg -stream_loop -1 -i $MYPATH/background/$background \
-i http://localhost:3888 -filter:a "volume=$volume" \
-r 24 -g 48 -pix_fmt yuv420p -x264-params keyint=48:min-keyint=48:scenecut=-1 \
-s $size -b:v $bitrate -b:a 128k -ar 44100 -acodec aac \
-vcodec libx264 -preset superfast -bufsize 960k -crf 28 -threads 2 \
-f flv rtmp://a.rtmp.youtube.com/live2/$key

配置文件:

# Config File
background=out.mp4
size=1280x720
bitrate=1500k
key=----KEY----
volume=0.5

编辑——下面的旧解决方案

所以我有一个解决方案。

ffmpeg -re -loop 1 -framerate 2 -i test1.jpg -i https://xxxxxxx:8443/live.ogg -c:a aac -s 2560x1440 -ab 128k -maxrate 2048k -bufsize 2048k -framerate 30 -g 60 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/xxxxxxxxxxxxx

重要的部分是

-再

在开始时处理缓冲问题。
那么

-帧率 2

在“-loop 1”和图像之间。这很有效,我得到了一个没有缓冲的干净的高质量流。

希望这会有所帮助!

编辑 1

ffmpeg -re -loop 1 -framerate 2 -i test1.jpg -i https://xxxxxxxxxxx:8443/live.ogg -c:a aac -s 2560x1440 -ab 128k -vcodec libx264 -pix_fmt yuv420p -maxrate 2048k -bufsize 2048k -framerate 30 -g 2 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/xxxxxxxxxxxxx

好的,所以这个更新的版本应该可以解决几乎所有的流问题。

-vcodec libx264 -pix_fmt yuv420p

更改为 H.264 Codex 修复了该问题

-g 2

这解决了最终的缓冲问题。

【讨论】:

  • 你用的是什么版本的ffmpeg?
  • @moeiscool 应该可以在当前版本上运行,我还没有测试过!
  • 我的问题是我尝试了 3.3(静态构建)和 3.2.4(ppa).. 这是在 ubuntu 17 顺便说一句...它拒绝工作。当我启动 FFMPEG 时,它会在 youtube 上亮绿灯约 20 秒,然后变灰,什么都没有显示。最终它会说离线...留下一个视频上传到我的频道,可能会让我的所有用户都炸毁很多什么都没有:P
  • 我想知道是否可以从命令行隐藏 YouTube 密钥。像这样运行ffmpeg 可以使您的密钥对其他系统用户可见,他们可以执行ps -Af 并在进程列表中看到您的密钥(如果他们在系统上有足够的权限)。一种可能的解决方案是从文件中读取目标 YouTube 网址,这可能吗?
  • @AlexParamonov 这可能通过:ffmpeg ... "$YTUBE/$(cat keyfile)"?
【解决方案2】:

最后一个代码非常好,但我仍然在使用最新命令的 youtube Live 上收到有关“视频分辨率”的错误消息。我通过替换来修复它:

yuv420p with yuvj420p

我用ffprobe探测了jpg,它返回了上面的yuv420p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多