首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVFoundation:从预览视图获取CMSampleBuffer (同时录制)

AVFoundation:从预览视图获取CMSampleBuffer (同时录制)
EN

Stack Overflow用户
提问于 2021-05-07 13:10:48
回答 1查看 148关注 0票数 0

我正在尝试创建一个具有以下功能的相机捕捉会话:

  1. 预览
  2. 照片捕捉
  3. 视频捕获
  4. 实时帧处理(AI)

虽然前两件事不成问题,但我还没有找到将最后两件事情分开处理的方法。

目前,我使用的是一个单一的AVCaptureVideoDataOutput,首先运行视频记录,然后在相同的功能中对帧进行处理,在同一个队列中。(请参阅代码这里这里)

唯一的问题是,视频捕获4k视频,我不想让帧处理器接收4k缓冲区,因为这将是非常缓慢的,并阻止视频记录(帧下降)。

理想情况下,我希望创建一个用于4k视频录制的AVCaptureDataOutput,另一个在较低的视频中接收帧(预览?)解析--但是不能在同一个捕获会话中使用两个AVCaptureDataOutput

我想也许我可以“勾引”预览层,从那里接收CMSampleBuffer,就像captureOutput(...)功能一样,因为这些都是预览大小的分辨率,有谁知道这是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-07 14:33:53

为此,我建议实现自定义呈现程序流。您只需要一个AVCaptureDataOutput,而不需要由iOS提供的系统PreviewLayer。

  • 向YUV设置配色方案(比BGRA更紧凑)
  • 获取CMSampleBuffer in AVCaptureDataOutput
  • 发送CMSampleBuffer到金属纹理。
  • 在金属中创建大小调整的低分辨率纹理
  • Hi分辨率纹理发送给渲染器在MTKLView中绘制它
  • 低分辨率纹理发送到CVPixelBuffer,然后你可以把它转换成CGImage,CGImage,数据。
  • 向神经网络发送低分辨率图像

我有一篇关于媒体:链接的文章。你可以用它作为例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67435602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档