如何在不同的轨道上同时进行屏幕共享和相机视频?

How can I screen share and camera video same time in different tracks?

提问人:Breno Mattos 提问时间:2/6/2023 更新时间:2/7/2023 访问量:512

问:

我正在为一个已经使用 webRTC 的 Web 应用测试 Agora 功能。目前,它使用一个单独的音频轨道和两个视频轨道:一个用于相机,另一个用于屏幕共享。

当我尝试共享屏幕时,如果不取消发布相机轨道,我无法发布它,就像 4.x sdk 版本的文档所说: https://docs.agora.io/en/video-calling/develop/product-workflow?platform=web

Agora.io 屏幕共享序列图

我该如何解决这个问题?对我来说,这似乎是视频聊天中的一个典型案例,其中一个用户共享他的屏幕并不断显示他的音频和视频以呈现一些东西。

我的代码:

  async startScreenShare(id?: string): Promise<void> {
    let stream: MediaStream;
    if (!id) {
      stream = await (navigator.mediaDevices as any).getDisplayMedia({
        audio: false,
        video: true,
      });
    } else {
      const constraint = {
        audio: false,
        video: {
          mandatory: {
            chromeMediaSource: 'screen',
            chromeMediaSourceId: id,
          },
        },
      };

      stream = await navigator.mediaDevices.getUserMedia(constraint as any);
    }

    const videoTrack = stream.getTracks()[0];

    this.rtc.screenVideoTrack = AgoraRTC.createCustomVideoTrack({
      mediaStreamTrack: videoTrack,
    });

    this.rtc.client.unpublish(this.rtc.localVideoTrack);

    await this.rtc.client.publish(this.rtc.screenVideoTrack);

  }

它正在工作,但丢失了相机轨道。

JavaScript agora.io 视频聊天 屏幕共享

评论


答:

0赞 openkmj 2/7/2023 #1

一个对象只能发布一个视频轨道AgoraRTCClient

新建以发布其他曲目。AgoraRTCClient

详见 Agora 文档的“同时开启屏幕共享和视频共享”章节。

评论

0赞 Breno Mattos 2/7/2023
谢谢。它只适用于旧版本吗?因为该页面在 4.x 版本中不存在,仅在 3.x 上。
0赞 openkmj 2/8/2023
它仍在 4.x 中工作。我认为这个概念(一个客户 - 一个视频)不会改变。