Flutter Media 是 thienqo/flutter-skills 仓库中的一个技能,用于在 Flutter 项目中实现媒体相关功能。根据资料,其用途涵盖相机拍摄、二维码/条形码扫描、音频/视频录制与回放、音乐播放器、直播、通话以及屏幕共享。安装该技能无需服务商账号、服务器密钥、房间、流地址或相机/麦克风访问权限。
主要能力与工作方式:
一、建立媒体契约。使用时需阅读 pubspec.yaml、锁文件、SDK 约束、现有适配器/控制器、原生配置与测试,明确以下事项:任务是采集、录制文件回放、实时观看、广播还是交互式通话(图像缓冲流不等同于编码广播);来源与输出、格式/编解码、目标平台、权限、前后台要求以及中断或退出时的预期行为;直播场景还需明确服务所有权、参与者身份、主持人/观众权限以及证明远程媒体实际送达的依据。应优先使用当前 SDK 已支持的设施,避免随意新增播放器、音频会话所有者、信令栈或服务商;应检查特定版本的原生/浏览器要求,而非照抄较新版本的安装步骤或 API 名称;密钥应保留在授权服务边界内,不放入 Flutter 或日志。
二、按模式阅读参考。技能按功能划分为若干模式:采集与录制(相机、麦克风、媒体选择、变换、编码输出与恢复);二维码与条形码扫描(相机检测、重复抑制、载荷校验与手动输入);播放与流媒体(音频/视频控制器、源切换、缓冲、HLS/直播观看与浏览器限制);音乐播放(音乐队列、系统媒体控制与恢复收听进度);音频中断与路由(焦点、会话激活、用户暂停意图、通话与输出设备变化);直播(预览、开播、主持人/观众权限、送达阶段与结束直播);实时通话与屏幕共享(参与者/轨道、重连、设备选择、采集同意与屏幕共享设置)。仅当任务跨越多个模式边界时才阅读多个模式参考。
三、保持所有权明确。每个控制器、轨道、订阅、渲染器、临时文件和会话都应有一个生命周期所有者;应使废弃的异步工作失效,释放过期成功初始化所返回的资源,而非仅忽略其 UI 更新;应显式处理清理失败,并遵循 SDK 特定的独占硬件获取顺序;不应仅因应用或连接恢复就重新打开采集或恢复音频。需将权限拒绝、初始化、就绪/直播中、中断/重连、终端错误、用户停止和销毁等建模为不同结果;权限提示与媒体效果应放在 widget build 之外;只停止本功能拥有的资源,保护用户创作和保留的录制内容不被一次性测试清理。
四、闭合证据循环。对于实现或无工具计划,应在添加生命周期、焦点或恢复处理器之前,明确识别已解析的包/Flutter/原生契约检查与现有 SDK 职责;包的存在并不能确定谁已拥有这些效果。在受影响边界处说明停止/离开清理与聚焦的验收检查,包括仍需要的原生或双端点场景;将无法进行的检查与执行标记为待定,不得用虚假测试列表替代其无法证明的媒体行为。
五、相邻边界。网络层负责普通 HTTP/WebSocket/SSE 消息与上传传输,本技能负责音视频采集、回放与媒体会话;平台集成负责自定义原生桥接/插件,后台执行负责需要时的操作系统延续/调度,仅当边界变化时配对使用;认证/安全负责身份生命周期与更广泛威胁审计,媒体集成仍应遵守服务端强制发布权限与机密凭据;设备测试操作具体目标,性能负责测量卡顿/延迟/内存诊断,UI 设计负责视觉艺术方向。文档解析/PDF 编辑、通用文件管理与分享、纯文本聊天不在本技能范围内;媒体采集不授权上传或发布其输出。
适用场景:需要在 Flutter 应用中实现上述媒体能力,并希望遵循明确生命周期、权限与资源所有权约束的开发任务。限制:资料未提供具体安装命令、版本兼容列表、价格或平台支持细节,这些内容暂未提供。