gpt4 book ai didi

javascript - 有没有办法在应用程序中切换前后摄像头

转载 作者:搜寻专家 更新时间:2023-11-01 04:34:27 29 4
gpt4 key购买 nike

我正在尝试开发一种 web-ar 体验,允许用户在整个体验过程中在前后摄像头之间切换,同时在使用后置摄像头的同时利用 SLAM/6dof。理想情况下,我想使用 PlayCanvas,但无法让前置摄像头工作。我在 a-frame 中实现了一些轻微的成功,但很多东西都坏了。

我找不到任何关于启用前置摄像头和使用 XR.stop() 的 PlayCanvas 特定文档,然后是 XR.run({canvas: document.getElementById('camerafeed'), cameraConfig: {direction: XR .XrConfig.camera().FRONT}}) 没有任何效果。

在一个框架内,我正在执行类似的事件序列,但我看到了一些结果。前置摄像头被激活,但日志中有错误,3D 对象不渲染(当我们以前置摄像头模式启动时它们会渲染),再次尝试切换摄像头时显示“糟糕,出了点问题!”屏幕。

至于切换 SLAM/6dof,我不断收到一个错误,提示我在执行 XR.run 后无法更改 disableWorldTracking。即使我已经运行了 XR.stop 函数并监听了 stopxr 事件。

应该切换到前置摄像头的 A-frame 功能(只是重要的部分):

init: function() {
this.el.sceneEl.addEventListener('stopxr', event => {
console.log("AR has been stopped.");
const videoCanvas = document.querySelector('canvas.a-canvas');
XR.XrController.configure({disableWorldTracking: true});
XR.run({canvas: videoCanvas, cameraConfig: {direction: XR.XrConfig.camera().FRONT}});
});
},

switchToFace: function() {
this.el.sceneEl.emit('stopxr');
//XR.stop();
},

在场景运行时更改 disableWorldTracking 参数的正确方法是什么?场景运行时前后摄像头切换的正确方法是什么?

最佳答案

在与 8th wall 开发人员交谈后,他们确认他们只支持每页一个 XR session ,因此在 XR.stop 之后,无法再次调用 XR.run。然而,还有另一种在前后摄像头之间切换的方法,它适用于启用 SLAM 的情况。

  1. 监听 onCameraStatusChange 事件并获取对 streamvideo 元素的引用。
  2. 启动相机交换时,使用 XR.pause() 暂停第 8 面墙。
  3. 停止您从第一步抓取的中的所有轨道。
  4. 使用 navigator.mediaDevices.getUserMedia(constraints); 获取所需相机的流。
  5. 将新流分配给您在第 1 步中获取的 video 元素。
  6. 监听视频元素以触发 playing 事件,然后调用 XR.resume();

需要注意的一件事:SLAM 仅在您从后置摄像头开始时才有效。切换到前置摄像头后,后置 SLAM 将不再有效。

关于javascript - 有没有办法在应用程序中切换前后摄像头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57930664/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com