2024-12-27 13:35:56 +08:00
|
|
|
|
import 'dart:async';
|
|
|
|
|
|
import 'dart:typed_data';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
import 'package:flutter_voice_processor/flutter_voice_processor.dart';
|
|
|
|
|
|
import 'package:get/get.dart';
|
|
|
|
|
|
import 'package:get/get_rx/get_rx.dart';
|
|
|
|
|
|
import 'package:network_info_plus/network_info_plus.dart';
|
|
|
|
|
|
import 'package:star_lock/talk/startChart/constant/talk_status.dart';
|
|
|
|
|
|
import 'package:star_lock/talk/startChart/handle/other/talk_data_repository.dart';
|
|
|
|
|
|
import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart';
|
|
|
|
|
|
import 'package:star_lock/talk/startChart/start_chart_talk_status.dart';
|
|
|
|
|
|
|
|
|
|
|
|
import '../../../../tools/storage.dart';
|
|
|
|
|
|
|
2024-12-28 14:58:01 +08:00
|
|
|
|
enum NetworkStatus {
|
|
|
|
|
|
normal, // 0
|
|
|
|
|
|
lagging, // 1
|
|
|
|
|
|
delayed, // 2
|
|
|
|
|
|
packetLoss // 3
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-12-27 13:35:56 +08:00
|
|
|
|
class TalkViewState {
|
2024-12-28 14:58:01 +08:00
|
|
|
|
|
2024-12-27 13:35:56 +08:00
|
|
|
|
int udpSendDataFrameNumber = 0; // 帧序号
|
|
|
|
|
|
// var isSenderAudioData = false.obs;// 是否要发送音频数据
|
|
|
|
|
|
|
|
|
|
|
|
Future<String?> userMobileIP = NetworkInfo().getWifiIP();
|
|
|
|
|
|
Future<String?> userUid = Storage.getUid();
|
|
|
|
|
|
|
|
|
|
|
|
RxInt udpStatus =
|
|
|
|
|
|
0.obs; //0:初始状态 1:等待监视 2: 3:监视中 4:呼叫成功 5:主角通话中 6:被叫通话 8:被叫通话中 9:长按说话
|
|
|
|
|
|
TextEditingController passwordTF = TextEditingController();
|
|
|
|
|
|
|
|
|
|
|
|
Rx<Uint8List> listData = Uint8List(0).obs; //得到的视频流字节数据
|
|
|
|
|
|
RxList<int> listAudioData = <int>[].obs; //得到的音频流字节数据
|
2024-12-28 14:58:01 +08:00
|
|
|
|
GlobalKey globalKey = GlobalKey();
|
2024-12-27 13:35:56 +08:00
|
|
|
|
late final VoiceProcessor? voiceProcessor;
|
|
|
|
|
|
|
|
|
|
|
|
late Timer oneMinuteTimeTimer =
|
|
|
|
|
|
Timer(const Duration(seconds: 1), () {}); // 定时器超过60秒关闭当前界面
|
|
|
|
|
|
RxInt oneMinuteTime = 0.obs; // 定时器秒数
|
|
|
|
|
|
|
|
|
|
|
|
// 定时器如果发送了接听的命令 而没收到回复就每秒重复发送10次
|
|
|
|
|
|
late Timer answerTimer;
|
|
|
|
|
|
late Timer hangUpTimer;
|
|
|
|
|
|
late Timer openDoorTimer;
|
|
|
|
|
|
late AnimationController animationController;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
late Timer autoBackTimer =
|
|
|
|
|
|
Timer(const Duration(seconds: 1), () {}); //发送30秒监视后自动返回
|
|
|
|
|
|
late Timer realTimePicTimer =
|
|
|
|
|
|
Timer(const Duration(seconds: 1), () {}); //监视命令定时器
|
|
|
|
|
|
RxInt elapsedSeconds = 0.obs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-28 14:58:01 +08:00
|
|
|
|
// 星图对讲相关状态
|
|
|
|
|
|
List<TalkData> audioBuffer = <TalkData>[].obs;
|
|
|
|
|
|
List<TalkData> videoBuffer = <TalkData>[].obs;
|
2024-12-27 13:35:56 +08:00
|
|
|
|
RxBool isPlaying = false.obs; // 是否开始播放
|
|
|
|
|
|
Rx<TalkStatus> talkStatus = TalkStatus.none.obs; //星图对讲状态
|
|
|
|
|
|
// 获取 startChartTalkStatus 的唯一实例
|
|
|
|
|
|
final StartChartTalkStatus startChartTalkStatus =
|
|
|
|
|
|
StartChartTalkStatus.instance;
|
|
|
|
|
|
// 通话数据流的单例流数据处理类
|
|
|
|
|
|
final TalkDataRepository talkDataRepository = TalkDataRepository.instance;
|
2024-12-28 14:58:01 +08:00
|
|
|
|
RxInt lastFrameTimestamp = 0.obs; // 上一帧的时间戳,用来判断网络环境
|
|
|
|
|
|
Rx<NetworkStatus> networkStatus =
|
|
|
|
|
|
NetworkStatus.normal.obs; // 网络状态:0-正常 1-网络卡顿 2-网络延迟 3-网络丢包
|
|
|
|
|
|
RxInt alertCount = 0.obs; // 网络状态提示计数器
|
|
|
|
|
|
RxInt maxAlertNumber = 3.obs; // 网络状态提示最大提示次数
|
|
|
|
|
|
RxBool isOpenVoice = true.obs; // 是否打开声音
|
|
|
|
|
|
RxBool isRecording = true.obs; // 是否录屏中
|
|
|
|
|
|
RxDouble fps = 0.0.obs; // 添加 FPS 计数
|
|
|
|
|
|
|
2024-12-27 13:35:56 +08:00
|
|
|
|
}
|