启动一个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”,而不会出现奇怪的事情。
- AURenderCallback在Swift中
- 在iOS Audio Calling APP中使用循环缓冲区的原因是什么?
- AudioUnits从Springboard返回后导致通用跳过
- iOSaudio单元在某些频率之上切断声音
- 无法使用AudioFileStreamOpen的AudioFileStream_PacketsProccallback中的AudioConverterFillComplexBuffer将MP3转换成PCM
- iOS AUSampler audiounit – EXSaudio文件的文件path问题?
- 从Socket连接在iOS上播放audio
- 在RemoteIOaudio单元回放callback中的AudioBufferList内容
- iOSaudio单元:何时使用AUGraph的必要?