android - 使用 Camera 2 API 捕获图像而不使预览不连贯
问题描述
我正在尝试修改基本的 Camera2 API 示例(https://github.com/googlesamples/android-Camera2Basic),以便它每 x 秒拍一张照片(然后在后台线程上处理它;我什至没有需要将图像保存到磁盘),同时显示流畅的预览。不幸capture()
的是,调用捕获会话会冻结预览一两秒,导致用户体验不佳。
有没有办法直接进入预览表面并读取图像字节?我不在乎图像质量,流畅的用户体验是首要任务。
解决方案
如果相机设备是LEGACY级别的设备,不幸的是,这是意料之中的。
即使对于 LIMITED 设备,相机也必须支持BURST_CAPTURE功能,以保证以快速的速度进行全分辨率捕获。所有 FULL 级或更好的设备都支持 BURST_CAPTURE。
但是,即使在功能较低的设备上,您通常也可以流畅地以视频录制分辨率捕获未压缩的 YUV 帧。这意味着将具有 YUV_420_888 格式的ImageReader添加到您的会话配置中,然后处理由此产生的图像。不幸的是,LEGACY 设备上的 JPEG 总是很慢,并且一些 LEGACY 设备也没有足够的 CPU 能力来顺利生成 YUV 数据(因为必须在后台进行一些转换)。
有关更多详细信息,您可以检查StreamConfigurationMap的输出,并查看以 1/30 秒的最小帧持续时间运行的输出 YUV 分辨率;这些应该保证有限或更好的设备的平稳运行。
推荐阅读
- c++ - 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- nativescript - Nativescript RadListView 交错布局问题
- java - 删除数组的空值
- javascript - 如果标签包含数值,删除括号并添加类名
- php - 无法在 IIS 上连接到 mySql
- c++ - 字符字面差异?
- ffmpeg - FFMPEG Concat 过滤器 - 输出视频跳过第二个文件
- ffmpeg - 使用ffmpeg在视频中查找帧
- sql - Rails 5.2 ActiveRecord 查询返回数组而不是 ActiveRecord::AssociationRelation
- node.js - 多个验证错误 - AWS Rekognition