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:
commit
9ad097c00c
@ -97,6 +97,7 @@ static bool isVedioStop;
|
||||
[arecord AudioEnd];
|
||||
}
|
||||
|
||||
// 保持连接
|
||||
- (void)connect_ini {
|
||||
_connect_reg_time = [Sformat timestamp];
|
||||
Byte connect_bb[512];
|
||||
@ -642,22 +643,24 @@ static bool isVedioStop;
|
||||
|
||||
isVedioStop= NO;
|
||||
|
||||
|
||||
// 呼叫应答,呼叫成功
|
||||
memcpy(bbsend, bb, 62);
|
||||
bbsend[7] = 1;
|
||||
bbsend[8] = 4;
|
||||
NSLog(@"replay talk ip=%@;port=%d", ip, port);
|
||||
[[Pub getApp].udp sendDataInMain:bbsend length:512 toHost:ip toPort:port];
|
||||
|
||||
// 门锁发送视频
|
||||
memcpy(bbsend, bb, 62);
|
||||
bbsend[7] = 1;
|
||||
bbsend[8] = 5;
|
||||
NSLog(@"replay talk ip=%@;port=%d", ip, port);
|
||||
[[Pub getApp].udp sendDataInMain:bbsend length:512 toHost:ip toPort:port];
|
||||
|
||||
//定时报告
|
||||
// 定时报告
|
||||
[self connect_ini];
|
||||
[self connect];
|
||||
// 设置定时器,得到连接时间
|
||||
timer = [NSTimer scheduledTimerWithTimeInterval:1
|
||||
target:self selector:@selector(connect)
|
||||
userInfo:nil repeats:YES];
|
||||
@ -855,13 +858,19 @@ static char cnt;
|
||||
}
|
||||
else{//视频数据
|
||||
NSData *data1 = [[NSData alloc] initWithBytes:bb length:60+32];
|
||||
// 音视频数据开始下标
|
||||
BAGLEN = [Pub getShortFromByte:bb at:POS_blen + 2];
|
||||
// 获取帧序号 63
|
||||
iframe_index = [Pub getShortFromByte:bb at:POS_iframe_index];
|
||||
// 获取帧长度 65
|
||||
alen = [Pub getShortFromByte:bb at:POS_alen];
|
||||
blen = [Pub getShortFromByte:bb at:POS_blen];
|
||||
// 当前包号 71
|
||||
bag_index = bb[POS_bag_index]&0xff ;
|
||||
// 总包数 69
|
||||
bag_num = bb[POS_bag_num]&0xff;
|
||||
|
||||
// 数据长度 73
|
||||
blen = [Pub getShortFromByte:bb at:POS_blen];
|
||||
|
||||
if(iframe_index != iframe.iframe_index){
|
||||
iframe = [[IframeInfo alloc] init];
|
||||
iframe.iframe_index = iframe_index;
|
||||
|
||||
@ -129,9 +129,9 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
|
||||
|
||||
// playLocalAudio();
|
||||
|
||||
Uint8List uint8List = Uint8List.fromList([]);
|
||||
CallTalk talkClass = CallTalk();
|
||||
talkClass.getAVData(uint8List, 90);
|
||||
// Uint8List uint8List = Uint8List.fromList([]);
|
||||
// CallTalk talkClass = CallTalk();
|
||||
// talkClass.getAVData(uint8List, 90);
|
||||
}
|
||||
|
||||
//初始化阿里云推送
|
||||
|
||||
@ -1,9 +1,43 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import '../../../../tools/baseGetXController.dart';
|
||||
import '../../../../tools/eventBusEventManage.dart';
|
||||
import 'lockMonitoring_state.dart';
|
||||
|
||||
class LockMonitoringLogic extends BaseGetXController {
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
@ -28,9 +29,9 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
Stack(
|
||||
// alignment: Alignment.bottomCenter,
|
||||
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(
|
||||
state.imageData,
|
||||
Uint8List.fromList(state.listData.value),
|
||||
width: 1.sw,
|
||||
height: 1.sh,
|
||||
fit: BoxFit.cover,
|
||||
|
||||
@ -5,7 +5,9 @@ import 'package:get/get.dart';
|
||||
class LockMonitoringState {
|
||||
var isOpenVoice = false.obs;
|
||||
|
||||
Uint8List imageData = Uint8List.fromList([
|
||||
var listData = <int>[].obs;
|
||||
|
||||
Uint8List imageData = Uint8List.fromList([
|
||||
255,
|
||||
216,
|
||||
255,
|
||||
|
||||
@ -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/iFrameInfo.dart';
|
||||
|
||||
import '../../tools/eventBusEventManage.dart';
|
||||
|
||||
class CallTalk {
|
||||
static int POS_iframe_index = 63;
|
||||
static int POS_alen = 65;
|
||||
@ -29,9 +31,9 @@ class CallTalk {
|
||||
// '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030420e000002000000b33300001f000100b301b301ffd8ffe000114a4649460001010000';
|
||||
// Uint8List bb = Uint8List.fromList(hex.decode(hexData));
|
||||
//音频数据
|
||||
String hexData =
|
||||
'5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030e02900000100050080020000010001004001b30145444444444444444445454444444444444444444444434343434443434344444444444544454545444444444444454545454545454545454445444545454545454545444444444343434344444443434344444444444343434343434343434443434343434343424343434343434242424242424242424243434343434242424242424343434342424343434242424242434243434343434344454344444444444444444444444444454545454544444444444444444445454545454545454545454545454546454545454545454545454545454545454646464646464645454545464646454545454545454545454545454544444444444444444443434343434343434343434343434343434343434242424242424242424242424242424343434242434343434343434343434343434343434343434444444343434343430000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024001d044000000000001d080001000000001d18c03000000000';
|
||||
Uint8List bb = Uint8List.fromList(hex.decode(hexData));
|
||||
// String hexData =
|
||||
// '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030e02900000100050080020000010001004001b30145444444444444444445454444444444444444444444434343434443434344444444444544454545444444444444454545454545454545454445444545454545454545444444444343434344444443434344444444444343434343434343434443434343434343424343434343434242424242424242424243434343434242424242424343434342424343434242424242434243434343434344454344444444444444444444444444454545454544444444444444444445454545454545454545454545454546454545454545454545454545454545454646464646464645454545464646454545454545454545454545454544444444444444444443434343434343434343434343434343434343434242424242424242424242424242424343434242434343434343434343434343434343434343434444444343434343430000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024001d044000000000001d080001000000001d18c03000000000';
|
||||
// Uint8List bb = Uint8List.fromList(hex.decode(hexData));
|
||||
|
||||
// 音频数据
|
||||
if (bb[61] == 1) {
|
||||
@ -69,16 +71,24 @@ class CallTalk {
|
||||
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}');
|
||||
|
||||
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,
|
||||
arguments: {"lockId": widget.lockListInfoItemEntity.lockId});
|
||||
// Get.toNamed(Routers.lockMonitoringPage, arguments: {
|
||||
// "lockId": "111"
|
||||
// });
|
||||
// 打印拷贝后的目标数据
|
||||
print(iframe.bb);
|
||||
// print(iframe.bb);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -68,7 +68,7 @@ class UDPManage{
|
||||
if(event == RawSocketEvent.read){
|
||||
Datagram? dg = socket.receive();
|
||||
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));
|
||||
CommandUDPReciverManager.appDataReceive(dg!.data);
|
||||
} catch (e) {
|
||||
@ -87,7 +87,7 @@ class UDPManage{
|
||||
return;
|
||||
}
|
||||
try {
|
||||
print("sendData:$data");
|
||||
// print("sendData:$data");
|
||||
var result = _udpSocket?.send(data, InternetAddress(host!), port!);
|
||||
if(result != data.length) {
|
||||
print('❌Udp ----> send data $result ${data.length}');
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
import 'dart:typed_data';
|
||||
|
||||
import '../../tools/toast.dart';
|
||||
import '../call/callTalk.dart';
|
||||
import 'udp_talkClass.dart';
|
||||
|
||||
class CommandUDPReciverManager {
|
||||
@ -15,7 +16,7 @@ class CommandUDPReciverManager {
|
||||
if(dataSize < 4){
|
||||
return;
|
||||
}
|
||||
// print("appDataReceiveData:$data");
|
||||
print("appDataReceiveData:$data");
|
||||
|
||||
Uint8List data1 = Uint8List.fromList(data);
|
||||
if(data1.length==1){
|
||||
@ -27,7 +28,7 @@ class CommandUDPReciverManager {
|
||||
|
||||
if (data[6] == 4) {
|
||||
if(data[7] == 2){
|
||||
print("心跳包反馈 在线状态");
|
||||
// print("心跳包反馈 在线状态");
|
||||
} else if(data[7]==3) {
|
||||
[Toast.show(msg: "您已在其他设备登录")];
|
||||
}
|
||||
@ -38,9 +39,8 @@ class CommandUDPReciverManager {
|
||||
// }
|
||||
|
||||
// 对讲命令
|
||||
// var beiCallType = data[8] & 0xff;
|
||||
var beiCallType = 1 & 0xff;
|
||||
print("被呼叫2 类型$beiCallType");
|
||||
var beiCallType = data[8] & 0xff;
|
||||
print("被呼叫类型$beiCallType");
|
||||
switch (beiCallType) {
|
||||
case 1:{
|
||||
//被叫
|
||||
@ -57,8 +57,9 @@ class CommandUDPReciverManager {
|
||||
break;
|
||||
case 7:
|
||||
case 8:{//音视频数据
|
||||
//print("音视频数据");
|
||||
|
||||
print("音视频数据");
|
||||
CallTalk cllTalk = CallTalk();
|
||||
cllTalk.getAVData(data1, data1.length);
|
||||
}
|
||||
break;
|
||||
case 9:{
|
||||
@ -66,8 +67,7 @@ class CommandUDPReciverManager {
|
||||
//print("对方保持连接");
|
||||
data[7] = 2;
|
||||
|
||||
}
|
||||
else{
|
||||
} else{
|
||||
//print("保持连接反馈");
|
||||
|
||||
}
|
||||
|
||||
@ -19,18 +19,16 @@ class UDPTalkClass{
|
||||
factory UDPTalkClass() => _share();
|
||||
UDPTalkClass get manager => _share();
|
||||
|
||||
UDPTalkClass._init() {
|
||||
|
||||
}
|
||||
UDPTalkClass._init();
|
||||
|
||||
var status = 0;// 0空闲
|
||||
var remoteEquid;
|
||||
var remoteEquid;// 手机号
|
||||
late Timer timer;
|
||||
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
|
||||
var isBeCall = false;
|
||||
|
||||
beCallW({List<int>? data, String? ip, int? port}) async {
|
||||
print("beCall");
|
||||
// print("beCall");
|
||||
// if (await isCallMe(data)) {
|
||||
// return;
|
||||
// }
|
||||
@ -42,10 +40,12 @@ class UDPTalkClass{
|
||||
remoteEquid = getEquidFrombb(data, 9);
|
||||
status = 6;
|
||||
|
||||
// 呼叫应答,呼叫成功
|
||||
data![7] = 1;
|
||||
data[8] = 4;
|
||||
UDPManage().sendData(data);
|
||||
|
||||
// 门锁发送视频
|
||||
data[7] = 1;
|
||||
data[8] = 5;
|
||||
UDPManage().sendData(data);
|
||||
@ -59,6 +59,7 @@ class UDPTalkClass{
|
||||
|
||||
if(UDPTalkClass().isBeCall == false){
|
||||
UDPTalkClass().isBeCall = true;
|
||||
// 保持连接
|
||||
timer = Timer.periodic(1.seconds, (timer) {
|
||||
data[7] = 1;
|
||||
data[8] = 9;
|
||||
|
||||
@ -54,4 +54,10 @@ class LockSetChangeSetRefreshLockDetailWithType{
|
||||
int type;// 0 考勤 1开锁时是否需联网
|
||||
int setResult;
|
||||
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
|
||||
}
|
||||
|
||||
/// 获取到视频流数据然后刷新界面
|
||||
class GetTVDataRefreshUI{
|
||||
List<int> tvList;
|
||||
GetTVDataRefreshUI(this.tvList);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user