Ios 每个AVCaptureDevice同时输出多个AVCaptureVideoDataOutput

Ios 每个AVCaptureDevice同时输出多个AVCaptureVideoDataOutput,ios,avcapturesession,avcapturedevice,avcaptureoutput,Ios,Avcapturesession,Avcapturedevice,Avcaptureoutput,场景 我正在开发一个视频处理和流媒体的应用程序。我已经有了从后置摄像头拍摄的视频流。问题是我还必须对视频数据进行处理,但只能在本地进行。事实证明,我用于本地视频处理的API需要不同于我用于将数据流传输到服务器的API的像素格式。似乎我需要两个单独的会话同时从后置摄像头捕获视频。这将允许一个会话进行处理,另一个用于流式处理 问题 每次尝试创建新会话以使用相同的AVCaptureDevice(返回)时,流媒体立即停止。代码如下: captureSession = [[AVCaptureSession

场景

我正在开发一个视频处理和流媒体的应用程序。我已经有了从后置摄像头拍摄的视频流。问题是我还必须对视频数据进行处理,但只能在本地进行。事实证明,我用于本地视频处理的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];
}
我收到一个
视频设备,它使用ebyanotherclient

videoDeviceInUseByAnotherClient:由于视频设备暂时不可用(例如,被另一个捕获会话使用时)而导致的中断

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

问题

如何使用相同的
AVCaptureDevice
同时输出到两个独立的
AVCaptureVideoDataOutput
s?或者,我如何实现与下图相同的目标


我不是专家,但您可以使用
addInputWithNoConnections
addOutputWithNoConnections
然后手动设置所需的连接。我不是专家,但是您可以使用
addInputWithNoConnections
addOutputWithNoConnections
然后手动设置所需的连接。