HarmonyOS 鸿蒙Next中相机预览图像传输过慢

HarmonyOS 鸿蒙Next中相机预览图像传输过慢 通过ImageReceiver组件中imageArrival事件监听获取底层返回的图像数据,具体代码参考官方网页,4:注册监听处理预览流每帧图像数据。双路预览(ArkTS)-开发相机应用基础能力(ArkTS)-Camera Kit(相机服务)-媒体 - 华为HarmonyOS开发者

我遇到的问题是,预览画像分辨率在1280960,数据传输显示的帧数足够使预览画面不卡顿。图片分辨率上升最高32642448,getSupportedFrameRates显示帧数范围为2-15帧,但log实际显示大概每600ms接收到一帧,处理时间100ms应该不影响接收。

请问各位有应用高分辨率预览,是否遇到过接收每一帧图像时间过长,画面显示卡顿的问题?

receiver.on('imageArrival', () => {
    console.info(tag,`cameraPhoto preview arrival`,Date.now());

更多关于HarmonyOS 鸿蒙Next中相机预览图像传输过慢的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

开发者你好,这边本地测试未能复现开发者所说的600ms一帧的回图速度。 本地使用6.0.2 Beta1版本的DevEco Studio和pura80pro+设备分别设置分辨率为480480、10801080、2560*1440,显示回图速度均为30-40ms之间,并未因分辨率提升而出现明显的回图速度下降。方便的话可以提供下您使用的设备型号、设备版本信息和测试日志信息以便进一步分析吗?

更多关于HarmonyOS 鸿蒙Next中相机预览图像传输过慢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢您的复现,我的设备是华为matebook pro,外接USB摄像头,原先分辨率在3264*2448,若YUV格式数据,arraybuffer长度在800w左右,更换摄像头支持的mjpg格式,数据量减少之后预览已经流畅。但请问formatToPixelMapFormatMap = new Map<number, image.PixelMapFormat>([ [12, image.PixelMapFormat.RGBA_8888], [25, image.PixelMapFormat.NV21], [35, image.PixelMapFormat.YCBCR_P010], [36, image.PixelMapFormat.YCRCB_P010] ]);,我这里receiver.readNextImage得到的nextImage.format有30,38两种未知的,请问分别对应图片格式您知道吗,

开发者你好, GRAPHIC_PIXEL_FMT_YUYV_422_PKG = 30, /< YUYV422 packed format */ GRAPHIC_PIXEL_FMT_BLOB = 38, /< BLOB format */ BLOB可以认为没有格式,就是个文件或者一段数据,比如:JPEG文件/HEIF文件/业务专用数据 ImageReceiver拿到的是图形这边定义的格式,具体可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-buffer-common-h#oh_nativebuffer_format 更多数据对应关系可以在图形surface_type.h头文件定义中查询。

楼主用的什么设备?是不是设备不支持这个分辨率

设备支持的,我现在读取了预览图片MJPG格式的数据,接收预览数据的速度上来了。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

使用的是什么机型呢?平板还是手机?

设备是华为matebook pro,外接USB摄像头,自带的系统摄像头1920*1080很流畅,

性能跟不上了

 0 0   3264*2448  这个干甚的,这也太夸张了,你只是预览啊,搞那么高的分辨率干什么,你自己算下,每帧需要的内存不卡才怪铁定掉帧的

鸿蒙Next相机预览慢主要因图像处理流水线延迟。优化方向包括:使用Surface共享内存直接传输预览帧,减少内存拷贝;调整Camera2 API的CaptureRequest参数,如降低预览分辨率或启用硬件加速编码;检查HAL层图像信号处理(ISP)流水线配置,确保使用低延迟模式。可尝试关闭后处理效果或启用零拷贝渲染。

在HarmonyOS Next中,高分辨率预览(如3264*2448)下帧率显著下降是常见现象,主要受硬件带宽、图像处理流水线及内存拷贝开销限制。

您观察到的约600ms/帧(约1.7fps)远低于支持的2-15fps范围,这通常不是应用层处理耗时(您提到的100ms)导致的。核心瓶颈在于高分辨率图像从相机传感器到ImageReceiver的数据传输链路。

关键因素分析:

  1. 图像数据量剧增:分辨率从1280960升至32642448,单帧数据量增长约6.5倍(假设相同像素格式)。这直接加重了MIPI CSI等硬件接口的传输负载和内存带宽压力。
  2. ISP处理延迟:高分辨率下,图像信号处理器(ISP)需要更多时间完成降噪、色彩校正等处理,尤其在某些芯片平台或算法模式下。
  3. 内存拷贝开销ImageReceiver获取图像时,系统可能需要在内部缓冲区与应用提供的Image对象间进行内存拷贝。高分辨率下,拷贝大量数据(如YUV数据)耗时显著增加。

排查与优化建议:

  • 验证帧率配置:确保在CameraOutputCapability中为高分辨率预览流正确配置了支持的帧率范围,并在创建预览流时明确设置目标帧率(如15fps)。
  • 检查像素格式:确认使用的像素格式(如PixelFormat.YCBCR_420_SP)是否为该分辨率下效率最高的选项。某些格式可能因对齐或转换要求引入额外开销。
  • 评估处理逻辑:虽然您提到处理时间仅100ms,但需确保在imageArrival回调中未进行阻塞式或耗时操作(如同步保存、复杂分析)。建议将耗时操作移至异步任务或工作线程。
  • 考虑性能模式:部分设备支持高性能或低延迟模式,可在CameraManager初始化或参数配置时尝试启用。
  • 降低分辨率或采用缩放:若业务允许,可考虑使用稍低的分辨率进行预览,或通过ImageReceiversize属性接收缩放后的图像,同时保持拍照使用全分辨率。

高分辨率预览对系统资源要求较高,实际帧率受具体设备硬件能力制约。建议在目标真机上,通过系统级性能工具(如hdc shell下的相关命令)监控相机流水线各阶段的耗时,以准确定位瓶颈。

回到顶部