我有一个由 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 参数适用于这种情况?