当尝试使用云ubuntu-linux实例进行流传输时,ffmpeg流经常冻结(它保持活动状态,工作时间不超过30分钟)



我正试图用云ubuntu 22.04实例在Youtube上进行流媒体播放,但它在不超过30分钟后冻结,ffmpeg进程在后台继续运行,Youtube保持流媒体播放状态,没有视频,没有音乐,它只是在那里加载,冻结,我终止了进程,并在后台用nohup重新运行,过了很短时间后它再次冻结,来自CCD_ 2的日志文件仅包含以下内容的警告:[libx264 @ 0xaaaaee6feb60] VBV is incompatible with constant QP, ignored.我认为这些并不重要,但我在日志中看到它正常退出:Exiting normally, received signal 15.

我正在使用这个bash脚本进行流式传输:

#! /bin/bash
VBR="4500k"
FPS="24"
QUAL="ultrafast"
YOUTUBE_URL="rtmp://a.rtmp.youtube.com/live2"
KEY="XXXX-XXXX-XXXX-XXXX-XXXX"

VIDEO_SOURCE="/home/ubuntu/video.mp4"
AUDIO_SOURCE="/home/ubuntu/audio.mp3"
ffmpeg 
-re -f lavfi -i "movie=filename=$VIDEO_SOURCE:loop=0, setpts=N/(FRAME_RATE*TB)" 
-thread_queue_size 512 -i "$AUDIO_SOURCE" 
-map 0:v:0 -map 1:a:0 
-map_metadata:g 1:g 
-vcodec libx264 -pix_fmt yuv420p -preset $QUAL -crf 0 -r $FPS -g $(($FPS * 2)) -b:v $VBR 
-acodec libmp3lame -ar 44100 -threads 6 -crf 0 -b:a 320000 -bufsize 512k 
-f flv 
-flvflags no_duration_filesize 
"$YOUTUBE_URL/$KEY"

我在这方面没有经验,所以如果有人知道解决方案,请尽可能用命令详细解释。

因此,经过一些研究,我找到了一个答案,那就是我可以执行一个无限while循环,检查流媒体进程是否工作,如果不使用此脚本,则运行它:

但是,在此之前,我需要在tmux会话中运行该脚本,这样我就可以让它继续运行,并在该会话之外继续使用终端。

#! /bin/bash
VBR="4500k"
FPS="24"
QUAL="ultrafast"
YOUTUBE_URL="rtmp://a.rtmp.youtube.com/live2"
KEY="XXXX-XXXX-XXXX-XXXX-XXXX"
VIDEO_SOURCE="/home/Cinos/video.mp4"
while true;
do
if ! pgrep -x "ffmpeg" &> /dev/null 2>&1;
then
while read line; do
AUDIO_NAME="$line"
done < song.txt;
AUDIO_SOURCE="/home/Cinos/$AUDIO_NAME.mp3"
ffmpeg 
-re -stream_loop -1 -i "$VIDEO_SOURCE" 
-stream_loop -1 -i "$AUDIO_SOURCE" 
-drop_pkts_on_overflow 1 
-attempt_recovery 1 
-recover_any_error 1 
-map 0:v:0 -map 1:a:0 
-map_metadata:g 1:g 
-vcodec libx264 -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS * 2)) -b:v $VBR 
-acodec libmp3lame -ar 44100 -threads 6 -b:a 160k -bufsize 6000k 
-f flv 
-flvflags no_duration_filesize 
"$YOUTUBE_URL/$KEY"
else
sleep 5
fi
done

相关内容