据我所知,iOS 13 以前( WWDC 2019 允许同时获取后置两个摄像头),苹果 AVCaptureSession 只允许按一个镜头输出一个指定分辨率的输出流,但现在有需求:
1 、获取 1080P 的输出流用于渲染,并且需要用 pixelBuffer 的格式,因此最好是需要用到 AVCaptureVideoDataOutputSampleBufferDelegate 中 didOutputSampleBuffer 回调方法。
2 、获取 480P (最好是 480480,但 640480P 也可以接受)的输出流用于图像处理,同样也需要用 pixelBuffer 的格式
按照目前的限制,只有一路固定分辨率的视频流,尝试了一下几种方案:
1 、CoreImage 先压缩再剪裁:对 1080P,30FPS 的视频帧图片按短边进行压缩,再保留中间区域进行裁剪。参考 https://stackoverflow.com/questions/51445776/how-to-scale-resize-cvpixelbufferref-in-objective-c-ios/51527859 。可行,但性能效果差,CPU 性能消耗高。
2 、OpenCV 先压缩再裁剪:类似第一种方案,只不过是将前端 CoreImage 方案换成了后端 OpenCV 方案。性能依然差
3 、GPUImage 方案 ( https://github.com/BradLarson/GPUImage ),但暂时调研不深。只知道 GPUImage 是一套完善的滤镜处理方案,据说能利用 GPU 进行图片处理,从而降低 CPU 性能消耗。但目前已知只提供一个 GPUImageCropFilter 裁剪滤镜,没法进行压缩,最大程度保留图片范围。并且,GPUImage 貌似无法提供一个 pixelBuffer 输出接口。
综上。求教 iOS 相机开发大佬,有没有其他高效低耗的方案,满足我的低功耗获取两路不同分辨率视频流的需求。
提前跪谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.