我正试图用云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