基于Agora实现的Flutter视频会议App能否推流直播到Facebook?
有成熟可落地的实现方案,不需要重构你现有基于Agora的Flutter直播/会议代码,核心依托Agora原生的旁路推流能力对接Facebook Live的RTMP接入入口即可实现。
核心实现逻辑
Agora的音视频服务本身支持将频道内的实时音视频流转码为标准RTMP协议流,直接推送到兼容RTMP接入的第三方直播平台;而Facebook Live官方开放了RTMP推流的接入入口,两者协议完全兼容,不需要额外部署中转服务。
落地步骤
- 前置准备
首先在Agora控制台打开对应项目的旁路推流功能开关,这个功能是Agora原生自带的,不需要额外集成SDK,你现有项目里已经集成的Agora Flutter SDK本身就包含对应调用接口。
- 前置准备
- 获取Facebook侧推流凭证
引导用户完成Facebook账号授权后,调用Facebook开放平台的直播创建接口,生成单次直播有效的RTMP推流地址与流密钥,拼接为完整的推流URL,格式一般为rtmp://live-api-s.facebook.com:80/rtmp/[流密钥]。注意这个凭证每次开播都会刷新,不能重复使用。
- 获取Facebook侧推流凭证
- Flutter端推流逻辑实现
不需要引入额外的第三方推流库,直接调用Agora SDK的现有接口即可:
- 主播在Agora频道内成功开播后,调用
startRtmpStreamWithTranscoding方法,传入拼接好的Facebook RTMP地址启动推流 - 如果需要适配Facebook的直播展示规则,可以通过
LiveTranscoding配置项自定义混流参数:包括输出分辨率、码率、帧率、多连麦用户的画面布局、水印、全局音量等,推荐参数设置为720P分辨率、3000kbps码率、30fps,符合Facebook的直播画质要求,避免被平台二次压缩导致模糊 - 直播过程中通过
onRtmpStreamingStateChanged回调监听推流状态,处理推流中断、网络波动重连等逻辑,同步状态给前端用户 - 直播结束时调用
stopRtmpStream方法终止向Facebook的推流,同时调用Facebook接口结束对应直播实例即可
- Flutter端推流逻辑实现
踩坑提示
- 不要使用过期的Facebook推流密钥,每次开播前必须重新拉取新的凭证,否则会直接推流失败
- 如果你的服务面向海外用户,不需要额外做网络中转,Agora的海外节点和Facebook RTMP接入点的网络连通性是稳定的
- 涉及Facebook账号授权、直播权限申请的部分,需要严格遵守Facebook开放平台的隐私政策,提前申请
publish_video等必要权限,避免应用审核被拒
推流失败优先排查两个点:一是RTMP地址拼接是否正确、密钥是否在有效期;二是Agora侧的旁路推流功能是否已经开通,对应AppID有没有配置功能权限。
内容的提问来源于stack exchange,提问作者Thisal Vindula
相关产品推荐
相关产品推荐

