初始化
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:hgdj/hj_utils/store_keys.dart';
|
||||
import 'package:hgdj/track_event_manager/device_service.dart';
|
||||
|
||||
import 'light_model.dart';
|
||||
|
||||
/// H.265(HEVC) 能力判断 + 反应式回退。
|
||||
///
|
||||
/// 两层防线,最坏结果都是"回落 H.264",不会黑屏:
|
||||
/// 1. 主动:启动时查芯片**硬解**能力([_hwSupport]),只在支持的机器上选 265(省带宽);
|
||||
/// 软解一律当不支持(软解 1080p HEVC 中低端机必卡)。
|
||||
/// 2. 反应式:万一芯片虚报硬解 / iOS 的 hev1 封装 / 海思类问题导致 265 放不出,
|
||||
/// 由播放器 catch 里调 [disableForDevice] 永久置位并落本地,之后该机只播 264。
|
||||
/// 与 video_view_type 的 platformView 机制同一套路(不预判机型,出错再降级+持久化)。
|
||||
class CodecSupport {
|
||||
static const _channel = MethodChannel(DeviceInfoService.naticeChannel);
|
||||
|
||||
/// 芯片是否硬解 H.265(内存态,构造播放器时同步读)。hardware
|
||||
static bool _hwSupport = false;
|
||||
|
||||
/// 本机是否已被反应式禁用 265(持久化)。
|
||||
static bool _deviceDisabled = false;
|
||||
|
||||
/// 最终是否使用 265:芯片硬解支持 且 未被反应式禁用。
|
||||
static bool get useH265 => _hwSupport && !_deviceDisabled;
|
||||
|
||||
/// 芯片硬解能力 / 本机是否已禁 265(诊断用只读)
|
||||
static bool get hwSupport => _hwSupport;
|
||||
|
||||
static bool get deviceDisabled => _deviceDisabled;
|
||||
|
||||
/// 启动时调用一次(main 里):查硬解能力 + 读本机禁用标记。
|
||||
/// 任何异常都按"不支持"处理 → 回落 264 最安全。
|
||||
static Future<void> init() async {
|
||||
_deviceDisabled = await lightKV.getBool(StoreKeys.H265_DISABLED) ?? false;
|
||||
try {
|
||||
_hwSupport =
|
||||
await _channel.invokeMethod<bool>('isH265HardwareSupported') ?? false;
|
||||
} catch (e) {
|
||||
_hwSupport = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// 播 265 失败且 platformView 也救不了时调用:本机永久回落 264 并落本地。
|
||||
/// 健康机(已禁用/从没启用过 265)都是空操作。返回 true 表示本次发生了禁用(值得回落重试)。
|
||||
static bool disableForDevice() {
|
||||
if (_deviceDisabled) return false;
|
||||
_deviceDisabled = true;
|
||||
lightKV.setBool(StoreKeys.H265_DISABLED, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user