2011-09-24 131 views
0

所以我設置音頻會議AVAssestReader停止音頻回調

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionSetActive(true); 

UInt32 audioCategory = kAudioSessionCategory_MediaPlayback; //for output audio 
OSStatus tErr = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(audioCategory),&audioCategory); 

然後設置任何的AudioQueue或RemoteIO設置從文件直接播放一些音頻。

AudioQueueStart(mQueue, NULL); 

一旦我的音頻播放,我可以看到我的應用程序狀態欄中的'播放圖標'。我下一步設置AVAssetReader。

AVAssetTrack* songTrack = [songURL.tracks objectAtIndex:0]; 

NSDictionary* outputSettingsDict = [[NSDictionary alloc] initWithObjectsAndKeys: 

            [NSNumber numberWithInt:kAudioFormatLinearPCM],AVFormatIDKey, 
            //  [NSNumber numberWithInt:AUDIO_SAMPLE_RATE],AVSampleRateKey, /*Not Supported*/ 
            //  [NSNumber numberWithInt: 2],AVNumberOfChannelsKey, /*Not Supported*/ 

            [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey, 
            [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey, 
            [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, 
            [NSNumber numberWithBool:NO],AVLinearPCMIsNonInterleaved, 

            nil]; 

NSError* error = nil; 
AVAssetReader* reader = [[AVAssetReader alloc] initWithAsset:songURL error:&error]; 

//  { 
//   AVAssetReaderTrackOutput* output = [[AVAssetReaderTrackOutput alloc] initWithTrack:songTrack outputSettings:outputSettingsDict]; 
//   [reader addOutput:output]; 
//   [output release]; 
//  } 

{ 
    AVAssetReaderAudioMixOutput * readaudiofile = [AVAssetReaderAudioMixOutput assetReaderAudioMixOutputWithAudioTracks:(songURL.tracks) audioSettings:outputSettingsDict]; 
    [reader addOutput:readaudiofile]; 
    [readaudiofile release]; 
} 

return reader; 

當我打電話給[reader startReading]時,音頻停止播放。在RemoteIO和AudioQueue的情況下,回調都停止被調用。

如果我添加混合選項:

AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (UInt32), &(UInt32) {0}); 

那麼「播放圖標」時AudioQueueStart後的音頻被稱爲不再出現。由於手機不會將我視爲主要音頻源,因此我也被鎖定在其他功能之外。

有誰知道一種方法,我可以使用AVAssetReader,仍然是主音頻源?

回答

0

從iOS 5開始,這個問題已經解決。它仍然不適用於iOS 4或更低版本。 MixWithOthers不需要(可以設置爲false),即使AVAssetReader正在讀取,AudioQueue/RemoteIO也將繼續接收回調。