laravel - 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 并发现了一些有用的事件。
技巧与答案中提到的相同。
从屏幕 <=> 音频 <=> 视频 <=> 屏幕更改呼叫。
- 使用取消发布本地流
- 创建新流以添加/删除视频或屏幕共享
- 等待旧的本地流被取消发布并初始化新的流并发布它。
以上3个步骤将触发AGORA事件
- client.unpublish 触发流移除事件
- 发布触发流添加事件。在此事件侦听器中,订阅新流。当您订阅新流时,将触发流订阅事件。
基于这些事件,您也可以更新 ui 和(本地、远程)流。
解决方案
处理这个问题的最好方法是使用两个 Agorastream
对象。
首先只创建音频stream
,然后使用client.publish
. 然后,当您想更改为视频通话时,\然后调用client.unpublish
音频stream
并创建第二个stream
启用视频选项并client.publish
使用视频通话stream
。
由于一个流未发布,然后新的流被发布到频道,因此只会有短暂的中断。
推荐阅读
- php - 是否有格式为“yyy-mm-dd hh-mm-ss”的 HTML 日期时间输入?
- python - 熊猫数据透视表
- node.js - 将标准输出用于 node.js / express 时出现 ERR_HTTP_HEADERS_SENT 错误
- python - Python .join 交互未按预期工作
- r - 检查多个 NA 列并在 R 中返回另一列
- r - 将函数应用于多个文件并处理生成的数据帧
- python - 从表中获取所有关系的列表 Flask SQLalchemy
- c# - 使用取消令牌为用户定义的函数设置超时
- java - 无法向本地服务器发出请求
- azure - Azure B2C 自定义策略 + OpenID 连接 c# 库