1

我有一个由 Liquidsoap+Icecast 在 DigitalOcean 液滴(Ubuntu 16.04)上流式传输的网络广播,我想将此音频流与带有 ffmpeg 的简单 jpeg 图像结合起来,将其转换为视频流并将其实时发送到 Facebook。

Facebook Live 规格:

视频格式:

我们接受最大 720p (1280 x 720) 分辨率、每秒 30 帧的视频。(或每 2 秒 1 个关键帧)。您必须在整个流中至少每两秒发送一次 I 帧(关键帧)。建议的最大比特率为 4000 Kbps。标题必须少于 255 个字符,否则流将失败。Live API 仅接受 H264 编码的视频和 AAC 编码的音频。

视频长度:

最长 240 分钟,连续直播除外(见上文)。预览流的最大长度为 240 分钟(通过实时对话或发布者工具)。240 分钟后,必须生成新的流密钥。

高级设置 :

像素纵横比:正方形。帧类型:逐行扫描。音频采样率:44.1 KHz。音频比特率:128 Kbps 立体声。比特率编码:CBR。

我试过的 ffmpeg 命令:

ffmpeg -loop 1 -i radio-background.jpg -thread_queue_size 20480 -i http://localhost:8000/radio -framerate 30 -r 30 -acodec aac -strict -2 -c:v libx264 -strict experimental -b:a 128k -pix_fmt yuvj444p -x264-params keyint=60 -b:v 256k -minrate 128k -maxrate 512k -bufsize 768k -f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/<fb-streaming-key>'

这实际上是有效的,因为 Facebook 接收实时视频并允许我发布它。但我不明白为什么几乎每 2 或 3 秒就会出现一次延迟。我让不同的人观看测试视频,每个人都遇到相同的问题:每 2 或 3 秒播放“冻结”半秒,似乎正在加载视频,我什至可以看到加载图标在屏幕上旋转。

我为以下选项尝试了不同的值组合:-thread_queue_size / -b:v / -minrate / -maxrate / -bufsize。似乎没有任何变化。

视频流对我来说是新的,我对之前列出的选项不太满意,所以我想我在这里遗漏了一些东西......

另外,请注意,icecast 音频流完美运行,并且根据 DigitalOcean 图表,服务器没有过载。所以我认为我的 ffmpeg 命令是错误的。

什么 ffmpeg 参数适用于这种情况?

4

1 回答 1

0

指定图像的帧速率。这将在输入项之前进行。

-r 30 -loop 1 -i radio-background.jpg

如果您的广播流已经是 aac,您可以只流式传输复制,无需重新编码音频。您可以使用 -c:a 副本。

-c:a copy

如果你仍然想使用 aac,你应该切换到使用 libfdk_aac。ffmpeg 默认使用 128k 比特率的音频,因此无需指定 -b:a

-c:a libfdk_aac

默认情况下,ffmpeg 将使用第一项的输入帧速率作为输出,因此您无需再指定帧速率。(您指定了两次输出帧速率。-framerate 30 和 -r 30 相同)

超快预设以获得更好的 CPU 性能、调整和像素格式。您也可以使用 -g 作为键。

-c:v h264 -preset ultrafast -tune stillimage -pix_fmt yuvj444p -g 60

设置配置文件和配置文件级别,bframes

-profile:v high444 -level 4.2

使用 -b:v 或 -minrate -maxrate -bufsize 但不能同时使用。

-b:v 768k

我们出去

-f flv rtmp://rtmp-api.facebook.com:80/rtmp/streamkey

现在把它们放在一起

    ffmpeg -r 30 -loop 1 -i radio-background.jpg \
-i http://localhost:port/mount -c:a libfdk_aac -c:v h264 -b:v 768k \
-preset ultrafast -tune stillimage -pix_fmt yuvj444p -g 60 \
-profile:v high444 -level 4.2 -f flv rtmp://rtmp-api.facebook.com:80/rtmp/streamkey
于 2017-07-24T08:10:00.697 回答