我在谷歌上搜索这个问题很多天,但我没有找到解决我的简单问题的方法。
我正在尝试在录制声音时播放视频。在没有视频的情况下录制声音也能正常工作。并且视频在没有录制的情况下也能正常工作。
一旦我将两者放在一起,录音就会抛出对声音没有反应的值,并且视频不再播放。顺便说一句,这只发生在我的设备(iPhone 4 / iOS5)上。在模拟器中一切正常。
这是我在 ViewController 中的代码的简化版本。
// Audio Recorder
NSURL *nullUrl = [NSURL fileURLWithPath:@"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat:44100.0], AVSampleRateKey,
[NSNumber numberWithInt:kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt:1], AVNumberOfChannelsKey,
[NSNumber numberWithInt:AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *recorderError;
_recorder = [[AVAudioRecorder alloc] initWithURL:nullUrl settings:settings error:&recorderError];
if (_recorder)
{
[_recorder prepareToRecord];
_recorder.meteringEnabled = YES;
[_recorder record];
_levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(levelTimerCallback:) userInfo:nil repeats:YES];
}
// Video Player
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Video"
withExtension:@"mp4"
subdirectory:nil];
_avPlayer = [[AVPlayer playerWithURL:url] retain];
_avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:_avPlayer] retain];
_avPlayerLayer.frame = self.view.layer.bounds;
[self.view.layer addSublayer:_avPlayerLayer];
[_avPlayer play];
记录器只是输出一个在 levelTimerCallback 方法中读取的值。该视频只是播放一个短视频。
我发现我必须为 AVAudioSession 设置一个类别。如果我在应用程序启动后实现此代码,则视频正在播放,但录音机仍然输出相同的值而对声音没有反应。
NSError *error = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
[audioSession setActive:YES error:&error];
我可以想象我可能不得不对 AudioSessionSetProperty 做一些事情
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
但这不会改变任何事情。您知道我缺少什么或如何正确设置 AudioSession 吗?
谢谢你的每一个提示!
干杯,拉斐尔;)