feat: 新增对讲收发包调试信息
This commit is contained in:
parent
87f315f79d
commit
0dad04d51c
@ -7,11 +7,13 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter_bugly/flutter_bugly.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/mine/about/debug/debug_tool.dart';
|
||||
import 'package:star_lock/network/api_provider.dart';
|
||||
import 'package:star_lock/network/api_repository.dart';
|
||||
import 'package:star_lock/network/start_chart_api.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/impl/debug_Info_model.dart';
|
||||
import 'package:star_lock/talk/startChart/status/appLifecycle_observer.dart';
|
||||
import 'package:star_lock/tools/bugly/bugly_tool.dart';
|
||||
import 'package:star_lock/tools/device_info_service.dart';
|
||||
@ -51,7 +53,10 @@ FutureOr<void> main() async {
|
||||
DeBug.showFloatWidget();
|
||||
}
|
||||
});
|
||||
runApp(MyApp(isLogin: isLogin));
|
||||
runApp(MultiProvider(providers: [
|
||||
ChangeNotifierProvider(create: (_) => DebugInfoModel()),
|
||||
], child: MyApp(isLogin: isLogin)));
|
||||
// runApp(MyApp(isLogin: isLogin));
|
||||
});
|
||||
|
||||
if (AppPlatform.isAndroid) {
|
||||
|
||||
22
lib/talk/startChart/handle/impl/debug_Info_model.dart
Normal file
22
lib/talk/startChart/handle/impl/debug_Info_model.dart
Normal file
@ -0,0 +1,22 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class DebugInfoModel with ChangeNotifier {
|
||||
int _recvDataRate = 0;
|
||||
int _recvPacketCount = 0;
|
||||
int _sendDataRate = 0;
|
||||
int _sendPacketCount = 0;
|
||||
|
||||
int get recvDataRate => _recvDataRate;
|
||||
int get recvPacketCount => _recvPacketCount;
|
||||
int get sendDataRate => _sendDataRate;
|
||||
int get sendPacketCount => _sendPacketCount;
|
||||
|
||||
void updateDebugInfo(int recvDataRate, int recvPacketCount, int sendDataRate,
|
||||
int sendPacketCount) {
|
||||
_recvDataRate = recvDataRate;
|
||||
_recvPacketCount = recvPacketCount;
|
||||
_sendDataRate = sendDataRate;
|
||||
_sendPacketCount = sendPacketCount;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
@ -1,25 +1,71 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/talk/call/g711.dart';
|
||||
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
|
||||
import 'package:star_lock/talk/startChart/constant/talk_status.dart';
|
||||
import 'package:star_lock/talk/startChart/entity/scp_message.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_data.pbserver.dart';
|
||||
import 'package:star_lock/talk/startChart/proto/talk_data_h264_frame.pb.dart';
|
||||
|
||||
// class UdpTalkDataHandler extends ScpMessageBaseHandle
|
||||
// implements ScpMessageHandler {
|
||||
class UdpTalkDataHandler extends ScpMessageBaseHandle
|
||||
implements ScpMessageHandler {
|
||||
factory UdpTalkDataHandler() {
|
||||
return _instance;
|
||||
}
|
||||
UdpTalkDataHandler._internal();
|
||||
static final UdpTalkDataHandler _instance = UdpTalkDataHandler._internal();
|
||||
|
||||
int _recentRecvDataRate = 0;
|
||||
int _recentRecvPacketCount = 0;
|
||||
int _recentSendDataRate = 0;
|
||||
int _recentSendPacketCount = 0;
|
||||
|
||||
int _lastRecvDataRate = 0;
|
||||
int _lastRecvPacketCount = 0;
|
||||
int _lastSendDataRate = 0;
|
||||
int _lastSendPacketCount = 0;
|
||||
|
||||
void updateRecvDataRate(int dataSize) {
|
||||
_recentRecvDataRate += dataSize;
|
||||
_recentRecvPacketCount++;
|
||||
}
|
||||
|
||||
void updateSendDataRate(int dataSize) {
|
||||
_recentSendDataRate += dataSize;
|
||||
_recentSendPacketCount++;
|
||||
}
|
||||
|
||||
void resetDataRates() {
|
||||
_lastRecvDataRate = _recentRecvDataRate;
|
||||
_lastRecvPacketCount = _recentRecvPacketCount;
|
||||
_lastSendDataRate = _recentSendDataRate;
|
||||
_lastSendPacketCount = _recentSendPacketCount;
|
||||
|
||||
_recentRecvDataRate = 0;
|
||||
_recentRecvPacketCount = 0;
|
||||
_recentSendDataRate = 0;
|
||||
_recentSendPacketCount = 0;
|
||||
}
|
||||
|
||||
int getLastRecvDataRate() {
|
||||
return _lastRecvDataRate;
|
||||
}
|
||||
|
||||
int getLastRecvPacketCount() {
|
||||
return _lastRecvPacketCount;
|
||||
}
|
||||
|
||||
int getLastSendDataRate() {
|
||||
return _lastSendDataRate;
|
||||
}
|
||||
|
||||
int getLastSendPacketCount() {
|
||||
return _lastSendPacketCount;
|
||||
}
|
||||
|
||||
@override
|
||||
void handleReq(ScpMessage scpMessage) {}
|
||||
|
||||
@ -33,6 +79,7 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
|
||||
void handleRealTimeData(ScpMessage scpMessage) {
|
||||
// 收到数据后调用更新,防止定时器超时
|
||||
talkDataOverTimeTimerManager.renew();
|
||||
|
||||
if (scpMessage.Payload != null) {
|
||||
final TalkData talkData = scpMessage.Payload;
|
||||
// 处理音视频数据
|
||||
|
||||
@ -4,7 +4,9 @@ import 'dart:math';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:fixnum/fixnum.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
@ -24,6 +26,8 @@ import 'package:star_lock/talk/startChart/entity/report_information_data.dart';
|
||||
import 'package:star_lock/talk/startChart/entity/scp_message.dart';
|
||||
import 'package:star_lock/talk/startChart/entity/star_chart_register_node_entity.dart';
|
||||
import 'package:star_lock/talk/startChart/exception/start_chart_message_exception.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/handle/other/do_sign.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/other/talke_data_over_time_timer_manager.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/other/talke_ping_over_time_timer_manager.dart';
|
||||
@ -211,7 +215,20 @@ class StartChartManage {
|
||||
_udpSocket!.broadcastEnabled = true;
|
||||
|
||||
/// 设置数据接收回调
|
||||
_onReceiveData(_udpSocket!);
|
||||
_onReceiveData(_udpSocket!, Get.context!);
|
||||
|
||||
// 每秒重置数据速率
|
||||
Timer.periodic(Duration(seconds: 1), (Timer t) {
|
||||
UdpTalkDataHandler().resetDataRates();
|
||||
// 更新调试信息
|
||||
Provider.of<DebugInfoModel>(Get.context!, listen: false)
|
||||
.updateDebugInfo(
|
||||
UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB
|
||||
UdpTalkDataHandler().getLastRecvPacketCount(),
|
||||
UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB
|
||||
UdpTalkDataHandler().getLastSendPacketCount(),
|
||||
);
|
||||
});
|
||||
}).catchError((error) {
|
||||
_log(text: 'Failed to bind UDP socket: $error');
|
||||
});
|
||||
@ -686,6 +703,15 @@ class StartChartManage {
|
||||
'❌Udp send data error----> $result ${message.length}');
|
||||
// _udpSocket = null;
|
||||
}
|
||||
UdpTalkDataHandler().updateSendDataRate(message.length);
|
||||
|
||||
// 更新调试信息
|
||||
Provider.of<DebugInfoModel>(Get.context!, listen: false).updateDebugInfo(
|
||||
UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB
|
||||
UdpTalkDataHandler().getLastRecvPacketCount(),
|
||||
UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB
|
||||
UdpTalkDataHandler().getLastSendPacketCount(),
|
||||
);
|
||||
}
|
||||
|
||||
// 发送消息
|
||||
@ -878,13 +904,23 @@ class StartChartManage {
|
||||
}
|
||||
|
||||
// 接收返回的数据
|
||||
void _onReceiveData(RawDatagramSocket socket) {
|
||||
void _onReceiveData(RawDatagramSocket socket, BuildContext context) {
|
||||
socket.listen((RawSocketEvent event) {
|
||||
if (event == RawSocketEvent.read) {
|
||||
Datagram? dg = socket.receive();
|
||||
try {
|
||||
if (dg?.data != null) {
|
||||
final deserialize = ScpMessage.deserialize(dg!.data);
|
||||
UdpTalkDataHandler().updateRecvDataRate(dg.data.length);
|
||||
|
||||
// 更新调试信息
|
||||
Provider.of<DebugInfoModel>(context, listen: false).updateDebugInfo(
|
||||
UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB
|
||||
UdpTalkDataHandler().getLastRecvPacketCount(),
|
||||
UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB
|
||||
UdpTalkDataHandler().getLastSendPacketCount(),
|
||||
);
|
||||
|
||||
if (deserialize != null) {
|
||||
// 处理返回数据
|
||||
_handleUdpResultData(deserialize);
|
||||
|
||||
@ -11,9 +11,12 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
import 'package:provider/provider.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';
|
||||
@ -204,6 +207,38 @@ class _TalkViewPageState extends State<TalkViewPage>
|
||||
),
|
||||
)
|
||||
: Container()),
|
||||
Visibility(
|
||||
visible: true,
|
||||
child: Positioned(
|
||||
top: 20, // 设置在顶部
|
||||
left: 20,
|
||||
right: 20, // 确保调试信息在屏幕宽度内居中
|
||||
child: Container(
|
||||
height: 100, // 设置高度为 100
|
||||
color: Colors.black.withOpacity(0.5), // 可选:设置背景颜色和透明度
|
||||
padding: const EdgeInsets.all(10), // 可选:设置内边距
|
||||
child: Consumer<DebugInfoModel>(
|
||||
builder: (BuildContext context, DebugInfoModel debugInfo,
|
||||
Widget? child) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'recv ${debugInfo.recvDataRate}KB/s [${debugInfo.recvPacketCount}]',
|
||||
style: const TextStyle(
|
||||
color: Colors.white), // 设置文本颜色为白色
|
||||
),
|
||||
Text(
|
||||
'send ${debugInfo.sendDataRate}KB/s [${debugInfo.sendPacketCount}]',
|
||||
style: const TextStyle(
|
||||
color: Colors.white), // 设置文本颜色为白色
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
)),
|
||||
],
|
||||
),
|
||||
),
|
||||
@ -489,6 +524,7 @@ class _TalkViewPageState extends State<TalkViewPage>
|
||||
state.videoBuffer.clear();
|
||||
state.listData.value = Uint8List(0);
|
||||
CallTalk().finishAVData();
|
||||
UdpTalkDataHandler().resetDataRates();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user