From e4534e8a2879565f0b75d9627cc9a3be7b24d4a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDaisyWu=E2=80=9D?= <“18682150237@163.com”> Date: Wed, 22 Jan 2025 13:55:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=201=EF=BC=8C=E8=B0=83=E8=AF=95=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=A2=9E=E5=8A=A0=E8=AF=B4=E6=98=8E=202=EF=BC=8C?= =?UTF-8?q?=E9=99=8D=E5=99=AA=E5=A3=B0=E9=9F=B3=E5=A4=84=E7=90=86=203?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=B0=83=E8=AF=95=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E5=BB=B6=E8=BF=9F=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 2 + .../handle/impl/debug_Info_model.dart | 1 + lib/talk/startChart/start_chart_manage.dart | 5 + .../views/talkView/talk_view_logic.dart | 2 +- .../views/talkView/talk_view_page.dart | 100 ++++++++++++++---- 5 files changed, 86 insertions(+), 24 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 031a9a67..868bba91 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -53,6 +53,8 @@ FutureOr main() async { DeBug.showFloatWidget(); } }); + + //ToDo: 增加对讲调试、正式可删除 runApp(MultiProvider(providers: [ ChangeNotifierProvider(create: (_) => DebugInfoModel()), ], child: MyApp(isLogin: isLogin))); diff --git a/lib/talk/startChart/handle/impl/debug_Info_model.dart b/lib/talk/startChart/handle/impl/debug_Info_model.dart index 6d5758ba..44185662 100644 --- a/lib/talk/startChart/handle/impl/debug_Info_model.dart +++ b/lib/talk/startChart/handle/impl/debug_Info_model.dart @@ -1,5 +1,6 @@ import 'package:flutter/foundation.dart'; +//ToDo: 增加对讲调试、正式可删除 class DebugInfoModel with ChangeNotifier { int _recvDataRate = 0; int _recvPacketCount = 0; diff --git a/lib/talk/startChart/start_chart_manage.dart b/lib/talk/startChart/start_chart_manage.dart index f2ebe79b..2a93b0d8 100644 --- a/lib/talk/startChart/start_chart_manage.dart +++ b/lib/talk/startChart/start_chart_manage.dart @@ -217,6 +217,7 @@ class StartChartManage { /// 设置数据接收回调 _onReceiveData(_udpSocket!, Get.context!); + //ToDo: 增加对讲调试、正式可删除 // 每秒重置数据速率 Timer.periodic(Duration(seconds: 1), (Timer t) { UdpTalkDataHandler().resetDataRates(); @@ -703,6 +704,8 @@ class StartChartManage { '❌Udp send data error----> $result ${message.length}'); // _udpSocket = null; } + + //ToDo: 增加对讲调试、正式可删除 UdpTalkDataHandler().updateSendDataRate(message.length); // 更新调试信息 @@ -911,6 +914,8 @@ class StartChartManage { try { if (dg?.data != null) { final deserialize = ScpMessage.deserialize(dg!.data); + + //ToDo: 增加对讲调试、正式可删除 UdpTalkDataHandler().updateRecvDataRate(dg.data.length); // 更新调试信息 diff --git a/lib/talk/startChart/views/talkView/talk_view_logic.dart b/lib/talk/startChart/views/talkView/talk_view_logic.dart index 9fb055b4..51b5224e 100644 --- a/lib/talk/startChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/startChart/views/talkView/talk_view_logic.dart @@ -597,7 +597,7 @@ class TalkViewLogic extends BaseGetXController { final List processedList = []; for (int pcmVal in pcmList) { // 简单的降噪示例:将小于阈值的信号置为0 - if (pcmVal.abs() < 500) { + if (pcmVal.abs() < 300) { pcmVal = 0; } processedList.add(pcmVal); diff --git a/lib/talk/startChart/views/talkView/talk_view_page.dart b/lib/talk/startChart/views/talkView/talk_view_page.dart index 143112d4..b6149374 100644 --- a/lib/talk/startChart/views/talkView/talk_view_page.dart +++ b/lib/talk/startChart/views/talkView/talk_view_page.dart @@ -1,26 +1,19 @@ import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; import 'dart:math'; -import 'dart:ui'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; - import 'package:flutter_screenutil/flutter_screenutil.dart'; - import 'package:get/get.dart'; +import 'package:http/http.dart' as http; import 'package:provider/provider.dart'; - +import 'package:star_lock/flavors.dart'; import 'package:star_lock/talk/call/callTalk.dart'; import 'package:star_lock/talk/startChart/constant/talk_status.dart'; import 'package:star_lock/talk/startChart/handle/impl/debug_Info_model.dart'; import 'package:star_lock/talk/startChart/handle/impl/udp_talk_data_handler.dart'; - import 'package:star_lock/talk/startChart/views/talkView/talk_view_logic.dart'; import 'package:star_lock/talk/startChart/views/talkView/talk_view_state.dart'; -import 'package:star_lock/talk/udp/udp_manage.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/showTFView.dart'; @@ -36,6 +29,7 @@ class _TalkViewPageState extends State with TickerProviderStateMixin { final TalkViewLogic logic = Get.put(TalkViewLogic()); final TalkViewState state = Get.find().state; + late Stream _latencyStream; @override void initState() { @@ -61,6 +55,31 @@ class _TalkViewPageState extends State state.animationController.forward(); } }); + + _latencyStream = measureServerLatencyStream(F.apiPrefix); // 替换为你的服务器地址 + } + + Stream measureServerLatencyStream(String url) async* { + while (true) { + final latency = await measureServerLatency(url); + yield latency; + await Future.delayed(Duration(seconds: 1)); // 每秒测量一次 + } + } + + Future measureServerLatency(String url) async { + final Stopwatch stopwatch = Stopwatch()..start(); + try { + final http.Response response = await http.get(Uri.parse(url)); + if (response.statusCode == 200) { + stopwatch.stop(); + return stopwatch.elapsedMilliseconds; + } else { + return -1; // 表示请求失败 + } + } catch (e) { + return -1; // 表示请求失败 + } } @override @@ -78,26 +97,26 @@ class _TalkViewPageState extends State children: [ Obx( () { - final screenWidth = MediaQuery.of(context).size.width; - final screenHeight = MediaQuery.of(context).size.height; + final double screenWidth = MediaQuery.of(context).size.width; + final double screenHeight = MediaQuery.of(context).size.height; - final logicalWidth = MediaQuery.of(context).size.width; - final logicalHeight = MediaQuery.of(context).size.height; - final devicePixelRatio = + final double logicalWidth = MediaQuery.of(context).size.width; + final double logicalHeight = MediaQuery.of(context).size.height; + final double devicePixelRatio = MediaQuery.of(context).devicePixelRatio; // 计算物理像素值 - final physicalWidth = logicalWidth * devicePixelRatio; - final physicalHeight = logicalHeight * devicePixelRatio; + final double physicalWidth = logicalWidth * devicePixelRatio; + final double physicalHeight = logicalHeight * devicePixelRatio; // 旋转后的图片尺寸 - final rotatedImageWidth = 480; // 原始高度 - final rotatedImageHeight = 864; // 原始宽度 + const int rotatedImageWidth = 480; // 原始高度 + const int rotatedImageHeight = 864; // 原始宽度 // 计算缩放比例 - final scaleWidth = physicalWidth / rotatedImageWidth; - final scaleHeight = physicalHeight / rotatedImageHeight; - final scale = max(scaleWidth, scaleHeight); // 选择较大的缩放比例 + final double scaleWidth = physicalWidth / rotatedImageWidth; + final double scaleHeight = physicalHeight / rotatedImageHeight; + max(scaleWidth, scaleHeight); // 选择较大的缩放比例 return state.listData.value.isEmpty ? Image.asset( @@ -221,7 +240,7 @@ class _TalkViewPageState extends State ), child: Row( mainAxisSize: MainAxisSize.min, - children: [ + children: [ Icon(Icons.mic, color: Colors.white, size: 24.w), SizedBox(width: 10.w), Text( @@ -235,6 +254,7 @@ class _TalkViewPageState extends State ), ) : Container()), + //ToDo: 增加对讲调试、正式可删除 Visibility( visible: true, child: Positioned( @@ -250,7 +270,7 @@ class _TalkViewPageState extends State Widget? child) { return Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ + children: [ Text( 'recv ${debugInfo.recvDataRate}KB/s [${debugInfo.recvPacketCount}]', style: const TextStyle( @@ -267,6 +287,40 @@ class _TalkViewPageState extends State ), ), )), + // 添加服务器延迟检测 + Positioned( + top: 120, + left: 20, + right: 20, + child: Container( + height: 50, + color: Colors.black.withOpacity(0.5), + padding: const EdgeInsets.all(10), + child: StreamBuilder( + stream: _latencyStream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Text( + '检测服务器延迟中...', + style: TextStyle(color: Colors.white), + ); + } else if (snapshot.hasError || + !snapshot.hasData || + snapshot.data == -1) { + return const Text( + '服务器延迟检测失败', + style: TextStyle(color: Colors.white), + ); + } else { + return Text( + '服务器延迟: ${snapshot.data} ms', + style: const TextStyle(color: Colors.white), + ); + } + }, + ), + ), + ), ], ), ),