几周前,我发布了关于AVAssetWriter遇到的问题的帖子:AVAssetWriter Woes
在使用AVAudioPlayer或任何音频系统播放音频时,进一步研究似乎导致使用AVAssetWriter发生冲突。我也试过OpenAL。
以下是背景资料:
使用AVAssetWriter从图像或图像集向视频写入帧时,可以正常调用UNTIL [AVAudioPlayer播放]。
这只发生在设备上,而不是SIM卡。
尝试从CVPixelBufferPoolCreatePixelBuffer创建像素缓冲区时发生错误。
音频开始播放后,在suddely之前存在的AVAssetWriterInputPixelBufferAdaptor.pixelBufferPool变为零。
您可以在此处下载代表项目:http://www.mediafire.com/?5k7kqyvtbfdgdgv
注释AVAudioPlayer播放,它将在设备上运行。
感谢任何线索。
答案 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)];