FFmpeg在YouTube直播时停止推流

3

我会更新这个问题。

ffmpeg -version

ffmpeg -version
ffmpeg version 4.3.1-4ubuntu1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10 (Ubuntu 10.2.0-9ubuntu2)

我使用ffmpeg运行此命令进行向YouTube的流媒体传输;

ffmpeg -y -threads 12 \
-loop 1 -framerate 30 -re \
-i ./1280x720.jpg \
-i ./audio.mp3 \
-video_size 1280x720 \
-vcodec libx264 -pix_fmt yuv420p \
-b:v 4500k -maxrate 5500k -bufsize 22000k \
-preset ultrafast -crf 23 -tune stillimage \
-b:a 128k -ar 44100 -ac 2 -acodec aac \
-filter_complex "dynaudnorm=f=150:g=15" \
-r 30 -g 60 \
-f flv rtmp://a.rtmp.youtube.com/live2/xxxx 2>&1 | tee _LOG

流式传输在45-53分钟时非常优秀,但随后我会从ffmpeg得到这样的错误:

[flv @ 0x56077027cd80] Delay between the first packet and last packet in the muxing queue is 10034000 > 10000000: forcing output

此时 YouTube 开始显示“未接收到数据,流将结束”,随后流也确实结束了。

以下是完整日志:http://0x0.st/-zUH.txt


日志文件大小为41M,我应该上传到哪里? - ohroblot
我更新了问题,并附上了完整的日志文件。 - ohroblot
我更新了问题,提供了ffmpeg版本,重新运行了命令并生成了完整的日志。请看一下。 - ohroblot
1个回答

4

你的MP3音频时长为00:49:57.42,当它播放完后,流媒体会出现问题。使用-stream_loop -1来循环音频,并加上-re以实时读取输入:

ffmpeg -y \
-loop 1 -framerate 30 -re -i ./1280x720.jpg \
-re -stream_loop -1 -i ./audio.mp3 \
-c:v libx264 -pix_fmt yuv420p \
-b:v 4500k -maxrate 5500k -bufsize 22000k \
-preset ultrafast -tune stillimage \
-b:a 128k -ar 44100 -ac 2 -c:a aac \
-filter_complex "dynaudnorm=f=150:g=15" \
-g 60 -f flv rtmp://a.rtmp.youtube.com/live2/xxxx

如果您希望音频结束时流也随之结束,可以删除-re -stream_loop -1并添加输出选项-shortest

无关的更改:

  • 不需要设置-threads,让ffmpeg自动选择即可。
  • -video_size 1280x720是某些解复用器的输入选项,在您的命令中没有作用。已删除。您的输入已经是1280x720了:否则,请参见使用ffmpeg调整视频大小以适应特定大小
  • -b:v-crf是互斥的。在您的情况下,忽略了-b:v。对于流式处理,您可能希望使用-b:v。已删除-crf
  • 您已经使用-framerate 30设置了帧率,因此不需要-r 30。已删除。
  • 建议使用最慢的-preset,以使编码速度足够快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接