AVAssetWriter / AVAudioPlayer冲突?

时间:2011-07-23 21:12:42

标签: iphone ios audio avaudioplayer avassetwriter

几周前,我发布了关于AVAssetWriter遇到的问题的帖子:AVAssetWriter Woes

在使用AVAudioPlayer或任何音频系统播放音频时,进一步研究似乎导致使用AVAssetWriter发生冲突。我也试过OpenAL。

以下是背景资料:

  • 使用AVAssetWriter从图像或图像集向视频写入帧时,可以正常调用UNTIL [AVAudioPlayer播放]。

  • 这只发生在设备上,而不是SIM卡。

  • 尝试从CVPixelBufferPoolCreatePixelBuffer创建像素缓冲区时发生错误。

  • 音频开始播放后,在suddely之前存在的AVAssetWriterInputPixelBufferAdaptor.pixelBufferPool变为零。

您可以在此处下载代表项目:http://www.mediafire.com/?5k7kqyvtbfdgdgv

注释AVAudioPlayer播放,它将在设备上运行。

感谢任何线索。

2 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。

如果您希望AVAudioPlayer和AVAssetWriter一起正常运行,则必须具有“可混合”的音频会话类别。

您可以使用可混合的类别,如AVAudioSessionCategoryAmbient。

但是,我需要使用AVAudioSessionCategoryPlayAndRecord。

您可以通过实施以下任何类别来设置:

OSStatus propertySetError = 0;

UInt32 allowMixing = true;

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

答案 1 :(得分: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)];