【问题标题】:Networked A-frame issue with dynamic-room and video动态房间和视频的联网 A 帧问题
【发布时间】:2021-11-17 05:54:31
【问题描述】:

我正在使用A-frame (https://aframe.io) 和联网的A-frame 组件 (https://www.npmjs.com/package/networked-aframe)

创建一个项目

(项目地址:https://glitch.com/edit/#!/networkedtest?path=public%2Fscene.html%3A44%3A0

我遇到了视频供稿问题。目前在我的项目中,视频提要工作得非常好,但是每当我在第 202 行的 scene.html 中切换这行代码时:

   <a-scene moving-sun vr-mode-ui="enabled: false;" physics networked-scene="
      room: audio;
      adapter: easyrtc;
      audio: true;
      video: true;
      debug: true;
      inspector=https://cdn.jsdelivr.net/gh/aframevr/aframe-inspector@master/dist/aframe-inspector.min.js">
      

使用此代码:

<a-scene moving-sun vr-mode-ui="enabled: false;" physics dynamic-room="
  room: audio;
  adapter: easyrtc;
  audio: true;
  video: true;
  debug: true;
  inspector=https://cdn.jsdelivr.net/gh/aframevr/aframe-inspector@master/dist/aframe-inspector.min.js">

如果我通过拉出两个选项卡来测试我的代码,视频源应该在的地方只有一个空白平面。我不知道为什么,但每当我交换部分行 networked-scene="" 使用dynamic-room="",视频源将停止工作,当您加入另一个选项卡时,您所看到的只是视频源应位于的白屏。

我不确定为什么会发生这种情况,因为我要更改的只是 networked-scenedynamic-room。我尝试通过修改一些代码来修复此错误,但仍然找不到此问题的答案。我感觉问题出在public/js/dynamic-room.component.js 的某个地方,但我可能弄错了。

如果您知道如何解决此问题,我们将不胜感激。

链接到我的项目:https://glitch.com/edit/#!/networkedtest?path=public%2Fscene.html%3A44%3A0

【问题讨论】:

    标签: javascript networking three.js aframe aframe-networked


    【解决方案1】:

    这是对this question的跟进。

    您的dynamic-room 仅设置房间ID,并发出connect,因此networked-scene 尝试连接到服务器:

    // public/js/dynamic-room.component.js
    
    // Setup networked-scene
    var networkedComp = {
      room: params.room
    };
    // set the room
    el.setAttribute("networked-scene", networkedComp);    
    // emit connect
    el.emit("connect", null, false);
    

    在这种情况下,它不能替代networked-scene,它们一起工作。如果在场景之前禁用自动连接:

    <script>
    AFRAME.components["networked-scene"].schema.connectOnLoad.default = false;
    </script>
    <a-scene dynamic-room networked-scene>
    

    视频按预期显示 (glitch here)


    如果您想让dynamic-room 完成networked-scene 中的所有设置,那么Michaels 的回答也是正确的。

    【讨论】:

    • 完美运行,非常感谢!
    • 顺便检查一下控制台警告/错误,有很多东西需要清理,迟早会导致严重的错误
    • 好的,谢谢你的提示!
    【解决方案2】:

    你在正确的轨道上。

    我假设您想使用动态房间从 URL 加载自定义房间名称。 (仅此而已。如果这不是您想要的,那么动态房间就不是您想要的。)

    动态房间示例读取 URL,然后为您创建“networked-scene”组件并将其附加到您的标签。

    这是一个老例子,写在视频支持之前,所以它不检查video: true

    var isMultiuser = params.hasOwnProperty('room');
    var webrtc = params.hasOwnProperty('webrtc');
    var adapter = webrtc ? 'easyrtc' : 'wseasyrtc';
    var voice = params.hasOwnProperty('voice');
    
    var networkedComp = {
        room: params.room,
        adapter: adapter,
        audio: voice //<--Only setting the audio property here
    };
    console.info('Init networked-aframe with settings:', networkedComp);
    el.setAttribute('networked-scene', networkedComp);
    

    我建议将您的参数复制到dynamic-room.component.js(第 18 行)。

    只有房间名称会从 URL 加载。 (如果未指定,将默认为“音频”,就像您的网络场景参数一样。)

    var roomNameFromURL = params.hasOwnProperty('room');
    //We won't check for these:
    //var webrtc = params.hasOwnProperty('webrtc');
    //var adapter = webrtc ? 'easyrtc' : 'wseasyrtc';
    //var voice = params.hasOwnProperty('voice');
    
    var networkedComp = {
        //if there is no name in the URL, default to 'audio',
        //  like your networked-scene
        room: roomNameFromURL ? params.room : 'audio',
        adapter: 'easyrtc',
        audio: true,
        video: true,
        debug: true
    };
    console.info('Init networked-aframe with settings:', networkedComp);
    el.setAttribute('networked-scene', networkedComp);
    

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2021-11-07
      • 2020-07-05
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 2020-02-19
      相关资源
      最近更新 更多