В настоящее время я занимаюсь кроссплатформенной разработкой приложений Voip на основе платформы Xamarin.iOS.Я провел поиск по реализации AEC на iOS, но большинство тем связано с Objective-C.То, чего я уже достиг, это то, что я могу использовать Audiotoolbox (аудио-очередь) для получения необработанных входных звуковых данных с микрофона и отправки их через разъем.Но во время тестирования с другим устройством, я испытываю очень четкое эхо на телефоне.Вот код:
private void SetupInputQueue()
{
inputQueue = new InputAudioQueue(audioStreamBasicDescription);
//sendbuffer initialization
heading = Encoding.ASCII.GetBytes("msg ");
sendBuffer = new byte[CountAudioBuffers][];
for (int i = 0; i < CountAudioBuffers; i++)
{
sendBuffer[i] = new byte[516];
for (int j = 0; j < heading.Length; j++)
{
sendBuffer[i][j] = heading[j];
}
}
for (int count = 0; count < CountAudioBuffers; count++)
{
IntPtr bufferpointer;
inputQueue.AllocateBuffer(AudioBufferLength, out bufferpointer);
inputQueue.EnqueueBuffer(bufferpointer, AudioBufferLength, null);
}
inputQueue.InputCompleted += HandleInputCompleted;
}
private void HandleInputCompleted(object sender, InputCompletedEventArgs e)
{
unsafe
{
byte* shortPtr = (byte*)e.UnsafeBuffer->AudioData;
for (int count = heading.Length; count < sendBuffer[sendOutIndex].Length; count++)
{
sendBuffer[sendOutIndex][count] = *shortPtr;
shortPtr++;
}
}
socket.SendTo(sendBuffer[sendOutIndex], master);
this.inputQueue.EnqueueBuffer(e.IntPtrBuffer, AudioBufferLength, null);
sendOutIndex = (sendOutIndex + 1) % CountAudioBuffers;
}
В соответствии с AEC на OSX с использованием AudioQueue , я понял намек на то, что я должен передать необработанные звуковые данные на блок ввода-вывода (аудиоустройство?).Но из-за отсутствия примеров в Xamarin.iOS (c #) я не могу понять, как реализовать этот процесс в деталях.Может ли кто-нибудь, знакомый с разработкой приложений Voip на платформе Xamarin, дать мне пример для изучения?Очень ценю любую помощь или подсказку по этому вопросу.
(21 ноября 2018 г.) Некоторые похожие посты, которые я нашел: Запись аудио с аудиоустройством Аудиоустройство Обратные вызовы Пример аудиоустройства