Agora 在语音通话中从音频切换到视频通话

Agora switch from audio to video call during voice call

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

我想知道有没有什么方法可以在语音通话的同时从音频切换到视频通话

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

如果我使用 video = true 创建流,那么我使用 rtc.localStream.muteVideo() 关闭相机。所以它会关闭相机,用户可以在 required 时打开它。但是相机灯还亮着。

// 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 文档,但找不到任何相关信息。

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

更新:

看完爱马仕的回答后。我做了一些 RnD,发现了一些有用的事件。

技巧与答案相同

从屏幕 <=> 音频 <=> 视频 <=> 屏幕更改呼叫。

  1. 取消发布本地流使用
  2. 为 add/remove 视频或屏幕共享创建新流
  3. 等待旧本地流取消发布并初始化新流并发布。

以上3步将触发AGORA事件

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

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

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

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

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