1.视频对讲优化--优化帧处理定时器启动逻辑和优化缓冲区动态调整

2.排查bug并优化
This commit is contained in:
sky_min 2025-11-21 17:29:40 +08:00
parent b97d7006b3
commit cddf11485f
7 changed files with 155 additions and 77 deletions

View File

@ -16,13 +16,12 @@ import 'package:star_lock/talk/starChart/entity/star_chart_register_node_entity.
import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/translations/current_locale_tool.dart';
import 'package:star_lock/tools/jverify_one_click_login.dart';
import '../../main/lockMian/lockMain/lockMain_logic.dart';
import '../../mine/mine/starLockMine_logic.dart';
import '../../network/api_repository.dart';
import '../../tools/dateTool.dart';
import '../../tools/eventBusEventManage.dart';
import '../../tools/jverify_one_click_login.dart';
import '../../tools/showTipView.dart';
import '../../tools/storage.dart';
import '../register/entity/checkIP_entity.dart';
@ -104,39 +103,75 @@ class StarLockLoginLogic extends BaseGetXController {
}
Future<void> oneClickLoginAction(BuildContext context) async {
// SDK是否初始化成功
final bool isInitSuccess = await JverifyOneClickLoginManage().isInitSuccess();
if (!isInitSuccess) {
showToast('一键登录服务未初始化,请稍后重试或使用账号密码登录'.tr);
return;
}
//
final bool isSupported = await JverifyOneClickLoginManage().checkVerifyEnable();
if (!isSupported) {
showToast('当前网络环境不支持一键登录,请使用账号密码登录'.tr);
return;
}
await JverifyOneClickLoginManage().loginAuth(context,(e) async {
final int? code = e.code;
final String? content = e.message;
//
AppLog.log('JVListenerEvent完整信息: ${e.toMap()}');
AppLog.log('code:$code content:$content');
//
final Map eventMap = e.toMap();
AppLog.log('所有返回字段: $eventMap');
// final String operator = map['operator'];
AppLog.log('1111code:$code content:$content');
switch (code) {
case 6000:
final LoginEntity entity = await ApiRepository.to.oneClickLogin(
loginType: '3',
loginToken: content ?? '',
deviceInfo: state.deviceInfoMap);
if (entity.errorCode!.codeIsSuccessful) {
ApmHelper.instance.trackEvent('login_result', {
'account': state.emailOrPhone.value,
'date': DateTool().getNowDateWithType(1),
'login_res': '成功',
});
Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
eventBus.fire(MineInfoChangeRefreshUI());
if (Get.isRegistered<LockMainLogic>()) {
Get.find<LockMainLogic>().getStarLockInfo(isUnShowLoading: true);
}
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); //
} else {
ApmHelper.instance.trackEvent('login_result', {
'account': state.emailOrPhone.value,
'date': DateTool().getNowDateWithType(1),
'login_res': '${entity.errorCode}--${entity.errorMsg}',
});
case 8000: // SDK初始化成功但登录失败
showToast('一键登录服务初始化中,请稍后重试'.tr);
break;
case 6000: // token
if (content == null || content.isEmpty) {
showToast('获取手机号失败,请重试'.tr);
return;
}
state.emailOrPhone.value = content; //
try {
final LoginEntity entity = await ApiRepository.to.oneClickLogin(
loginType: '3',
loginToken: content,
deviceInfo: state.deviceInfoMap
).timeout(const Duration(seconds: 10));
//
if (entity.errorCode!.codeIsSuccessful) {
ApmHelper.instance.trackEvent('login_result', {
'account': state.emailOrPhone.value,
'date': DateTool().getNowDateWithType(1),
'login_res': '成功',
});
Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
eventBus.fire(MineInfoChangeRefreshUI());
if (Get.isRegistered<LockMainLogic>()) {
Get.find<LockMainLogic>().getStarLockInfo(isUnShowLoading: true);
}
Get.offNamedUntil(Routers.starLockMain, (Route route) => false);
BlueManage().scanDevices.clear(); //
} else {
ApmHelper.instance.trackEvent('login_result', {
'account': state.emailOrPhone.value,
'date': DateTool().getNowDateWithType(1),
'login_res': '${entity.errorCode}--${entity.errorMsg}',
});
}
} on TimeoutException {
showToast('请求超时,请检查网络后重试'.tr);
}
break;
case 6001: // token失败
showToast('获取登录凭证失败,请重试或使用账号密码登录'.tr);
break;
case 6002:
// showToast('用户取消一键登录'.tr);
@ -188,23 +223,34 @@ class StarLockLoginLogic extends BaseGetXController {
late StreamSubscription _agreePrivacySubscription;
void _initEventListen() {
// _agreePrivacySubscription = eventBus
// .on<AgreePrivacyAgreement>()
// .listen((AgreePrivacyAgreement event) async {
// /// ip如果属于国内才进行初始化
// final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: '');
// String currentLanguage =
// CurrentLocaleTool.getCurrentLocaleString(); //
// // ip是国内的且选的是中文才初始化一键登录
// if (entity.data!.abbreviation?.toLowerCase() == 'cn' &&
// currentLanguage == 'zh_CN') {
// //
// await JverifyOneClickLoginManage();
// state.isCheckVerifyEnable.value =
// await JverifyOneClickLoginManage().checkVerifyEnable();
// AppLog.log('一键登录初始化认证结果:${state.isCheckVerifyEnable.value}');
// }
// });
_agreePrivacySubscription = eventBus
.on<AgreePrivacyAgreement>()
.listen((AgreePrivacyAgreement event) async {
/// ip如果属于国内才进行初始化
final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: '');
String currentLanguage =
CurrentLocaleTool.getCurrentLocaleString(); //
// ip是国内的且选的是中文才初始化一键登录
if (entity.data!.abbreviation?.toLowerCase() == 'cn' &&
currentLanguage == 'zh_CN') {
// SDK初始化调用
await JverifyOneClickLoginManage().initSDK(
onSuccess: () {
AppLog.log('极光认证SDK初始化成功');
},
onFailure: () {
AppLog.log('极光认证SDK初始化失败');
}
);
//
// await JverifyOneClickLoginManage();
//
await Future.delayed(Duration(seconds: 1));
state.isCheckVerifyEnable.value =
await JverifyOneClickLoginManage().checkVerifyEnable();
AppLog.log('一键登录初始化认证结果:${state.isCheckVerifyEnable.value}');
}
});
}
@override

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:jverify/jverify.dart';
import 'package:star_lock/login/login/starLock_login_state.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/storage.dart';
@ -33,11 +34,8 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
AppFirstEnterHandle().getAppFirstEnter(isAgreePrivacy);
//
if (state.isChinaUser.value) {
// state.getPhoneNumber();
}
});
logic.onInit();
// StartChartManage().init();
}

View File

@ -4,6 +4,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockSet/checkingInInfoData_entity.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_state.dart';
@ -36,6 +37,16 @@ class _LockSetPageState extends State<LockSetPage>
Future<void> getHttpData() async {
logic.getLockSettingInfoData().then((LockSetInfoEntity value) {
//
final faceAntiMisopenTime = value.data?.lockSettingInfo?.faceEnErrUnlock;
final int motorTorsion = state.lockSetInfoData.value.lockSettingInfo?.motorTorsion ?? 0;
final int autoLockSeconds = state.lockSetInfoData.value.lockSettingInfo?.autoLockSecond ?? 0;
debugPrint('=== 锁面容防误开时间 ===');
debugPrint('Face Anti-Misopen Time: $faceAntiMisopenTime');
debugPrint('=== 锁电机功率设置 ===');
debugPrint('Motor Torsion Setting: $motorTorsion');
debugPrint('=== 锁自动闭锁时间 ===');
debugPrint('Auto Lock Time: ${autoLockSeconds}s');
if (mounted) {
setState(() {});
}

View File

@ -162,16 +162,16 @@ class StartChartManage {
}
//
Future<void> establishConnection({required String ToPeerId}) async {
//
await init(); //
//
await Future.wait([
startSendingRbcuInfoMessages(ToPeerId: ToPeerId),
startSendingRbcuProbeTMessages(),
] as Iterable<Future>);
}
// Future<void> establishConnection({required String ToPeerId}) async {
// //
// await init(); //
//
// //
// await Future.wait([
// startSendingRbcuInfoMessages(ToPeerId: ToPeerId),
// startSendingRbcuProbeTMessages(),
// ] as Iterable<Future>);
// }
///
Future<void> _clientRegister(LoginData? loginData) async {
@ -469,7 +469,8 @@ class StartChartManage {
//
talkRequestTimer ??= Timer.periodic(
Duration(
milliseconds: 500,
milliseconds: _defaultIntervalTime,
// milliseconds: 500,
),
(Timer timer) async {
AppLog.log('发送对讲请求:${ToPeerId}');
@ -543,6 +544,10 @@ class StartChartManage {
_log(text: '心跳已经开始了. 请勿重复发送心跳包消息');
return;
}
//
// if (_heartBeatTimer != null) {
// _heartBeatTimer?.cancel();
// }
_heartBeatTimer ??= Timer.periodic(
Duration(
seconds: heartbeatIntervalTime,
@ -731,14 +736,13 @@ class StartChartManage {
FromPeerId: FromPeerId,
MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true),
);
try {
await _sendMessage(message: message);
} catch (e) {
//
AppLog.log('发送挂断消息失败: $e');
//
}
// try {
// await _sendMessage(message: message);
// } catch (e) {
// //
// AppLog.log('发送挂断消息失败: $e');
// //
// }
}
//
@ -1070,6 +1074,23 @@ class StartChartManage {
void _handleUdpResultData(ScpMessage scpMessage) {
final int payloadType = scpMessage.PayloadType ?? 0;
final int messageType = scpMessage.MessageType ?? 0;
//
if (payloadType == PayloadTypeConstant.remoteUnlock) {
AppLog.log('收到蓝牙设备回应消息,${scpMessage.PayloadType}');
//
if (scpMessage.Payload != null && scpMessage.Payload!.isNotEmpty) {
//
final List<int> payload = scpMessage.Payload!;
if (payload.length > 2) {
final int errorCode = payload[2];
if (errorCode == 6) {
// "网关正忙,请稍后再试"
AppLog.log('网关正忙,请稍后再试');
}
}
}
}
try {
final ScpMessageHandler handler = ScpMessageHandlerFactory.createHandler(payloadType);
if (messageType == MessageTypeConstant.Req) {

View File

@ -64,14 +64,16 @@ class AppLifecycleObserver extends WidgetsBindingObserver {
//
final status = StartChartManage().talkStatus.status;
if (status == TalkStatus.passiveCallWaitingAnswer ||
if ((status == TalkStatus.passiveCallWaitingAnswer ||
status == TalkStatus.proactivelyCallWaitingAnswer ||
status == TalkStatus.answeredSuccessfully ||
status == TalkStatus.uninitialized) {
// Get.back(); //
status == TalkStatus.answeredSuccessfully) &&
Get.currentRoute != '/StarLockRegisterPage') { //
Get.back();
}
//
if (status != TalkStatus.uninitialized) {
StartChartManage().destruction();
}
//
// StartChartManage().destruction();
_readMessageRefreshUIEvent?.cancel();
}

View File

@ -113,7 +113,7 @@ class TalkViewNativeDecodeState {
// H264帧缓冲区相关
final List<Map<String, dynamic>> h264FrameBuffer = <Map<String, dynamic>>[]; // H264帧缓冲区
final int maxFrameBufferSize = 25; //
int maxFrameBufferSize = 25; //
int targetFps = 25; // ,native的缓冲区
Timer? frameProcessTimer; //
bool isProcessingFrame = false; //

View File

@ -63,7 +63,7 @@ class JverifyOneClickLoginManage {
}
jverify.setup(
appKey: appKey, //"你自己应用的 AppKey",
channel: 'devloper');
channel: 'developer');
///
jverify.addAuthPageEventListener((JVAuthPageEvent event) {
@ -100,7 +100,7 @@ class JverifyOneClickLoginManage {
return false;
}
final Map map = await jverify.checkVerifyEnable();
print('登录 sdk 初始化结果:$map');
print('登录 sdk 初始化结果:$map');
final bool result = map[f_result_key];
return result;
}