HarmonyOS鸿蒙Next中设备是没有 bulk 端点的摄像头,没有uvc协议,需要自己开发吗?鸿蒙后续会有适配吗?
HarmonyOS鸿蒙Next中设备是没有 bulk 端点的摄像头,没有uvc协议,需要自己开发吗?鸿蒙后续会有适配吗? 【问题描述】:设备是没有 bulk 端点的摄像头,没有uvc协议,需要自己开发吗?鸿蒙后续会有适配吗?
【问题现象】:UVC PROBE和UVC COMMIT,需实现 UVC 1.5 规范的控制命令,用 usbControlTransfer 发送,因为我们现在的设备是没有 bulk 端点的摄像头,所以问问是否需要自己开发,或者有什么三方库可以直接使用的,再或者是鸿蒙后续会有适配吗?
更多关于HarmonyOS鸿蒙Next中设备是没有 bulk 端点的摄像头,没有uvc协议,需要自己开发吗?鸿蒙后续会有适配吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好的,谢谢老师
辛苦您参考以上解决方案,若还有其他疑问,也欢迎您继续提问,感谢您的理解与支持
截至目前, bulk 端点暂未有搭配 UVC 协议摄像头的适配相关指引。若您使用的摄像头无法兼容标准 UVC 协议,一般需要自主完成驱动开发或是封装专属适配中间层,建议:
- 先核验这款摄像头是否兼容其余通用传输协议;
- 持续留意 HarmonyOS 版本迭代公告,跟进官方外设兼容能力的更新规划。
尊敬的开发者,您好,关于您反馈的问题:
当前对于没有UVC协议、且没有bulk端点的摄像头,需要自行开发底层驱动和数据通路,目前系统暂未提供现成的通用适配方案。
因此建议您评估自行适配开发的成本,或者考虑更换为能够支持UVC协议的摄像头硬件。
我们公司这里,有两个销量挺高的设备,是需要这个功能的。现在遇上鸿蒙手机的用户,都只能建议他们换其他代替品。
所以,还是很需要帮忙推进一下通用的适配方案,谢谢。
您好,需要提供设备吗?这边可以发两个设备过去的,领导催的急
尊敬的开发者,您好:
14400008 是没有设备(连接已断开)报错;14400012错误是传输报错,可能是接口漏调导致,在对应接口claimInterface之后加上setInterface接口调用,可以解决,但是没有视频出现、没有数据返回的问题,需要考虑到摄像头设备的差异; 涉及到uvc协议实现的部分,要抓包比对其它平台和HarmonyOS平台的包,看是否有漏什么请求,可以参考一下libuvc三方库
开发者您好,通过查阅官方文档,暂时没有找到bulk端点和UVC协议的摄像头适配说明,对于不支持标准UVC协议的摄像头,通常需要自行开发驱动或适配层,建议:
- 确认摄像头是否有其他标准协议支持;
- 参考官方文档中关于相机开发和USB设备的相关说明;
- 关注鸿蒙版本更新,了解后续的设备支持计划。
如果设备不是标准 UVC 摄像头,系统就不能把它当普通 USB Camera 自动接入 Camera Kit;这时应用侧只能按 USB 外设协议自己通信,不能直接复用系统相机链路。
可以先确认三件事:
- 通过 usbManager.getDevices 读取 interface、endpoint,确认它到底有没有视频流端点,是 bulk、isochronous 还是厂商自定义端点。
- UVC PROBE/COMMIT 属于 UVC 类请求,如果设备本身不完整支持 UVC 规范,只靠发送这两类控制请求不一定能得到标准视频流。
- 如果是厂商私有协议,需要设备厂商提供协议文档或 SDK,你们用 usbControlTransfer/批量或实时传输接口自己收帧,再解码成 PixelMap/Native 图像显示。
- 如果希望系统级被 Camera Kit 识别,通常要求设备符合标准 UVC;非标准设备是否适配属于系统/驱动能力范围,三方应用很难自行补成系统摄像头。
所以短期工程路线是“按 USB 自定义设备接入”,长期才是推动硬件侧改成标准 UVC 或走官方外设适配渠道。
这个场景要先区分一下,没有 UVC 协议的摄像头,鸿蒙系统本身是没法直接按普通 USB 摄像头方式使用的。
正常 UVC 摄像头链路是:
USB Camera
→ UVC Driver
→ Camera Framework
→ 应用
系统已经帮你处理了:
- UVC Probe
- UVC Commit
- 格式协商
- 帧获取
- 控制请求
所以应用层直接调用 Camera Kit 就可以。
你现在的设备:
没有 UVC 协议
没有标准 bulk endpoint
相当于:
USB设备
→ 需要自己解析协议
→ 自己发 usbControlTransfer
→ 自己拿数据
→ 自己解码
这个已经不是普通 Camera 场景了。
需要自己实现:
- USB枚举
- 设备描述符解析
- UVC 1.5控制流程(如果设备部分兼容)
- Probe / Commit
- 数据传输协议
- 视频帧组包
- YUV/RGB转换
鸿蒙有没有现成库?
目前这种非标准摄像头,一般没有通用三方库可以直接接。
因为每家设备协议可能不同。
比较常见方案:
方案1:
让硬件支持 UVC
这是成本最低的方案。
设备改成标准 UVC 后:
鸿蒙 Camera Kit 基本可以直接接。
方案2:
自己做 Native 层驱动/协议适配
例如:
ArkTS
→ Native(C/C++)
→ USB接口
→ 设备协议
→ 输出视频帧
然后给 ArkUI 显示。
方案3:
厂家提供 SDK
很多工业摄像头:
不是 UVC
但是会提供:
- Android SDK
- C SDK
- USB协议文档
直接移植会更快。
至于鸿蒙后续会不会适配,系统一般不会针对某个私有协议做适配。
后续更可能增强标准 USB Camera / UVC 支持。
所以你这个情况,大概率需要自己开发适配层,或者推动摄像头厂家提供 UVC 或鸿蒙 SDK。
希望可以帮到你~~~~
如果当前设备不是标准 UVC 设备(或者没有承载图像数据的 bulk/iso/interrupt 数据端点),系统通常不会直接把它当成普通摄像头预览,需要按设备实际协议自己做一层适配。
当前公开 USB Host API 可以做原始 USB 通信:先通过 usbManager.getDevices() 枚举设备,hasRight()/requestRight() 获取访问权,再 connectDevice()、claimInterface(),之后用 usbControlTransfer() 发送 UVC class-specific 或厂商自定义控制请求。你提到的 PROBE/COMMIT 可以按 UVC 1.5 的 bmRequestType、bRequest、wValue、wIndex、wLength 和 data 组装到 USBDeviceRequestParams 里发送。
需要注意两点:
-
control transfer 只适合控制面,不能替代视频帧的数据通道;真正取流要看设备描述符里是否有可用的数据端点。
-
如果是 bulk 端点可以用 bulkTransfer();如果是 API 18 及以上,还可以看 usbSubmitTransfer(),它的传输类型包含 bulk、interrupt、isochronous。没有可用数据端点时,单靠 EP0 控制传输一般拿不到连续视频帧。
所以建议先用 getRawDescriptor() 或设备枚举结果确认接口、alternate setting、endpoint type 和帧格式:标准 UVC 就按 UVC 流程实现/移植;非标准设备则需要厂商协议或固件侧配合。至于后续系统是否内置适配某类非 UVC 设备,这属于版本规划,建议以官方公告或版本说明为准。
鸿蒙Next中非UVC摄像头(无bulk端点)需基于HDF或USB子系统自行开发驱动。系统当前未公开此类非标准硬件的适配计划,但HDF框架支持自定义驱动开发。
对于没有 bulk 端点的非 UVC 协议摄像头,在 HarmonyOS Next 上需要自行开发 HDF(硬件驱动框架)驱动。因为系统 Camera 框架默认仅支持标准的 UVC 协议设备,你的设备属于私有协议设备,无法被原生 CameraService 识别。
这类设备通常只能通过自定义的 USB Control Transfer 来获取图像数据(如批量控制传输+同步端点),需要你在 HDF 驱动层实现完整的图像数据解析流程。目前 HarmonyOS Next 没有现成的三方库或系统级适配计划来支持这种非标摄像头,后续也不会针对个案适配 —— 非 UVC 且无 bulk 端点的设备天然属于厂商自定义实现范畴。
