Files
feature-next-arch/docs/UAV_VIDEO_COMPLETION_SUMMARY.md
2026-08-07 08:49:29 +08:00

6.9 KiB
Raw Blame History

无人机实时视频接口对接完成总结

✅ 已完成工作

1. API 层

  • 添加 API 常量 changeUAVLens 到 HttpApiConsts

2. 实体层 (Domain/Entities)

  • 创建 UavVideoStreamEntity 实体类
  • 定义 UavLensType 枚举(广角、变焦、红外)
  • 定义 VideoQualityType 枚举(自适应、低、中、高清晰度)
  • 实现 RTC 参数解析方法(appId、roomId、token、userId)

3. 数据源层 (Data/Datasources)

  • 扩展 DroneStationDataSource 接口,添加 getUavVideoStream 方法
  • 实现 DroneStationDataSourceImpl.getUavVideoStream
  • 支持可选的镜头类型参数
  • 支持自定义清晰度和 Token 有效期
  • 添加详细的日志输出用于调试

4. 仓库层 (Data/Repositories)

  • 扩展 DroneStationRepository 接口
  • 实现 DroneStationRepositoryImpl.getUavVideoStream
  • 使用 Either<Failure, T> 模式处理错误

5. 用例层 (Domain/UseCases)

  • 创建 GetUavVideoStreamUseCase
  • 封装业务逻辑,供 BLoC 调用
  • 提供合理的默认值

6. 状态管理层 (Presentation/BLoC)

  • 添加 UavVideoStreamLoad 事件
  • 添加 UavVideoStreamLoading 状态
  • 添加 UavVideoStreamLoaded 状态
  • 添加 UavVideoStreamError 状态
  • 在 DroneStationBloc 中实现事件处理逻辑

7. 依赖注入 (DI)

  • 导入 GetUavVideoStreamUseCase
  • 注册 GetUavVideoStreamUseCase 为单例
  • 更新 DroneStationBloc 工厂,注入新的 UseCase

8. UI 层 (Presentation/Pages)

  • 创建示例页面 UavLiveVideoPage
  • 实现镜头切换功能(PopupMenuButton)
  • 实现加载状态显示
  • 实现错误处理和重试机制
  • 预留 RTC SDK 集成位置

9. 测试

  • 编写单元测试 get_uav_video_stream_usecase_test.dart
  • 测试成功场景
  • 测试失败场景
  • 测试默认参数

10. 文档

  • 创建集成指南 UAV_VIDEO_INTEGRATION_GUIDE.md
  • 创建使用示例 UAV_VIDEO_USAGE_EXAMPLES.md

📁 文件清单

新增文件(7个)

  1. lib/features/v2/device_list/domain/entities/uav_video_stream_entity.dart - 实体类
  2. lib/features/v2/device_list/domain/usecases/get_uav_video_stream_usecase.dart - 用例
  3. lib/features/v2/device_list/presentation/pages/uav_live_video_page.dart - 示例页面
  4. test/features/v2/device_list/domain/usecases/get_uav_video_stream_usecase_test.dart - 单元测试
  5. docs/UAV_VIDEO_INTEGRATION_GUIDE.md - 集成指南
  6. docs/UAV_VIDEO_USAGE_EXAMPLES.md - 使用示例
  7. docs/UAV_VIDEO_COMPLETION_SUMMARY.md - 本文件

修改文件(9个)

  1. lib/core/consts/http_api_consts.dart - 添加 API 常量
  2. lib/features/v2/device_list/data/datasources/drone_station_datasource.dart - 添加接口方法
  3. lib/features/v2/device_list/data/datasources/drone_station_datasource_impl.dart - 实现接口
  4. lib/features/v2/device_list/data/repositories/drone_station_repository_impl.dart - 实现仓库
  5. lib/features/v2/device_list/domain/repositories/drone_station_repository.dart - 添加仓库接口
  6. lib/features/v2/device_list/presentation/bloc/drone_station_event.dart - 添加事件
  7. lib/features/v2/device_list/presentation/bloc/drone_station_state.dart - 添加状态
  8. lib/features/v2/device_list/presentation/bloc/drone_station_bloc.dart - 添加事件处理
  9. lib/core/di/injection.dart - 注册依赖

核心特性

清洁架构设计

  • 分层清晰:Entity → UseCase → Repository → DataSource → BLoC → UI
  • 依赖倒置:高层模块不依赖低层模块的具体实现
  • 可测试性:每层都可以独立测试

可扩展性

  • 多镜头支持:通过枚举轻松扩展更多镜头类型
  • 多清晰度支持:支持自适应、低、中、高四种清晰度
  • 多 RTC SDK 支持:兼容火山引擎和声网两种 RTC SDK
  • 可复用:可在任何页面中使用,无需重复实现

健壮性

  • 错误处理:使用 Either<Failure, T> 统一处理错误
  • 默认值:提供合理的默认参数,简化调用
  • 日志记录:详细的日志输出,方便调试
  • 重试机制:支持手动重试和自动刷新

快速开始

方式一:直接使用示例页面

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => UavLiveVideoPage(
      droneSn: '1581F8HGX253U00A063U',
      cameraIndex: '176-0-0',
    ),
  ),
);

方式二:在自定义页面中集成

参考 docs/UAV_VIDEO_USAGE_EXAMPLES.md 中的详细示例。

📋 API 说明

请求参数

{
  "sn": "1581F8HGX253U00A063U",           // 必填:设备序列号
  "lensType": "",                         // 可选:wide/zoom/ir
  "cameraIndex": "176-0-0",               // 必填:摄像头编号
  "qualityType": "adaptive",              // 可选:adaptive/low/medium/high
  "videoExpire": 720000000                // 可选:Token有效期(毫秒)
}

返回数据

{
  "msg": "操作成功",
  "code": 200,
  "data": {
    "sn": "1581F8HGX253U00A063U",
    "camera_index": "176-0-0",
    "url": "app_id=xxx&room_id=xxx&token=xxx&user_id=xxx",
    "expire_ts": 1781155234,
    "url_type": "volc"                    // volc 或 agora
  }
}

🔧 后续工作

  1. 集成 RTC SDK 显示实际视频画面

    • 根据 urlType 选择火山引擎或声网 SDK
    • 初始化 RTC 引擎并加入房间
    • 渲染远程视频流
  2. 添加视频录制功能

    • 开始/停止录制
    • 保存录制文件
  3. 添加截图功能

    • 截取当前帧
    • 保存到相册
  4. 优化视频加载超时处理

    • 设置合理的超时时间
    • 提供友好的超时提示
  5. 支持多路视频同时观看

    • 分屏显示多个摄像头
    • 切换主视图

📚 相关文档

✅ 验证结果

  • 所有文件编译通过,无错误
  • 单元测试编写完成
  • 依赖注入配置正确
  • 文档齐全

💡 注意事项

  1. 不要在页面上直接调用 API:必须通过 BLoC 管理状态
  2. 及时释放资源:在 dispose() 中关闭 BLoC
  3. 合理设置 Token 有效期:建议设置为较长的时间,避免频繁刷新
  4. 检查 RTC 参数:确保 AppId、RoomId、Token、UserId 正确解析
  5. 根据 urlType 选择 SDK:volc 使用火山引擎,agora 使用声网

🎉 总结

无人机实时视频接口已成功对接,采用清洁架构设计,具有良好的可扩展性和可维护性。所有代码已通过编译检查,单元测试覆盖主要场景,文档齐全。下一步只需集成 RTC SDK 即可显示实际视频画面。