同一个AVCaptureDevice的多个AVCaptureVideoDataOutput

时间:2017-09-29 00:30:38

标签: ios avcapturesession avcapturedevice avcaptureoutput

方案

我正在开发一个执行视频处理和流媒体的应用程序。我已经完全从后置摄像头流式传输视频。问题是我必须对视频数据进行处理,但仅限于本地处理。事实证明我使用的API用于执行本地视频处理需要与我用于将数据流式传输到服务器的API不同的像素格式。看来我需要有两个独立的会话同时从后置摄像头捕获视频。这将允许一个会话进行处理,一个会话用于流式传输。

问题

每当我尝试创建一个新会话以使用相同的AVCaptureDevice(返回)时,我的流式传输会立即停止。代码如下:

captureSession = [[AVCaptureSession alloc] init];

AVCaptureDeviceInput *videoIn = [[AVCaptureDeviceInput alloc]
                                 initWithDevice:[self videoDeviceWithPosition:AVCaptureDevicePositionBack]
                                 error:nil];

if ([captureSession canAddInput:videoIn])
{
    [captureSession addInput:videoIn];
}

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

[videoOut setAlwaysDiscardsLateVideoFrames:YES];
[videoOut setVideoSettings:
 @{(id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)}];
dispatch_queue_t videoCaptureQueue =
dispatch_queue_create("Video Process Queue", DISPATCH_QUEUE_SERIAL);
[videoOut setSampleBufferDelegate:self queue:videoCaptureQueue];
if ([captureSession canAddOutput:videoOut]) {
    [captureSession addOutput:videoOut];
}

我收到了interruption reason videoDeviceInUseByAnotherClient

  

videoDeviceInUseByAnotherClient:视频设备暂时不可用导致的中断(例如,当被其他捕获会话使用时)。

我还尝试将原始捕获会话的输出添加到新会话,但每次canAddOutput:方法返回NO时。我的猜测是因为已经存在与该输出相关联的会话。

问题

如何使用相同的AVCaptureDevice同时输出到两个单独的AVCaptureVideoDataOutput s ?或者我怎样才能实现与下图相同的东西?

enter image description here

0 个答案:

没有答案
相关问题