【发布时间】:2019-10-23 10:23:53
【问题描述】:
我想在 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 播放这个集合。
有没有更好的方法直接(即时)消费音频数据?
【问题讨论】:
-
我解码的线性数据从 Int16 类型的数组中兑现。所以 var decodedData 来自 [Int16] 类型,也许有可能直接使用这些数据? scheduleBuffer 函数只允许 AVAudioPCMBuffer 作为输入。
标签: ios audio streaming playback avaudioengine