Tim*_*Tim 5 audio streaming playback ios avaudioengine
我想使用 iOS 在 iOS 上流式传输音频AVAudioEngine
。目前我不知道该怎么做。
我从网络获取 RTP 数据并想要播放此音频数据AVAudioEngine
。
我正在使用iOSNetwork.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)
}
}
Run Code Online (Sandbox Code Playgroud)
我如何复制decodedData
到我的AVAudioPCMBuffer
?目前,我的buffer
var 已创建,但不包含任何数据。
背景资料:
我的一般方法是在 PCMBuffer 中缓存一个集合,并使用AVAudioEngine
.
有没有更好的方法直接(立即)使用音频数据?
小智 6
不确定您是否找到了解决方案,但我能够使用 AVAudioEngine 传输音频。我没有使用 AudioDecoder,而是使用 URLSession 流式传输数据包来下载数据包。然后我将这些下载的数据包流式传输到 AudioFileStreamOpen 中,并在其中格式化音频数据包。最后,我使用 AudioConverterFillComplexBuffer 将这些数据包转换为引擎的 PCM 缓冲区,并将这些缓冲区安排到引擎中进行播放。
这是我完成的项目:https://github.com/tanhakabir/SwiftAudioPlayer,我在其中设置了一个在我的播客播放器上使用的完整引擎。这是我写的关于整体架构的简短博客:https://medium.com/chameleon-podcast/creating-an-advanced-streaming-audio-engine-for-ios-9fbc7aef4115
这是我的库所基于的博客: https: //github.com/syedhali/AudioStreamer
归档时间: |
|
查看次数: |
2611 次 |
最近记录: |