网站首页 > 技术教程 正文
1 多人视频通话功能
本文展示了如何使用 即构实时音视频SDK ZEGO Express SDK 构造多人视频通话场景,即实现多对多实时音视频互动。用户可在房间内与其余用户进行实时视频通话,互相推拉流。该场景可用于多人实时视频聊天、视频会议等。
2 多人语音通话的前提条件
在应用多人视频语音通话场景之前,请确保:
- 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成?? 和? ?快速开始 - 实现视频通话??。
- 已在? ?ZEGO 控制台?? 创建项目,并申请有效的 AppID 和 AppSign,详情请参考? ?控制台 - 项目管理?? 中的“项目信息”。
3 安卓端多人语音通话的示例源码下载
请参考 ? ?下载示例源码?? 获取源码。
相关源码请查看 “/ZegoExpressExample/Scenes/src/main/java/im/zego/Scenes/VideoForMultipleUsers” 目录下的文件。
4 即构多人语音通话SDK的使用步骤
本节将介绍如何使用 ZEGO Express SDK 实现多人视频通话,流程图如下:
4.1 多人语音聊天SDK创建引擎
定义 SDK 引擎对象,调用 ??createEngine?? 接口,将申请到的 AppID 和 AppSign 传入参数 “appID” 和 “appSign”,创建引擎单例对象。
如果需要注册回调代理,可将实现了 ??IZegoEventHandler?? 的对象传入参数 “eventHandler”。如果不需要注册回调代理,可将 “null” 传入参数 “eventHandler”,创建引擎后仍需要注册回调时可通过调用 ??setEventHandler?? 接口设置回调代理。
4.2 多人视频通话功能开启房间内用户变化通知
开发者需在每位用户登录房间时将 ??ZegoRoomConfig?? 中的 “isUserStatusNotify” 设为 “true”,用于接收其他用户进出房间的回调通知。
4.3 多人视频通话预览自己的画面,并推送到远端
在用户调用 ??loginRoom?? 之后,可以调用 ??startPublishingStream?? 接口,传入 “streamID”,将自己的音视频流推送到 ZEGO 音视频云。您可通过回调 ??setEventHandler?? 监听 ??onPublisherStateUpdate?? 回调知晓推流是否成功。
如果希望看到自己的画面,可调用 ??startPreview?? 接口设置预览视图,并启动本地预览。
“streamID” 由您本地生成,但是需要保证:同一个 AppID 下,“streamID” 全局唯一。如果同一个 AppID 下,不同用户各推了一条 “streamID” 相同的流,会导致后推流的用户推流失败。
4.4 多人视频通话拉取音视频流
4.4.1 多人视频聊天拉取其他用户的音视频
进行视频通话时,我们需要拉取到其他用户的音视频。
??onRoomStreamUpdate?? :在同一房间内的其他用户将音视频流推送到 ZEGO 音视频云时,我们会在此回调中收到音视频流新增的通知。
我们可以在该回调中,调用 ??startPlayingStream??,传入 “streamID” 拉取播放该用户的音视频。您可通过监听 ??onPlayerStateUpdate?? 回调知晓是否成功拉取音视频。
4.4.2 多人语音聊天展示用户进出房间的信息
??onRoomUserUpdate?? 回调可以用于监听房间内的用户变化,房间内其他用户进入或退出都会触发该回调。
房间人数大于 500 人的情况下 ??onRoomUserUpdate?? 回调不保证有效。若业务场景存在房间人数大于 500 的情况,不应依赖于该回调设计业务逻辑。若有在房间人数大于 500 时使用该回调的需求,请联系 ZEGO 技术支持。
4.4 的代码示例如下:
engine.setEventHandler(new IZegoEventHandler() {
@Override
public void onRoomUserUpdate(String roomID, ZegoUpdateType updateType, ArrayList<ZegoUser> userList) {
super.onRoomUserUpdate(roomID, updateType, userList);
//房间用户变化回调,本示例是以toast为展示示例,实际业务流程需开发者按需设计
if(updateType == ZegoUpdateType.ADD){
// 当 “updateType” 为 “ZegoUpdateTypeADD” 时,用户可以拉取 userList 里的用户进行处理
for(ZegoUser user : userList){
//进行Toast展示
Toast.makeText(myActivity,user.userID+"加入房间",Toast.LENGTH_SHORT).show();//myActivity为一个content对象,若在activity中可使用该Activity为参数
}
}else{
// 当 “updateType” 为 “ZegoUpdateTypeDelete” 时,用户可以拉取 userList 里的用户进行处理
for(ZegoUser user : userList){
//进行Toast展示
Toast.makeText(myActivity,user.userID+"加入房间",Toast.LENGTH_SHORT).show();//myActivity为一个content对象,若在activity中可使用该Activity为参数
}
}
}
@Override
public void onRoomStateUpdate(String roomID, ZegoRoomState state, int errorCode, JSONObject extendedData) {
//房间状态回调
super.onRoomStateUpdate(roomID, state, errorCode, extendedData);
if(state == ZegoRoomState.CONNECTED){
//可以根据实际业务进行设计
}
}
@Override
public void onRoomStreamUpdate(String roomID, ZegoUpdateType
updateType, ArrayList< ZegoStream > streamList, JSONObject extendedData) {
// 流变化回调
super.onRoomStreamUpdate(roomID, updateType, streamList, extendedData);
// 在这里更新 UI 或执行其他操作
if(updateType == ZegoUpdateType.ADD){
// 当 “updateType” 为 “ZegoUpdateTypeADD” 时,用户可以拉取 streamList 里各条音视频流以展示房间内其他用户的画面和声音
for(ZegoStream stream : streamList){
//进行拉流,preview 为一个View 对象,开发者可以根据业务自定义,一般常用的是TextureView对象;在展示多人视频的时候,开发者需要使用不同的 View 承载不同音视频流的画面,保证不同用户的视频不会重叠在一起;此处的示例代码会覆盖当前正在拉流的画面
engine.startPlayingStream( stream.streamID,new ZegoCanvas(preview));
}
}else{
// 当 “updateType” 为 “ZegoUpdateTypeDELETE” 时,用户可以停止拉取相应的音视频流
for(ZegoStream stream : streamList){
//停止拉流
engine.stopPlayingStream( stream.streamID);
}
}
}
});
多人语音聊天SDK的 API 调用时序图参考
猜你喜欢
- 2024-09-29 声网发布 Linux Server SDK 支持大模型 Python 与 Go 语言
- 2024-09-29 GPT-4o实时语音方案Livekit开源voice agent:轻松处理音视频流
- 2024-09-29 如何使用Video SDK构建React视频通话应用
- 2024-09-29 WebRTC 系列之音频会话管理 webrtc语音通话
- 2024-09-29 如何利用音视频通话SDK轻松实现软件视频通话功能?
- 2024-09-29 FM语音电台直播开发用哪个第三方语音sdk好
- 2024-09-29 语音视频SDK如何实现超低延迟优化?
- 2024-09-29 实时音视频SDK是什么?实时音视频SDK功能介绍
- 2024-09-29 语音sdk是什么意思?即构语音SDK有哪些优势
你 发表评论:
欢迎- 05-1613步震撼淘宝大促闪光裂纹破墙立体字PS制作教程
- 05-16AI教程 | 绘制扁平的萌萌哒图标
- 05-160基础学平面设计所需了解的基础常识汇总
- 05-16自学平面设计需要多长时间?十六年职业设计总监告诉你
- 05-16平面设计都要学习哪些内容?
- 05-16李涛PS教程 高手之路PS教程 合成教程 —制作一个小星球
- 05-16Illustrator实例教程:制作炫酷的漩涡效果
- 05-16Illustrator实例教程:利用混合工具制作一朵炫酷的花
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)