2011-01-17 2 views
5

Я написал приложение для записи видео с iPhone. Он работает нормально, но имеет одну большую проблему. Когда AVCaptureSession запускается, и пользователь пытается воспроизвести аудио из своей библиотеки (iPod). Это действие приведет к завершению работы AVCaptureSession. Есть идеи, которые могут помешать пользователю попробовать воспроизвести звук или решить эту проблему?Audio сделает 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

Вы когда-нибудь находили решение для этого? – Sandy

+0

Вы когда-нибудь находили решение @anistar? –

+0

К сожалению, я столкнулся с той же проблемой - любые идеи? – nixau

ответ

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]; 
+1

Но какие вещи вы должны остановить или сэкономить на перерыве, чтобы убедиться, что он продолжает работать? – Alper

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}); 
1

Это работает для меня:

- (void)setupAudio { 
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil]; 
    UInt32 doSetProperty = 1; 
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 

}

+0

Как вы добавили это в свой avcapturesession, можете ли вы предоставить больше кода? –

+0

Извиняюсь, прошло несколько лет с тех пор, как я должен был посмотреть на это и не могу представить никакого реального контекста, чем то, что здесь. – micahp

Смежные вопросы