【问题标题】:Agora switch from audio to video call during voice callAgora 在语音通话中从音频通话切换到视频通话
【发布时间】:2021-01-15 01:22:10
【问题描述】:

我已经实现了用于调用的 Agora Web SDK,它在 Laravel 和 Vue.js 中运行良好。

我想知道在进行音频通话时是否有任何方法可以从音频通话切换到视频通话。

如果我使用 video = false 创建Stream,那么它只是音频通话,但我无法将其更改为使用 rtc.localStream.unmuteVideo() 切换到视频通话,因为它需要 video = true 才能使其工作

如果我使用 video = true 创建Stream,那么我使用rtc.localStream.muteVideo() 关闭相机。所以它会关闭相机,用户可以在需要时打开它。但摄像头灯仍然亮着。

// create local stream
                this.rtc.localStream = AgoraRTC.createStream({
                    streamID: this.rtc.params.uid,
                    audio: true,
                    video: true,
                    screen: false,
                    microphoneId: this.option.microphoneId,
                    cameraId: this.option.cameraId
                });

这意味着它仍然是视频通话,但视频轨道只是一个空白屏幕。

我正在寻找一种方法,可以在不中断的情况下删除唯一的音频通话流并添加音频-视频通话流。

我查看了 Agora 文档,但找不到任何相关信息。

我认为一旦创建了流,就无法将视频更改为真或假。

更新:

阅读 Hermes 的回答后。我做了一些 RnD,发现了一些有用的事件。

技巧与答案中提到的相同。

从屏幕 音频 视频 屏幕更改通话。

  1. 使用取消发布本地流
  2. 创建新流以添加/删除视频或屏幕共享
  3. 等待旧的本地流被取消发布,然后初始化新的流并发布它。

以上 3 步将触发 AGORA 事件

  1. client.unpublish 触发 stream-removed 事件
  2. 发布触发添加流事件。在此事件侦听器中,订阅新流。当您订阅新流时,将触发 stream-subscribed 事件。

根据这些事件,您也可以更新 ui 和(本地、远程)流。

【问题讨论】:

    标签: laravel vuejs2 agora.io


    【解决方案1】:

    处理这个问题的最好方法是使用两个 Agora stream 对象。

    首先只创建音频stream,然后使用client.publish 发布它。然后,当您想更改为视频通话时,\然后在音频stream 上调用client.unpublish,并在启用视频选项的情况下创建第二个stream,然后在视频stream 上调用client.publish

    只有一个短暂的中断,因为一个流未被发布,然后新的流被发布到频道。

    【讨论】:

    • 我想避免这种干扰。也许我可以创建两种不同的流(一种用于音频,另一种用于视频)。如果用户想开始视频通话,那么我只能开始第二个视频流。不确定它是否会更好。
    • 中断将不到一秒,您可以在切换发生时更新 UI,这样用户就不会注意到。拥有两个现有流的唯一问题是客户端一次只能将一个流发布到一个频道中,因此您仍然需要发布和取消发布,因此无法避免轻微的延迟。
    猜你喜欢
    • 2022-08-09
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多