我写了一个应用程序来录制iPhone的视频。它工作正常,但有一个大问题。 当AVCaptureSession开始运行并且用户尝试播放来自其库(iPod)的音频时。 此操作将使AVCaptureSession终止。 有什么想法可以阻止用户尝试播放音频或解决这个问题吗?
这是我的代码:
videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *videoDeviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:videoDevice error:nil];
AVCaptureDeviceInput *audioDeviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:audioDevice error:nil];
movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
captureSession = [[AVCaptureSession alloc] init];
[captureSession beginConfiguration];
[captureSession setSessionPreset:AVCaptureSessionPresetHigh];
[captureSession addInput:videoDeviceInput];
[captureSession addInput:audioDeviceInput];
[captureSession addOutput:movieFileOutput];
[captureSession commitConfiguration];
[captureSession startRunning];
答案 0 :(得分:1)
这对我有用:
- (void)setupAudio {
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
}
答案 1 :(得分:0)
您需要使用NSNotificationCenter
。使用下面的代码(我还包括一些其他有用的方法),并为AVCaptureSessionWasInterruptedNotification
编写一个方法,以任何方式处理捕获中断。我希望有所帮助。
NSNotificationCenter *notify = [NSNotificationCenter defaultCenter];
[notify addObserver: self selector: @selector(onVideoError:) name: AVCaptureSessionRuntimeErrorNotification object: captureSession];
[notify addObserver: self selector: @selector(onVideoInterrupted:) name: AVCaptureSessionWasInterruptedNotification object: captureSession];
[notify addObserver: self selector: @selector(onVideoEnded:) name: AVCaptureSessionInterruptionEndedNotification object: captureSession];
[notify addObserver: self selector: @selector(onVideoDidStopRunning:) name: AVCaptureSessionDidStopRunningNotification object: captureSession];
[notify addObserver: self selector: @selector(onVideoStart:) name: AVCaptureSessionDidStartRunningNotification object: captureSession];
答案 2 :(得分:0)
尝试搞乱音频会话!
这里有一个关于你能做什么的快速猜测,但我还没有特别尝试过iPod:
OSStatus status = noErr;
status |= AudioSessionInitialize(CFRunLoopGetMain(), kCFRunLoopCommonModes, PVAudioSessionInterruptionListener, NULL);
status |= AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(UInt32), &(UInt32){kAudioSessionCategory_PlayAndRecord});
status |= AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers,
sizeof(UInt32),
&(UInt32){true});
status |= AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck,
sizeof(UInt32),
&(UInt32){false});
status |= AudioSessionSetActive(YES);
if (status != noErr) {
NSLog(@"ERROR: There was an error in setting the audio session");
}
我对环境声音音频类别也有一些好运(即使它出错,似乎允许在录制视频时播放音频):
status |= AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(UInt32), &(UInt32){kAudioSessionCategory_AmbientSound});