You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Flutter应用推流并在另一Flutter应用接收播放

Flutter 直播推流+播放端实现方案

一、适用流媒体传输协议

根据你的场景需求,推荐优先选择成熟度高、适配成本低的协议组合,不同协议的适用场景如下:

  • 推流协议:
    • RTMP:目前生态最完善的推流协议,全平台兼容,普通直播场景延迟在1~3s,新手入门优先选这个
    • SRT:抗丢包能力强,弱网环境下稳定性优于RTMP,延迟可控制在500ms以内,适合户外移动推流场景
    • WebRTC:极致低延迟,端到端延迟可到200ms以内,适合需要实时互动的直播场景,但配置复杂度更高
  • 拉流协议:
    • HTTP-FLV:延迟较低(1~3s),加载速度快,配合RTMP推流使用门槛低
    • HLS:苹果生态原生支持,兼容性最好,但延迟较高(3~10s),适合对延迟要求不高的场景
    • WebRTC:和推流端配套使用,实现低延迟拉流

新手入门推荐组合:RTMP推流 + HTTP-FLV拉流,落地成本最低,最快跑通完整流程。

二、可使用的第三方开发包

推流端(管理端)适用包

  • flutter_rtmp_publisher:双端(iOS/Android)支持,封装成熟,原生性能好,同时支持摄像头推流、本地文件推流,配置简单,新手友好
  • live_push:除基础推流能力外,还支持滤镜、水印、动态码率调整,适合需要自定义直播效果的场景
  • flutter_webrtc:如果选用WebRTC协议做低延迟直播,可以使用这个包,同时支持推流和拉流能力

播放端适用包

  • fijkplayer:基于ijkplayer封装,国内开发者使用广泛,支持几乎所有常见流媒体协议,支持软硬解码切换,性能稳定,轻量高效
  • flutter_vlc_player:基于VLC封装,兼容性极强,对冷门格式和协议的支持度更高
  • media_kit:新一代跨平台多媒体播放库,除移动端外还支持桌面端,性能优于前两个方案,文档完善

三、完整实现路径

1. 前置准备:搭建流媒体服务

你需要先部署流媒体服务作为推流和拉流的中转节点:

  • 本地开发阶段:用nginx-rtmp-module搭建本地服务,支持RTMP推流入站,自动转封装输出HTTP-FLV、HLS拉流地址,部署成本极低
  • 生产环境阶段:用开源的SRS流媒体服务,并发能力更强,支持更多协议,自带弱网优化、转码等能力

2. 管理端(推流端)开发

  1. 权限配置:Android端在AndroidManifest.xml中配置摄像头、麦克风、存储访问权限,iOS端在Info.plist中添加对应权限的使用说明
  2. 功能开发:
    • 摄像头推流:调用推流包的采集接口,配置分辨率、码率、帧率等参数,填入流媒体服务的RTMP推流地址,触发推流即可
    • 本地文件推流:调用系统文件选择能力获取本地音视频文件,传入推流包的文件推流接口,配置是否循环播放等参数后发起推流
  3. 状态监听:添加推流状态回调,实现推流成功、网络断开、弱网警告等用户提示

注意:大部分推流包的本地文件推流仅支持MP4、FLV等常见封装格式,建议提前做文件格式校验,避免推流失败。

3. 播放端开发

  1. 集成选中的播放包,根据你的延迟需求配置播放器缓冲参数:追求低延迟可缩小缓冲大小,追求播放流畅度可适当调大缓冲
  2. 填入流媒体服务对应的拉流地址,调用播放接口即可渲染直播画面
  3. 添加播放状态监听,实现加载中、缓冲中、播放失败、断流重连等逻辑

4. 测试优化

  • 先在内网环境测试推流、拉流的连通性,确认流程跑通
  • 测试弱网场景下的表现,调整推流码率、播放缓冲参数平衡流畅度和延迟
  • 适配不同机型的权限、摄像头、编码兼容性问题,尤其是Android不同系统版本的适配

内容的提问来源于stack exchange,提问作者Reshnu chandran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:54:03