feat(connection): 增加远程视频录制、分辨率/帧率切换及高刷适配
- 新增 VideoRecorder 基于 flutter_webrtc MediaRecorder 录制远程视频为 MP4 - 新增 ControlMessageDecoder 解析被控端上报的 REPORT_* protobuf 消息 - 连接控制器支持分辨率/帧率切换、录制状态管理与远程上报处理 - 远程控制页新增更多菜单(静音/分辨率/帧率/录制),并统一退出时断开连接 - WebRTC 编排器在 DataChannel 打开及媒体就绪后主动请求默认分辨率,解决黑屏问题 - 新增 DisplayModeUtil 在 Android 上启用最高刷新率 - 登出时失效设备相关 Provider,避免切换账号后读到旧缓存
This commit is contained in:
35
lib/core/utils/display_mode_util.dart
Normal file
35
lib/core/utils/display_mode_util.dart
Normal 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` 请求最高刷新率模式。
|
||||
/// - iOS:ProMotion 设备由系统 + 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');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user