Mac OS AVFoundation AVCaptureSession не может запустить веб-камеру uvc - PullRequest
0 голосов
/ 20 февраля 2019

Я использую AVFoundation для запуска камеры uvc, у меня есть две камеры uvc, режим передачи одной камеры - изохронная передача transmission, а другой - массовая передача.когда я использую [self.mCaptureSession startRunning], может работать камера, модель передачи которой изохронна, и я могу получить буфер в делегате, но другая камера uvc никогда не вызовет делегата.так почему один и тот же код может показать другое явление.Каждый ответ может помочь, спасибо.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

self.mProcessQueue = dispatch_queue_create("mProcessQueue", DISPATCH_QUEUE_SERIAL);

NSError *error = nil;

self.mCaptureSession = [[AVCaptureSession alloc] init];

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

NSLog(@"localizedName:%@",device.localizedName);

AVCaptureDeviceInput  *deviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:device error:&error];

if(!error) {

    if([self.mCaptureSession canAddInput:deviceInput]) {

        [self.mCaptureSession addInput:deviceInput];

        AVCaptureVideoDataOutput *videoOutput = [[AVCaptureVideoDataOutput alloc] init];

        [videoOutput setSampleBufferDelegate:self queue:self.mProcessQueue];

        if([self.mCaptureSession canAddOutput:videoOutput]) {

            [self.mCaptureSession addOutput:videoOutput];

            [self.mCaptureSession beginConfiguration];
            if (![device lockForConfiguration:&error]) {
                NSLog(@"error:%@",error);
                [self.mCaptureSession commitConfiguration];
                //break;
            }
            device.activeFormat = device.formats[0];
            [device unlockForConfiguration];
            [self.mCaptureSession commitConfiguration];

            [self.mCaptureSession startRunning];

            NSLog(@"run");
        }
    }

} else {
    NSLog(@"error:%@",error);
}}

- (void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
NSLog(@"sssss");}
...