app-starlock/lib/talk/startChart/views/talkView/talk_view_state.dart

91 lines
4.0 KiB
Dart
Raw Normal View History

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:get/get_rx/src/rx_types/rx_types.dart';
import 'package:get/state_manager.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/status/start_chart_talk_status.dart';
import '../../../../tools/storage.dart';
enum NetworkStatus {
normal, // 0
lagging, // 1
delayed, // 2
packetLoss // 3
}
class TalkViewState {
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; //得到的音频流字节数据
GlobalKey globalKey = GlobalKey();
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;
// 星图对讲相关状态
List<TalkData> audioBuffer = <TalkData>[].obs;
List<TalkData> audioBuffer2 = <TalkData>[].obs;
2025-01-14 17:57:33 +08:00
List<TalkData> activeAudioBuffer = <TalkData>[].obs;
List<TalkData> activeVideoBuffer = <TalkData>[].obs;
List<TalkData> videoBuffer = <TalkData>[].obs;
List<TalkData> videoBuffer2 = <TalkData>[].obs;
RxBool isPlaying = false.obs; // 是否开始播放
Rx<TalkStatus> talkStatus = TalkStatus.none.obs; //星图对讲状态
// 获取 startChartTalkStatus 的唯一实例
final StartChartTalkStatus startChartTalkStatus =
StartChartTalkStatus.instance;
2024-12-30 11:53:42 +08:00
// 通话数据流的单例流数据处理类
final TalkDataRepository talkDataRepository = TalkDataRepository.instance;
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; // 是否打开声音
2024-12-30 11:53:42 +08:00
RxBool isRecordingScreen = false.obs; // 是否录屏中
RxBool isRecordingAudio = false.obs; // 是否录音中
Rx<DateTime> startRecordingAudioTime = DateTime.now().obs; // 开始录音时间
Rx<DateTime> endRecordingAudioTime = DateTime.now().obs; // 结束录音时间
RxInt recordingAudioTime = 0.obs; // 录音时间持续时间
RxDouble fps = 0.0.obs; // 添加 FPS 计数
2024-12-30 11:53:42 +08:00
late VoiceProcessor? voiceProcessor; // 音频处理器、录音
2025-01-15 15:43:53 +08:00
final int frameLength = 320; //录音视频帧长度为640
2024-12-30 11:53:42 +08:00
final int sampleRate = 8000; //录音频采样率为8000
List<List<int>> recordingAudioAllFrames = <List<int>>[]; // 录制音频的所有帧
RxInt rotateAngle = 0.obs; // 旋转角度(以弧度为单位)
2025-01-14 17:57:33 +08:00
RxBool isLongPressing = false.obs; // 旋转角度(以弧度为单位)
}