使用 ffmpeg 直播 2 小时后 YouTube 停止运行

使用 ffmpeg 直播 2 小时后 YouTube 停止运行

卡在这里了,我不知道如何让这个直播持续 24/7,请告诉我我在这里做错了什么。我正在使用的脚本

#! /bin/bash
#
# Diffusion youtube avec ffmpeg

# Configurer youtube avec une résolution 720p. La vidéo n'est pas scalée.

VBR="2500k"                                    # Bitrate de la vidéo en sortie
FPS="30"                                       # FPS de la vidéo en sortie
QUAL="ultrafast"                                  # Preset de qualité FFMPEG
YOUTUBE_URL="rtmp://a.rtmp.youtube.com/live2"  # URL de base RTMP youtube

FOLDER="video"                                    # Dossier source
KEY="youtube-key"                                     # Clé à récupérer sur l'event youtube

SOURCE=""
n=0
filter=""

for f in $FOLDER/*.mp4
do
  SOURCE="$SOURCE -i $f"
  filter="$filter [$n:v:0] [$n:a:0]"
  ((n++))
done

filter="$filter concat=n=$n:v=1:a=1 [v] [a]"

echo "ffmpeg $SOURCE -filter_complex '$filter'"

ffmpeg \
    -stream_loop -1 $SOURCE  -filter_complex "$filter" \
-map "[v]" -map "[a]" -deinterlace \
    -vcodec libx264 -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS * 2)) -b:v $VBR \
    -acodec libmp3lame -ar 44100 -threads 6 -qscale 3 -b:a 712000 -bufsize 512k \
    -f flv "$YOUTUBE_URL/$KEY"

我正在使用具有 512MB 内存和 2GB 的 VPS 来运行 FFmpeg,运行 Livestream 时 CPU 使用率达到 100%。当我在 youtube 上启动直播时,健康状态为绿色,然后 30 分钟后它变成红色,并显示此消息“YouTube 没有收到足够的视频”,任何帮助提示都非常感谢。

答案1

这个问题有两个方面:

  • 你眼前的问题是:你只有几乎足够的 CPU 马力进行转换。这意味着,您的视频总是会稍微回退时间,直到所有缓冲都用尽并且 YouTube 显示问题。您必须使用更多 CPU 或选择要求较低的编码器设置。
  • FFmpeg 和 24x7 流:事实证明,如果某个内部计数器或计时器翻转,ffmpeg 就会停滞。这种情况大约持续 44 天,ffmpeg 不会结束(可以通过循环解决),而只是停滞,即停留在那里不产生任何输出。我们通过仅将大约 1 天的部分时间提供给 FFmpeg 来解决这个问题,然后循环运行它,从而每天产生大约一次重启。YouTube 的缓冲将使最终用户完全看不到这一点

相关内容