fix:对讲逻辑调整
This commit is contained in:
parent
df215dda60
commit
64304bca62
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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); // 0表示A-law
|
||||
|
||||
List<int> encodedData = G711Tool.encode(amplifiedFrame, 0); // 0表示A-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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user