Я хочу транслировать аудио на iOS, используя AVAudioEngine
. В настоящее время я не уверен, как это сделать.
Я получаю данные RTP из сети и хочу воспроизвести эти аудиоданные с AVAudioEngine
.
Я использую iOS Network.Framework
получать данные сети. Затем я декодирую речевые данные и теперь хочу воспроизвести их, используя AVAudioEngine
.
Вот мой код приема:
connection.receiveMessage { (data, context, isComplete, error) in
if isComplete {
// decode the raw network data with Audio codec G711/G722
let decodedData = AudioDecoder.decode(enc: data, frames: 160)
// create PCMBuffer for audio data for playback
let format = AVAudioFormat(standardFormatWithSampleRate: 8000, channels: 1)
let buffer = AVAudioPCMBuffer(pcmFormat: format!, frameCapacity: 160)!
buffer.frameLength = buffer.frameCapacity
// TODO: now I have to copy the decodedData --> buffer (AVAudioPCMBuffer)
if error == nil {
// recall receive() for next message
self.receive(on: connection)
}
}
Как мне скопировать decodedData
в мой AVAudioPCMBuffer
? В настоящее время мой buffer
var создан, но не содержит никаких данных.
Справочная информация:
Мой общий подход заключается в том, чтобы кэшировать внутри PCMBuffer коллекцию и воспроизводить эту коллекцию с помощью AVAudioEngine
.
Есть ли лучший способ потреблять аудиоданные напрямую (мгновенно)?