我需要在 iphone 上实时播放线性 pcm 数据。
我得到一个 直播 通过 RTSP 的数据流,我目前可以从 iphone 读取它,将其保存到文件中,在支持 pcm 的桌面音频播放器上播放,因此我认为传输还可以。
现在我被卡住了,我已经完全了!不知道如何处理包含数据的 NSData 对象。
我做了一些研究,最终得到了 AudioUnits,但我无法将我的 NSdata 分配给音频缓冲区,我不知道如何分配。
就我而言,我分配了回调:
AURenderCallbackStruct input;
input.inputProc = makeSound;
input.inputProcRefCon = self;
并具有“makeSound”功能:
OSStatus makeSound(
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
//so what to do here?
//ioData->mBuffers[0].mdata = [mySound bytes]; does not work, nor does
//ioData->mBuffers = [mySound byes];
return noErr;
}
我的方法大体上是错误的吗?
我需要知道/学习/实现什么?我是一个完整的音频新手,所以我的建议是,我不需要多个缓冲区,因为当我从 rtsp 获得新的声音包时,旧的声音包就结束了,因为它是一个实时流(我基于我的录音,这只是附加了没有查找表示时间戳的字节,因为无论如何我都没有收到)
干杯
最佳答案
我不知道这是否正是您正在寻找的,但 Matt Gallagher 的一些 AudioStreamer 代码可能对您有所帮助。特别是,看看他是如何处理音频缓冲的。
http://cocoawithlove.com/2010/03/streaming-mp3aac-audio-again.html
关于iphone - 在 iphone 上播放 pcm 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5884236/