设想
我正在开发一个进行视频处理和流式传输的应用程序。我已经完美地从后置摄像头流式传输视频。问题是我还必须对视频数据进行处理,但只能在本地进行。事实证明,我用来进行本地视频处理的 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];
}
我收到中断原因 videoDeviceInUseByAnotherClient
。
videoDeviceInUseByAnotherClient:由于视频设备暂时不可用(例如,当另一个捕获会话使用时)而导致的中断。
我也尝试将原始捕获会话的输出添加到新会话中,但每次canAddOutput:
方法返回时NO
。我的猜测是因为已经有一个与该输出关联的会话。
问题
我如何使用它同时输出AVCaptureDevice
到两个单独AVCaptureVideoDataOutput
的 s ?或者我怎样才能达到与下图相同的效果?