首页 > 解决方案 > Agora 在语音通话中从音频通话切换到视频通话

问题描述

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

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

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

如果我使用 video = true createStream ,那么我使用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 文档,但我找不到任何关于它的信息。

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

更新:

阅读爱马仕的回答后。我做了一些 RnD 并发现了一些有用的事件。

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

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

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

以上3个步骤将触发AGORA事件

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

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

标签: laravelvuejs2agora.io

解决方案


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

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

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


推荐阅读