卡在这里了,我不知道如何让这个直播持续 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 的缓冲将使最终用户完全看不到这一点