方案
我正在开发一个执行视频处理和流媒体的应用程序。我已经完全从后置摄像头流式传输视频。问题是我必须对视频数据进行处理,但仅限于本地处理。事实证明我使用的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 ?或者我怎样才能实现与下图相同的东西?