You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OpenVidu集成Wikitude AR的摄像头冲突及帧获取方案咨询

解决方案

核心逻辑

全程仅让Wikitude独占系统摄像头,OpenVidu侧完全依赖Wikitude输出的帧作为视频源,从根源避免两个模块争抢摄像头的冲突。

具体实现步骤

  • 固定初始化顺序:先启动Wikitude AR会话,完成摄像头授权和初始化后,再初始化OpenVidu本地视频流。OpenVidu必须使用你实现的CustomVideoCapturer作为视频采集器,不要调用系统摄像头采集接口。
  • 注册Wikitude帧回调,转发画面到OpenVidu:
    Wikitude SDK原生提供摄像头帧监听接口,可直接获取原始摄像头帧,示例代码如下:
    // 适用于Wikitude SDK 9.x及以上、使用Camera2 API的场景
    wikitudeSDK.getCameraManager().setCameraFrameListener(cameraFrame -> {
        // 将Wikitude原始帧转为Bitmap
        Bitmap rawFrame = cameraFrame.toBitmap();
        // 转发到OpenVidu自定义采集器
        sendFrame(rawFrame);
    });
    
    若使用旧版本Wikitude SDK,替换为CameraFrameListener接口即可,逻辑完全一致。
  • 若需要传输叠加了AR特效的画面,不要使用原始摄像头帧回调,改为对Wikitude渲染View定时截屏即可:
    // 对AR渲染View取带特效的帧
    arView.setDrawingCacheEnabled(true);
    Bitmap arEffectFrame = Bitmap.createBitmap(arView.getDrawingCache());
    arView.setDrawingCacheEnabled(false);
    sendFrame(arEffectFrame);
    

性能优化建议

  • 复用Bitmap对象:根据Wikitude摄像头配置的固定分辨率创建Bitmap池,重复利用Bitmap实例,减少GC卡顿。
  • 调整采集器触发逻辑:你当前CustomVideoCapturer使用的10ms间隔轮询读帧逻辑,可改为收到Wikitude新帧时主动触发tick(),减少无效轮询的性能消耗。
  • 对齐参数:确保Wikitude摄像头的分辨率、帧率和OpenVidu视频流的配置参数完全一致,避免转码过程中出现画面变形、帧率不匹配的问题。
  • 线程安全:Wikitude的帧回调运行在独立子线程,你当前使用AtomicReference存储Bitmap的实现已经符合线程安全要求,无需额外调整。

内容的提问来源于stack exchange,提问作者vnapastiuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:06:02