微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的 React Custom Jitsi UI 不呈现多个视频和音频轨道与这个 Vue js 示例不同?

如何解决为什么我的 React Custom Jitsi UI 不呈现多个视频和音频轨道与这个 Vue js 示例不同?

我在尝试创建自定义 Jitsi UI 时遇到问题。当我在我的 React 应用程序中加载我的会议时,我只收到一个视频和一个音频轨道(总共两个轨道)。当我尝试加入同一个会议时,我仍然只收到一个视频。我尝试按照本指南了解如何在 Vue 中构建自定义 Jitsi UI,并尝试将其转换为 React。该指南将视频和音频轨道添加到视频和音频 HTML5 元素列表中。但是,当使用同一个 Jitsi 会议时,指南作者的实现有效,而我的无法加载多个轨道。由于 Vue 实现有效(并且除了将轨道添加到视频/音频元素之外,React 代码具有相同的所有内容),我得出结论,问题一定是我的 React 实现。下面是作者如何渲染多条轨道(在 Vue 中):

<template>
  <div id="app">
    <h1>Performance</h1>
    <button @click="connect">Connect</button>
    <video
      v-for="track in videoTracks"
      :key="`track-${track.getId()}`"
      :ref="track.getId()"
      autoplay
    />
    <audio
      v-for="track in audioTracks"
      :key="`track-${track.getId()}`"
      :ref="track.getId()"
      autoplay
    />
  </div>
</template>

以下是作者用于向视频元素添加轨道的逻辑:

addTrack(track) {
      if (track.getType() === "video") {
        this.videoTracks.push(track);
      } else if (track.getType() === "audio") {
        this.audioTracks.push(track);
      }
      this.$nextTick().then(() => {
        track.attach(this.$refs[track.getId()][0]);
      });
    },

这是我在 React 中实现相同逻辑的尝试:

const videoRefs = React.useRef([]);
const addTrack = (track) => {
    console.log(`addTrack's track: ${track}`);
    if (track.getType() === 'video') {
      setVideoTracks(videoTracks.concat(track));
      videoRefs.current[videoRefs.current.length - 1].current.srcObject =
        track.stream;
    } else if (track.getType() === 'audio') {
      setAudioTracks(audioTracks.concat(track));
    }
};
if (videoRefs.current.length !== videoTracks.length) {
    videoRefs.current = Array(videoTracks.length)
      .fill()
      .map((_,i) => videoRefs.current[i] || createRef());
}

这是我尝试渲染多个轨道的方式:

{videoTracks.map((track,i) => (
            <video
              key={track.getId()}
              ref={videoRefs.current[i]}
              autoplay
              muted
            ></video>
))}

任何帮助将不胜感激,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。