启动一个AVAssetReader,停止对远程I / O AudioUnit的callback
我正在使用AVAssetReader从iPod库中读取audio。 ( 见这里 )我然后采取读缓冲区,并通过一个audio单元播放。 我正在尝试折叠代码,以便在播放audio时进行stream式传输。 但是,如果AVAssetReader正在运行,则AudioUnit将停止接收对其的kAudioUnitProperty_SetRenderCallback的调用。
我简化了我的代码,只在AudioUnitscallback中播放文件…
OSStatus UnitRenderCB(void* pRefCon, AudioUnitRenderActionFlags* flags, const AudioTimeStamp* timeStamp, UInt32 busNum, UInt32 numFrames, AudioBufferList* pData){ OSStatus tErr = noErr; MySoundStream* pS = (MySoundStream*)pRefCon; ExtAudioFileRead(pS->InRef, &numFrames, pData); // Here's the MP3/WAV/etc Data loaded... if (numFrames <= 0){ // EOF? ExtAudioFileSeek(pS->InRef, 0); return 1; } return tErr; }
然后我调用这个代码,AudioUnit停止播放,UnitRenderCB不再被调用。
NSError* error = nil; AVAssetReader* reader = [[AVAssetReader alloc] initWithAsset:songURL error:&error]; { AVAssetReaderTrackOutput* output = [[AVAssetReaderTrackOutput alloc] initWithTrack:songTrack outputSettings:outputSettingsDict]; [reader addOutput:output]; [output release]; } [reader startReading]; [reader cancelReading]; [reader release];
我正在使用与此处列出的相同的AudioUnit设置
AVAssetReader是否使用AudioUnit系统? 没有办法让他们一起工作吗?
您必须创build一个AudioSession并设置一个可混合的类别,在“使用音乐播放器”下描述。
本文档实际上描述了如何configurationAudioSession以用于MediaPlayer框架,但它同样适用于AVAssetReader。
确保您已经调用了“AudioSessionInitialize”,而不会出现奇怪的事情。
- 核心audioSwift Equalizer一次调整所有频段?
- 如何录制混音器单元输出产生的声音(iOS Core Audio&Audio Graph)
- iOS AUSampler audiounit – EXSaudio文件的文件path问题?
- 核心audio:文件播放呈现callback函数
- 调用AUGraphStart进行播放时接收kAUGraphErr_CannotDoInCurrentContext
- 从IO单元将audio写入磁盘
- 低延迟input/输出AudioQueue
- CMSampleBufferSetDataBufferFromAudioBufferList返回错误12731
- 从iOS上的“audio单元渲染过程”触发UI代码