Воспроизведение потокового аудио с AVAudioengine (iOS) - PullRequest
1 голос
/ 23 октября 2019

Я хочу транслировать аудио на 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.

Есть ли лучший способ потреблять аудиоданные напрямую (мгновенно)?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Другой вопрос:

Я получил свои аудиоданные, передаваемые по сети (например, каждые 20 мс в одном пакете). Каков наилучший способ воспроизведения этих аудиоданных?

Звонить каждый раз (20 мс):

playerNode.scheduleBuffer(buffer!, completionHandler: nil)

Или дождаться завершенияHandler и позвонить, чем playerNode.scheduleBuffer ()

Какое здесь лучшее решение?

0 голосов
/ 25 октября 2019

попробуйте AVAudioConverter

let converter = AVAudioConverter (от: inputFormat, до: outputFormat)

...