Метод captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection вызывается всего несколько раз

Я записываю звук с внешнего микрофона Bluetooth. Но я не могу ничего записать.

Этот метод вызывается только один раз в начале текущего сеанса AvCaptureSession.

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

После этого я никогда не вызываю этот метод для обработки звука.

Для создания сеанса захвата я делаю следующее:

self.captureSession.usesApplicationAudioSession = true;
self.captureSession.automaticallyConfiguresApplicationAudioSession = true;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil];


/* Audio */
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];


audioIn = [[AVCaptureDeviceInput alloc] initWithDevice:audioDevice error:nil];
if ( [_captureSession canAddInput:audioIn] ) {
    [_captureSession addInput:audioIn];
}
[audioIn release];

audioOut = [[AVCaptureAudioDataOutput alloc] init];
// Put audio on its own queue to ensure that our video processing doesn't cause us to drop audio
dispatch_queue_t audioCaptureQueue = dispatch_queue_create( "com.apple.sample.capturepipeline.audio", DISPATCH_QUEUE_SERIAL );
[audioOut setSampleBufferDelegate:self queue:audioCaptureQueue];

[audioCaptureQueue release];

if ( [self.captureSession canAddOutput:audioOut] ) {
    [self.captureSession addOutput:audioOut];
}
_audioConnection = [audioOut connectionWithMediaType:AVMediaTypeAudio];
[audioOut release];

Если я использую другое устройство Bluetooth, оно всегда работает, но не с этим. Я думал, что это устройство может быть неисправным, но на самом деле оно работает в других приложениях для записи звука.

Действительно странная проблема. Кто-нибудь знает, что может происходить?

Спасибо!


person Pablo Martinez    schedule 25.04.2015    source источник
comment
Вы можете попробовать повторно реализовать свой код с помощью CoreAudio или AVAudioEngine.   -  person Rhythmic Fistman    schedule 26.04.2015
comment
Могу ли я по-прежнему использовать тот же код для видео? Потому что я записываю видео со звуком.   -  person Pablo Martinez    schedule 26.04.2015