feat(connection): 增加远程视频录制、分辨率/帧率切换及高刷适配

- 新增 VideoRecorder 基于 flutter_webrtc MediaRecorder 录制远程视频为 MP4
- 新增 ControlMessageDecoder 解析被控端上报的 REPORT_* protobuf 消息
- 连接控制器支持分辨率/帧率切换、录制状态管理与远程上报处理
- 远程控制页新增更多菜单(静音/分辨率/帧率/录制),并统一退出时断开连接
- WebRTC 编排器在 DataChannel 打开及媒体就绪后主动请求默认分辨率,解决黑屏问题
- 新增 DisplayModeUtil 在 Android 上启用最高刷新率
- 登出时失效设备相关 Provider,避免切换账号后读到旧缓存
This commit is contained in:
TongTongStudio
2026-08-27 11:39:42 +08:00
parent 41a514e9cc
commit bfb106f1fb
13 changed files with 1267 additions and 514 deletions

View File

@@ -0,0 +1,35 @@
import 'dart:io' show Platform;
import 'package:flutter_displaymode/flutter_displaymode.dart';
/// 高刷新率(高刷)适配工具。
///
/// 部分 Android 设备出于省电考虑,默认不会启用屏幕的最高刷新率
/// (如 120Hz / 144Hz导致 Flutter 渲染帧率被系统限制在 60Hz 以下。
/// 通过 [FlutterDisplayMode] 主动将显示模式切换到设备支持的最高刷新率,
/// 从而提升动画与滚动流畅度。
///
/// - Android通过 `flutter_displaymode` 请求最高刷新率模式。
/// - iOSProMotion 设备由系统 + Flutter 引擎自动匹配(无需额外配置,
/// `Info.plist` 中已设置 `CADisableMinimumFrameDurationOnPhone`)。
class DisplayModeUtil {
const DisplayModeUtil._();
/// 在应用启动时调用,将 Android 屏幕切换到最高刷新率。
///
/// 保持当前分辨率不变,仅将刷新率提升到最高可用档位(如 60 → 120Hz
/// 非关键流程,失败仅打印日志,不阻塞启动。仅在 Android 平台生效。
static Future<void> enableBestDisplayMode() async {
if (!Platform.isAndroid) {
return;
}
try {
// 官方便捷方法:在当前分辨率下选择最高刷新率的显示模式。
await FlutterDisplayMode.setHighRefreshRate();
} catch (e) {
// 高刷适配为可选优化,失败不影响主流程。
// ignore: avoid_print
print('enableBestDisplayMode failed: $e');
}
}
}