如何为Flutter中的chewie播放器添加视频投屏功能
基于Chewie的Flutter视频播放器添加投屏功能实现步骤
Chewie本身是基于video_player封装的UI层组件,没有自带投屏能力,你需要按以下步骤修改实现:
第一步:补充投屏基础能力
- 先集成本地设备发现+投屏控制能力:可通过
multicast_dns实现局域网DLNA/AirPlay设备扫描,或直接引入封装好的投屏功能包,核心要拿到三类能力:可投屏设备列表获取、指定设备播放视频、投屏状态/进度控制。 - 提前配置平台权限:安卓端需要申请网络权限、WiFi状态权限,iOS端需要申请本地网络权限,否则无法扫描到局域网内的投屏设备。
第二步:在Chewie控制栏添加投屏入口
你可以选择两种方案实现,不需要修改Chewie源码:
方案1:快速追加按钮(无需重写控制栏)
直接用ChewieController内置的additionalActions参数,在默认控制栏的操作区直接追加投屏按钮:
ChewieController( videoPlayerController: _videoPlayerController, // 追加投屏按钮到控制栏右上角 additionalActions: [ IconButton( icon: const Icon(Icons.cast, color: Colors.white), onPressed: () { // 点击弹出可投屏设备选择列表 _showCastDeviceSelector(); }, ) ], // 保留你原有其他配置 autoPlay: false, looping: false, )
方案2:自定义控制栏(适合需要更多定制的场景)
- 复制Chewie默认的
MaterialControls/CupertinoControls源码,在你想要的位置添加投屏按钮和点击逻辑 - 初始化ChewieController时指定自定义控制栏即可:
ChewieController( videoPlayerController: _videoPlayerController, // 替换默认控制栏为你自定义的带投屏按钮的控制栏 customControls: const YourCustomCastControls(), )
第三步:投屏逻辑联动
- 用户选好投屏设备后,先暂停本地
videoPlayerController的播放,可选择隐藏本地播放器画面或改成小窗悬浮展示 - 调用投屏能力的播放接口,传入当前视频的播放地址、当前播放进度、音量等参数,直接在目标设备上拉起播放
- 投屏过程中控制栏的暂停、快进、音量调节等操作,直接转发给投屏控制接口即可,不需要再操作本地的
video_player - 退出投屏时,先拿到投屏设备的当前播放进度,同步给本地
videoPlayerController后恢复本地播放即可
注意事项
- 受版权保护的加密视频源如果没有开放跨设备播放权限,会出现投屏后无法播放的问题,需要提前确认你的视频地址支持跨设备访问
- 部分特殊协议的视频流需要转成投屏设备支持的格式后再推送播放
内容的提问来源于stack exchange,提问作者ishan weerakoon
相关产品推荐
相关产品推荐

