Я использую 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");}