Merge branch 'talk_flutter' of gitee.com:starlock-cn/app-starlock into talk_flutter

# Conflicts:
#	star_lock/lib/talk/call/callTalk.dart
This commit is contained in:
Daisy 2023-12-18 16:06:05 +08:00
commit 9ad097c00c
10 changed files with 97 additions and 34 deletions

View File

@ -97,6 +97,7 @@ static bool isVedioStop;
[arecord AudioEnd]; [arecord AudioEnd];
} }
//
- (void)connect_ini { - (void)connect_ini {
_connect_reg_time = [Sformat timestamp]; _connect_reg_time = [Sformat timestamp];
Byte connect_bb[512]; Byte connect_bb[512];
@ -642,22 +643,24 @@ static bool isVedioStop;
isVedioStop= NO; isVedioStop= NO;
//
memcpy(bbsend, bb, 62); memcpy(bbsend, bb, 62);
bbsend[7] = 1; bbsend[7] = 1;
bbsend[8] = 4; bbsend[8] = 4;
NSLog(@"replay talk ip=%@;port=%d", ip, port); NSLog(@"replay talk ip=%@;port=%d", ip, port);
[[Pub getApp].udp sendDataInMain:bbsend length:512 toHost:ip toPort:port]; [[Pub getApp].udp sendDataInMain:bbsend length:512 toHost:ip toPort:port];
//
memcpy(bbsend, bb, 62); memcpy(bbsend, bb, 62);
bbsend[7] = 1; bbsend[7] = 1;
bbsend[8] = 5; bbsend[8] = 5;
NSLog(@"replay talk ip=%@;port=%d", ip, port); NSLog(@"replay talk ip=%@;port=%d", ip, port);
[[Pub getApp].udp sendDataInMain:bbsend length:512 toHost:ip toPort:port]; [[Pub getApp].udp sendDataInMain:bbsend length:512 toHost:ip toPort:port];
// //
[self connect_ini]; [self connect_ini];
[self connect]; [self connect];
//
timer = [NSTimer scheduledTimerWithTimeInterval:1 timer = [NSTimer scheduledTimerWithTimeInterval:1
target:self selector:@selector(connect) target:self selector:@selector(connect)
userInfo:nil repeats:YES]; userInfo:nil repeats:YES];
@ -855,13 +858,19 @@ static char cnt;
} }
else{// else{//
NSData *data1 = [[NSData alloc] initWithBytes:bb length:60+32]; NSData *data1 = [[NSData alloc] initWithBytes:bb length:60+32];
//
BAGLEN = [Pub getShortFromByte:bb at:POS_blen + 2]; BAGLEN = [Pub getShortFromByte:bb at:POS_blen + 2];
// 63
iframe_index = [Pub getShortFromByte:bb at:POS_iframe_index]; iframe_index = [Pub getShortFromByte:bb at:POS_iframe_index];
// 65
alen = [Pub getShortFromByte:bb at:POS_alen]; alen = [Pub getShortFromByte:bb at:POS_alen];
blen = [Pub getShortFromByte:bb at:POS_blen]; // 71
bag_index = bb[POS_bag_index]&0xff ; bag_index = bb[POS_bag_index]&0xff ;
// 69
bag_num = bb[POS_bag_num]&0xff; bag_num = bb[POS_bag_num]&0xff;
// 73
blen = [Pub getShortFromByte:bb at:POS_blen];
if(iframe_index != iframe.iframe_index){ if(iframe_index != iframe.iframe_index){
iframe = [[IframeInfo alloc] init]; iframe = [[IframeInfo alloc] init];
iframe.iframe_index = iframe_index; iframe.iframe_index = iframe_index;

View File

@ -129,9 +129,9 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
// playLocalAudio(); // playLocalAudio();
Uint8List uint8List = Uint8List.fromList([]); // Uint8List uint8List = Uint8List.fromList([]);
CallTalk talkClass = CallTalk(); // CallTalk talkClass = CallTalk();
talkClass.getAVData(uint8List, 90); // talkClass.getAVData(uint8List, 90);
} }
// //

View File

@ -1,9 +1,43 @@
import 'dart:async';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../../tools/eventBusEventManage.dart';
import 'lockMonitoring_state.dart'; import 'lockMonitoring_state.dart';
class LockMonitoringLogic extends BaseGetXController { class LockMonitoringLogic extends BaseGetXController {
final LockMonitoringState state = LockMonitoringState(); final LockMonitoringState state = LockMonitoringState();
///
StreamSubscription? _getTVDataRefreshUIEvent;
void _getTVDataRefreshUIAction() {
// eventBus
_getTVDataRefreshUIEvent = eventBus.on<GetTVDataRefreshUI>().listen((event) {
state.listData.value = event.tvList;
});
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
print("onReady()");
_getTVDataRefreshUIAction();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@override
void onClose() {
// TODO: implement onClose
print("锁详情界面销毁了");
_getTVDataRefreshUIEvent!.cancel();
}
} }

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -28,9 +29,9 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
Stack( Stack(
// alignment: Alignment.bottomCenter, // alignment: Alignment.bottomCenter,
children: [ children: [
// Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover), state.listData.value.isEmpty ? Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover) :
Image.memory( Image.memory(
state.imageData, Uint8List.fromList(state.listData.value),
width: 1.sw, width: 1.sw,
height: 1.sh, height: 1.sh,
fit: BoxFit.cover, fit: BoxFit.cover,

View File

@ -5,7 +5,9 @@ import 'package:get/get.dart';
class LockMonitoringState { class LockMonitoringState {
var isOpenVoice = false.obs; var isOpenVoice = false.obs;
Uint8List imageData = Uint8List.fromList([ var listData = <int>[].obs;
Uint8List imageData = Uint8List.fromList([
255, 255,
216, 216,
255, 255,

View File

@ -8,6 +8,8 @@ import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_p
import 'package:star_lock/talk/call/g711Decoder.dart'; import 'package:star_lock/talk/call/g711Decoder.dart';
import 'package:star_lock/talk/call/iFrameInfo.dart'; import 'package:star_lock/talk/call/iFrameInfo.dart';
import '../../tools/eventBusEventManage.dart';
class CallTalk { class CallTalk {
static int POS_iframe_index = 63; static int POS_iframe_index = 63;
static int POS_alen = 65; static int POS_alen = 65;
@ -29,9 +31,9 @@ class CallTalk {
// '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030420e000002000000b33300001f000100b301b301ffd8ffe000114a4649460001010000'; // '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030420e000002000000b33300001f000100b301b301ffd8ffe000114a4649460001010000';
// Uint8List bb = Uint8List.fromList(hex.decode(hexData)); // Uint8List bb = Uint8List.fromList(hex.decode(hexData));
// //
String hexData = // String hexData =
'5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030e02900000100050080020000010001004001b30145444444444444444445454444444444444444444444434343434443434344444444444544454545444444444444454545454545454545454445444545454545454545444444444343434344444443434344444444444343434343434343434443434343434343424343434343434242424242424242424243434343434242424242424343434342424343434242424242434243434343434344454344444444444444444444444444454545454544444444444444444445454545454545454545454545454546454545454545454545454545454545454646464646464645454545464646454545454545454545454545454544444444444444444443434343434343434343434343434343434343434242424242424242424242424242424343434242434343434343434343434343434343434343434444444343434343430000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024001d044000000000001d080001000000001d18c03000000000'; // '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030e02900000100050080020000010001004001b30145444444444444444445454444444444444444444444434343434443434344444444444544454545444444444444454545454545454545454445444545454545454545444444444343434344444443434344444444444343434343434343434443434343434343424343434343434242424242424242424243434343434242424242424343434342424343434242424242434243434343434344454344444444444444444444444444454545454544444444444444444445454545454545454545454545454546454545454545454545454545454545454646464646464645454545464646454545454545454545454545454544444444444444444443434343434343434343434343434343434343434242424242424242424242424242424343434242434343434343434343434343434343434343434444444343434343430000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024001d044000000000001d080001000000001d18c03000000000';
Uint8List bb = Uint8List.fromList(hex.decode(hexData)); // Uint8List bb = Uint8List.fromList(hex.decode(hexData));
// //
if (bb[61] == 1) { if (bb[61] == 1) {
@ -69,16 +71,24 @@ class CallTalk {
iframe.bb = Uint8List(end); iframe.bb = Uint8List(end);
} }
copyBytes(iframe!.bb!, start, bb, POS_data, blen); print('bbbbbb111: ${bb}');
iframe.bb!.addAll(bb.sublist(76, bb.length));
// copyBytes(iframe!.bb!, start, bb, POS_data, blen);
// //
print('Copied Bytes: ${iframe.bb}'); print('Copied Bytes: ${iframe.bb}');
Uint8List data = iframe.bb!.sublist(0, iframe.cur_len); if (iframe.bagNum == iframe.bagReceive) {
Uint8List data = iframe.bb!.sublist(0, iframe.cur_len);
print('播放第%d帧:${iframe.iframeIndex} 一帧图片的Data: $data');
eventBus.fire(GetTVDataRefreshUI(data));
}
Get.toNamed(Routers.lockMonitoringPage, // Get.toNamed(Routers.lockMonitoringPage, arguments: {
arguments: {"lockId": widget.lockListInfoItemEntity.lockId}); // "lockId": "111"
// });
// //
print(iframe.bb); // print(iframe.bb);
} }
} }

View File

@ -68,7 +68,7 @@ class UDPManage{
if(event == RawSocketEvent.read){ if(event == RawSocketEvent.read){
Datagram? dg = socket.receive(); Datagram? dg = socket.receive();
try { try {
print('Did received data on the stream (length --> ${dg!.data.length}) dg!.data:${dg!.data}'); // print('Did received data on the stream (length --> ${dg!.data.length}) dg!.data:${dg!.data}');
// EventBusManager().eventBusFir(EventReceiveModel(data: dg?.data,sendChannel: DataChannel.udp)); // EventBusManager().eventBusFir(EventReceiveModel(data: dg?.data,sendChannel: DataChannel.udp));
CommandUDPReciverManager.appDataReceive(dg!.data); CommandUDPReciverManager.appDataReceive(dg!.data);
} catch (e) { } catch (e) {
@ -87,7 +87,7 @@ class UDPManage{
return; return;
} }
try { try {
print("sendData:$data"); // print("sendData:$data");
var result = _udpSocket?.send(data, InternetAddress(host!), port!); var result = _udpSocket?.send(data, InternetAddress(host!), port!);
if(result != data.length) { if(result != data.length) {
print('❌Udp ----> send data $result ${data.length}'); print('❌Udp ----> send data $result ${data.length}');

View File

@ -2,6 +2,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import '../../tools/toast.dart'; import '../../tools/toast.dart';
import '../call/callTalk.dart';
import 'udp_talkClass.dart'; import 'udp_talkClass.dart';
class CommandUDPReciverManager { class CommandUDPReciverManager {
@ -15,7 +16,7 @@ class CommandUDPReciverManager {
if(dataSize < 4){ if(dataSize < 4){
return; return;
} }
// print("appDataReceiveData:$data"); print("appDataReceiveData:$data");
Uint8List data1 = Uint8List.fromList(data); Uint8List data1 = Uint8List.fromList(data);
if(data1.length==1){ if(data1.length==1){
@ -27,7 +28,7 @@ class CommandUDPReciverManager {
if (data[6] == 4) { if (data[6] == 4) {
if(data[7] == 2){ if(data[7] == 2){
print("心跳包反馈 在线状态"); // print("心跳包反馈 在线状态");
} else if(data[7]==3) { } else if(data[7]==3) {
[Toast.show(msg: "您已在其他设备登录")]; [Toast.show(msg: "您已在其他设备登录")];
} }
@ -38,9 +39,8 @@ class CommandUDPReciverManager {
// } // }
// //
// var beiCallType = data[8] & 0xff; var beiCallType = data[8] & 0xff;
var beiCallType = 1 & 0xff; print("被呼叫类型$beiCallType");
print("被呼叫2 类型$beiCallType");
switch (beiCallType) { switch (beiCallType) {
case 1:{ case 1:{
// //
@ -57,8 +57,9 @@ class CommandUDPReciverManager {
break; break;
case 7: case 7:
case 8:{// case 8:{//
//print("音视频数据"); print("音视频数据");
CallTalk cllTalk = CallTalk();
cllTalk.getAVData(data1, data1.length);
} }
break; break;
case 9:{ case 9:{
@ -66,8 +67,7 @@ class CommandUDPReciverManager {
//print("对方保持连接"); //print("对方保持连接");
data[7] = 2; data[7] = 2;
} } else{
else{
//print("保持连接反馈"); //print("保持连接反馈");
} }

View File

@ -19,18 +19,16 @@ class UDPTalkClass{
factory UDPTalkClass() => _share(); factory UDPTalkClass() => _share();
UDPTalkClass get manager => _share(); UDPTalkClass get manager => _share();
UDPTalkClass._init() { UDPTalkClass._init();
}
var status = 0;// 0 var status = 0;// 0
var remoteEquid; var remoteEquid;//
late Timer timer; late Timer timer;
// 退 // 退
var isBeCall = false; var isBeCall = false;
beCallW({List<int>? data, String? ip, int? port}) async { beCallW({List<int>? data, String? ip, int? port}) async {
print("beCall"); // print("beCall");
// if (await isCallMe(data)) { // if (await isCallMe(data)) {
// return; // return;
// } // }
@ -42,10 +40,12 @@ class UDPTalkClass{
remoteEquid = getEquidFrombb(data, 9); remoteEquid = getEquidFrombb(data, 9);
status = 6; status = 6;
//
data![7] = 1; data![7] = 1;
data[8] = 4; data[8] = 4;
UDPManage().sendData(data); UDPManage().sendData(data);
//
data[7] = 1; data[7] = 1;
data[8] = 5; data[8] = 5;
UDPManage().sendData(data); UDPManage().sendData(data);
@ -59,6 +59,7 @@ class UDPTalkClass{
if(UDPTalkClass().isBeCall == false){ if(UDPTalkClass().isBeCall == false){
UDPTalkClass().isBeCall = true; UDPTalkClass().isBeCall = true;
//
timer = Timer.periodic(1.seconds, (timer) { timer = Timer.periodic(1.seconds, (timer) {
data[7] = 1; data[7] = 1;
data[8] = 9; data[8] = 9;

View File

@ -54,4 +54,10 @@ class LockSetChangeSetRefreshLockDetailWithType{
int type;// 0 1 int type;// 0 1
int setResult; int setResult;
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult); LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
}
///
class GetTVDataRefreshUI{
List<int> tvList;
GetTVDataRefreshUI(this.tvList);
} }