优化对讲发送问题
This commit is contained in:
parent
b8a2c78836
commit
fda85f95a5
File diff suppressed because one or more lines are too long
@ -47,6 +47,9 @@ PODS:
|
||||
- Flutter
|
||||
- flutter_sound_core (= 9.2.13)
|
||||
- flutter_sound_core (9.2.13)
|
||||
- flutter_voice_processor (1.1.0):
|
||||
- Flutter
|
||||
- ios-voice-processor (~> 1.1.0)
|
||||
- fluttertoast (0.0.2):
|
||||
- Flutter
|
||||
- Toast
|
||||
@ -58,15 +61,16 @@ PODS:
|
||||
- google_maps_flutter_ios (0.0.1):
|
||||
- Flutter
|
||||
- GoogleMaps (< 9.0)
|
||||
- GoogleMaps (7.4.0):
|
||||
- GoogleMaps/Maps (= 7.4.0)
|
||||
- GoogleMaps/Base (7.4.0)
|
||||
- GoogleMaps/Maps (7.4.0):
|
||||
- GoogleMaps (6.2.1):
|
||||
- GoogleMaps/Maps (= 6.2.1)
|
||||
- GoogleMaps/Base (6.2.1)
|
||||
- GoogleMaps/Maps (6.2.1):
|
||||
- GoogleMaps/Base
|
||||
- image_gallery_saver (2.0.2):
|
||||
- Flutter
|
||||
- image_picker_ios (0.0.1):
|
||||
- Flutter
|
||||
- ios-voice-processor (1.1.0)
|
||||
- just_audio (0.0.1):
|
||||
- Flutter
|
||||
- network_info_plus (0.0.1):
|
||||
@ -113,6 +117,7 @@ DEPENDENCIES:
|
||||
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
|
||||
- flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`)
|
||||
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
|
||||
- flutter_voice_processor (from `.symlinks/plugins/flutter_voice_processor/ios`)
|
||||
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
||||
- g711_flutter (from `.symlinks/plugins/g711_flutter/ios`)
|
||||
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
|
||||
@ -145,6 +150,7 @@ SPEC REPOS:
|
||||
- flutter_sound_core
|
||||
- FMDB
|
||||
- GoogleMaps
|
||||
- ios-voice-processor
|
||||
- Protobuf
|
||||
- SwiftProtobuf
|
||||
- Toast
|
||||
@ -176,6 +182,8 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/flutter_pcm_sound/ios"
|
||||
flutter_sound:
|
||||
:path: ".symlinks/plugins/flutter_sound/ios"
|
||||
flutter_voice_processor:
|
||||
:path: ".symlinks/plugins/flutter_voice_processor/ios"
|
||||
fluttertoast:
|
||||
:path: ".symlinks/plugins/fluttertoast/ios"
|
||||
g711_flutter:
|
||||
@ -233,13 +241,15 @@ SPEC CHECKSUMS:
|
||||
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
|
||||
flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900
|
||||
flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
|
||||
flutter_voice_processor: 53afbf59ad3feb82f4a379fea9ed8dc98495210f
|
||||
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
|
||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||
g711_flutter: 8f2769052d2cf3549f83d11e1c42d81d94441123
|
||||
google_maps_flutter_ios: 590249c67f34f422122c232f2a626192adbc78ee
|
||||
GoogleMaps: 032f676450ba0779bd8ce16840690915f84e57ac
|
||||
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
|
||||
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
|
||||
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||
ios-voice-processor: 8e32d7f980a06d392d128ef1cd19cf6ddcaca3c1
|
||||
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
|
||||
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
|
||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||
@ -255,6 +265,6 @@ SPEC CHECKSUMS:
|
||||
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
|
||||
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
||||
|
||||
PODFILE CHECKSUM: 85f69c27139c5112fdd69e85b95c1cc6de403d3e
|
||||
PODFILE CHECKSUM: 42aa7ffc6134b996f93caa6a9b6a2b5b580ff28a
|
||||
|
||||
COCOAPODS: 1.14.3
|
||||
|
||||
@ -38,14 +38,80 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
});
|
||||
}
|
||||
|
||||
/// 收到接听状态
|
||||
/// 收到UDP发送的状态
|
||||
StreamSubscription? _getUDPStatusRefreshUIEvent;
|
||||
void _getUDPStatusRefreshUIAction() {
|
||||
_getUDPStatusRefreshUIEvent = eventBus.on<GetUDPStatusRefreshUI>().listen((event) {
|
||||
state.udpStatus.value = event.udpStatus;
|
||||
if(state.udpStatus.value == 8){
|
||||
// 接听成功了,然后刷新界面的时间 60秒以后自动挂断
|
||||
state.oneMinuteTimeTimer = Timer.periodic(const Duration(seconds:1), (Timer t) async {
|
||||
state.oneMinuteTime.value++;
|
||||
Get.log('state.oneMinuteTime.value:${state.oneMinuteTime.value}');
|
||||
if(state.oneMinuteTime.value >= 60){
|
||||
// 超过60秒了
|
||||
state.oneMinuteTimeTimer.cancel();
|
||||
state.oneMinuteTime.value = 0;
|
||||
// 挂断
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 30,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []);
|
||||
|
||||
// 关闭当前界面
|
||||
Get.back();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// 接听
|
||||
udpAnswerAction() async {
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 6,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []
|
||||
);
|
||||
}
|
||||
|
||||
/// 挂断
|
||||
udpHangUpAction() async {
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 30,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []);
|
||||
}
|
||||
|
||||
/// 开门
|
||||
udpOpenDoorAction() async {
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 10,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []);
|
||||
Get.back();
|
||||
}
|
||||
|
||||
Future<void> _readG711Data() async {
|
||||
String filePath = 'assets/s10-g711.bin';
|
||||
List<int> audioData = await G711().readAssetFile(filePath);
|
||||
@ -83,11 +149,11 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
|
||||
Future<void> startProcessing() async {
|
||||
frameListener(List<int> frame) async {
|
||||
Get.log('Get data.length:${frame.length} Received data:$frame');
|
||||
// Get.log('Get data.length:${frame.length} Received data:$frame');
|
||||
for (int i = 0; i < frame.length; i++) {
|
||||
frame[i] = linearToULaw(frame[i]);
|
||||
}
|
||||
Get.log('change Get data.length:${frame.length} change Received data:$frame');
|
||||
// Get.log('change Get data.length:${frame.length} change Received data:$frame');
|
||||
await Future.delayed(const Duration(milliseconds: 50));
|
||||
sendRecordData({
|
||||
"bytes": frame,
|
||||
@ -330,7 +396,7 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
print("锁详情界面销毁了");
|
||||
_getTVDataRefreshUIEvent!.cancel();
|
||||
_getUDPStatusRefreshUIEvent!.cancel();
|
||||
|
||||
state.oneMinuteTimeTimer.cancel();
|
||||
stopProcessing();
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,25 +41,34 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
)),
|
||||
Positioned(
|
||||
top: ScreenUtil().statusBarHeight + 30.h,
|
||||
child: Row(children: [
|
||||
SizedBox(width: 30.w),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Get.back();
|
||||
},
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(25.h)),
|
||||
padding: EdgeInsets.all(10.w),
|
||||
child: Image(
|
||||
width: 40.w,
|
||||
height: 40.w,
|
||||
image: const AssetImage("images/icon_left_black.png"),
|
||||
),
|
||||
),
|
||||
),
|
||||
]),
|
||||
width: 1.sw,
|
||||
child: Obx(() {
|
||||
var sec = (state.oneMinuteTime.value % 60).toString().padLeft(2,'0');
|
||||
var min = (state.oneMinuteTime.value ~/ 60).toString().padLeft(2,'0');
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text("$min:$sec", style: TextStyle(fontSize: 26.sp, color: Colors.white)),
|
||||
// SizedBox(width: 30.w),
|
||||
// GestureDetector(
|
||||
// onTap: () {
|
||||
// Get.back();
|
||||
// },
|
||||
// child: Container(
|
||||
// decoration: BoxDecoration(
|
||||
// color: Colors.white,
|
||||
// borderRadius: BorderRadius.circular(25.h)),
|
||||
// padding: EdgeInsets.all(10.w),
|
||||
// child: Image(
|
||||
// width: 40.w,
|
||||
// height: 40.w,
|
||||
// image: const AssetImage("images/icon_left_black.png"),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
]
|
||||
);
|
||||
}),
|
||||
),
|
||||
Positioned(
|
||||
bottom: 10.w,
|
||||
@ -156,16 +165,7 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
// state.isSenderAudioData.value = false;
|
||||
print("发送接听了");
|
||||
// 刚进来是接听状态,然后改为长按对讲
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 6,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []
|
||||
);
|
||||
logic.udpAnswerAction();
|
||||
});
|
||||
},
|
||||
longPress: (){
|
||||
@ -191,15 +191,7 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
logic.stopProcessing();
|
||||
|
||||
// 挂断
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 30,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []);
|
||||
logic.udpHangUpAction();
|
||||
}),
|
||||
bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", "开锁", AppColors.mainColor, () {
|
||||
showDeletPasswordAlertDialog(context);
|
||||
@ -280,16 +272,7 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
}
|
||||
|
||||
// 开锁
|
||||
UDPSenderManage.sendMainProtocol(
|
||||
command: 150,
|
||||
commandTypeIsCalling: 1,
|
||||
subCommand: 10,
|
||||
lockID: UDPManage().lockId,
|
||||
lockIP: UDPManage().host,
|
||||
userMobile: await state.userMobile,
|
||||
userMobileIP: await state.userMobileIP,
|
||||
endData: []);
|
||||
Get.back();
|
||||
logic.udpOpenDoorAction();
|
||||
},
|
||||
cancelClick: () {
|
||||
Get.back();
|
||||
|
||||
@ -24,8 +24,10 @@ class LockMonitoringState {
|
||||
|
||||
late final VoiceProcessor? voiceProcessor;
|
||||
|
||||
// 定时器超过60秒关闭当前界面
|
||||
late Timer oneMinuteTimeTimer;
|
||||
|
||||
late Timer oneMinuteTimeTimer;// 定时器超过60秒关闭当前界面
|
||||
var oneMinuteTime = 0.obs;// 定时器秒数
|
||||
|
||||
// 定时器如果发送了接听的命令 而没收到回复就每秒重复发送10次
|
||||
late Timer answerTimer;
|
||||
late Timer hangUpTimer;
|
||||
|
||||
@ -10,6 +10,8 @@ import '../call/callTalk.dart';
|
||||
import 'udp_talkClass.dart';
|
||||
|
||||
class CommandUDPReciverManager {
|
||||
|
||||
|
||||
static void appDataReceive(List<int> data) async {
|
||||
///解析数据
|
||||
if (data.isEmpty) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user