fix:对讲逻辑调整

This commit is contained in:
liyi 2025-04-03 10:36:30 +08:00
parent df215dda60
commit 64304bca62
4 changed files with 53 additions and 11 deletions

View File

@ -6,6 +6,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/starChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/starChart/constant/talk_status.dart';
import 'package:star_lock/talk/starChart/entity/scp_message.dart';
@ -26,13 +27,13 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
@override
void handleReq(ScpMessage scpMessage) async {
//
replySuccessMessage(scpMessage);
//
final loginData = await Storage.getLoginData();
//
if (loginData != null &&
(talkStatus.status != TalkStatus.passiveCallWaitingAnswer && talkStatus.status!=TalkStatus.answeredSuccessfully)) {
(talkStatus.status != TalkStatus.passiveCallWaitingAnswer ||
talkStatus.status != TalkStatus.answeredSuccessfully)) {
//
final TalkReq talkReq = scpMessage.Payload;
startChartManage.FromPeerId = scpMessage.ToPeerId!;
@ -40,6 +41,12 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
startChartManage.lockPeerId = scpMessage.FromPeerId!;
//
_talkRequestEvent(talkObjectName: talkReq.callerName);
//
replySuccessMessage(scpMessage);
} else {
// ,
replyErrorMessage(scpMessage);
}
}

View File

@ -71,6 +71,15 @@ class ScpMessageBaseHandle {
messageId: scpMessage.MessageId!,
);
}
//
void replyErrorMessage(ScpMessage scpMessage) {
startChartManage.sendGenericRespErrorMessage(
ToPeerId: scpMessage.FromPeerId!,
FromPeerId: scpMessage.ToPeerId!,
PayloadType: scpMessage.PayloadType!,
messageId: scpMessage.MessageId!,
);
}
bool checkGenericRespSuccess(GenericResp genericResp) {
if (genericResp == null) return false;

View File

@ -650,10 +650,15 @@ class StartChartManage {
}
//
void sendGenericRespErrorMessage(
{required String ToPeerId,
required String FromPeerId,
required int PayloadType}) async {
void sendGenericRespErrorMessage({
required String ToPeerId,
required String FromPeerId,
required int PayloadType,
required int messageId,
}) async {
if (messageId == null) {
messageId = MessageCommand.getNextMessageId(ToPeerId, increment: false);
}
final message = MessageCommand.genericRespErrorMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,

View File

@ -659,15 +659,14 @@ class TalkViewLogic extends BaseGetXController {
//
Future<void> _onFrame(List<int> frame) async {
//
List<int> amplifiedFrame = _applyGain(frame, 1.6);
// G711数据
List<int> encodedData = G711Tool.encode(frame, 0); // 0A-law
List<int> encodedData = G711Tool.encode(amplifiedFrame, 0); // 0A-law
_bufferedAudioFrames.addAll(encodedData);
final int ms = DateTime.now().millisecondsSinceEpoch -
state.startRecordingAudioTime.value.millisecondsSinceEpoch;
int getFrameLength = state.frameLength;
if (Platform.isIOS) {
getFrameLength = state.frameLength * 2;
@ -694,5 +693,27 @@ class TalkViewLogic extends BaseGetXController {
AppLog.log(error.message!);
}
//
List<int> _applyGain(List<int> pcmData, double gainFactor) {
List<int> result = List<int>.filled(pcmData.length, 0);
for (int i = 0; i < pcmData.length; i++) {
// PCM数据通常是有符号的16位整数
int sample = pcmData[i];
//
double amplified = sample * gainFactor;
//
if (amplified > 32767) {
amplified = 32767;
} else if (amplified < -32768) {
amplified = -32768;
}
result[i] = amplified.toInt();
}
return result;
}
}