2011-07-23 35 views
1

星期前,我就貼我與AVAssetWriter有問題的主題:AVAssetWriter WoesAVAssetWriter/AVAudioPlayer衝突?

進一步的研究似乎導致了使用AVAssetWriter播放音頻的時候用AVAudioPlayer或者,真的,任何音響系統衝突。我也嘗試過使用OpenAL。

這裏的背景:

  • 使用AVAssetWriter從圖像寫入幀的視​​頻或圖像組運行正常,直到[AVAudioPlayer戲]被調用。

  • 這隻發生在設備上,而不是SIM卡。

  • 嘗試從CVPixelBufferPoolCreatePixelBuffer創建像素緩衝區時發生錯誤。

  • 音頻開始播放後,suddely之前存在的AVAssetWriterInputPixelBufferAdaptor.pixelBufferPool變爲零。

您可以在這裏下載代表項目:http://www.mediafire.com/?5k7kqyvtbfdgdgv

註釋掉AVAudioPlayer玩,它會在設備上工作。

任何線索表示讚賞。

回答

0

我找到了解決這個問題的辦法。

如果您想讓AVAudioPlayer和AVAssetWriter在一起正確行爲,您必須具有「可混合」音頻會話類別。

您可以使用類似AVAudioSessionCategoryAmbient的混合類別。

但是,我需要使用AVAudioSessionCategoryPlayAndRecord。

您可以設置任何類別是通過實施這個混合的:

OSStatus propertySetError = 0; 

UInt32 allowMixing = true; 

propertySetError = AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryMixWithOthers, // 1 
         sizeof (allowMixing),         // 2 
         &allowMixing           // 3 
        ); 
0

這上面的回答是完全。它不起作用。取而代之的是

// Setup to be able to record global sounds (preexisting app sounds) 
    NSError *sessionError = nil; 
    if ([[AVAudioSession sharedInstance] respondsToSelector:@selector(setCategory:withOptions:error:)]) 
     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:&sessionError]; 
    else 
     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; 

    // Set the audio session to be active 
    [[AVAudioSession sharedInstance] setActive:YES error:&sessionError]; 

//then call your asset writer 
movieWriter = [[AVAssetWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];