gpt4 book ai didi

ios - iOS 8 上的 AVCaptureVideoDataOutput 不会在指定的调度队列上发布样本缓冲区

转载 作者:可可西里 更新时间:2023-11-01 04:34:37 24 4
gpt4 key购买 nike

当使用 AVCaptureVideoDataOutput 并使用调度队列 (setSampleBufferDelegate:queue) 定义样本缓冲区委托(delegate)时,我们在 iOS 8 上遇到 AVFoundation 不会将样本缓冲区发布到指定的调度队列,而是始终使用“com.apple. avfoundation.videodataoutput.bufferqueue”。

这在 iOS7 上按预期工作。

有没有人遇到过这种情况?

一个明显的解决方法是在回调中手动调用 dispatch_sync 以将处理同步到自定义调度队列,但是奇怪的是,这会导致死锁...

产生此问题的示例代码:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = self.view.bounds;
[self.view.layer addSublayer:captureVideoPreviewLayer];

[session addInput:[AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:nil]];

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

queue = dispatch_queue_create("our.dispatch.queue", DISPATCH_QUEUE_SERIAL);

[output setSampleBufferDelegate:self queue:queue];

[session addOutput:output];

[session startRunning];
}

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
NSLog(@"Running on queue %@, queue that was set is %@, this is %s", dispatch_get_current_queue(),
[captureOutput performSelector:@selector(sampleBufferCallbackQueue)],
queue == dispatch_get_current_queue() ? "our queue" : "not our queue!!!");
}

最佳答案

这里可能发生的情况是他们的队列 com.apple.avfoundation.videodataoutput.bufferqueue 已使用 dispatch_set_target_queue 设置为以您的队列为目标。这在功能上等同于分派(dispatch)到您的队列,但会解释名称,并且还会解释当您尝试分派(dispatch)回队列时的死锁。

换句话说,仅仅因为队列名称不等于您的队列名称并不意味着该 block 没有在您的队列上执行。

关于ios - iOS 8 上的 AVCaptureVideoDataOutput 不会在指定的调度队列上发布样本缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26160548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com