当前位置: 首页 > 后端技术 > Java

Android端实现多人视频语音聊天|音视频开发

时间:2023-04-01 23:28:15 Java

1多人视频通话功能本文介绍如何使用实时音视频SDKZEGOExpressSDK构建多人视频通话功能-人视频通话场景,即实现多对多实时音视频交互。用户可以与房间内的其他用户进行实时视频通话,互相推拉。该场景可用于多人实时视频聊天、视频会议等。2多人语音通话前提条件应用多人视频语音通话前,请确保:ZEGOExpressSDK已经集成在项目实现基本的实时音视频功能。详见快速入门-集成和快速入门-实现视频通话。项目已在ZEGO控制台创建,并申请了有效的AppID和AppSign。详情请参见控制台-项目管理中的“项目信息”。3Android端多人语音通话示例源码下载请参考下载示例源码获取源码。相关源码请参考“/ZegoExpressExample/Scenes/src/main/java/im/zego/Scenes/VideoForMultipleUsers”目录下的文件。4使用ZEGOExpressSDK进行多人语音通话的步骤本节将介绍如何使用ZEGOExpressSDK实现多人视频通话。AppID和AppSign传入参数“appID”和“appSign”创建引擎单例对象。如果需要注册回调代理,可以将一个实现了IZegoEventHandler的对象传入参数“eventHandler”。如果不需要注册回调代理,可以将“null”传入参数“eventHandler”。如果创建引擎后还需要注册回调,可以通过调用setEventHandler接口设置回调代理。/**定义SDK引擎对象*/ZegoExpressEngine引擎;ZegoEngineProfileprofile=newZegoEngineProfile();/**请通过官网注册,格式为123456789L*/profile.appID=appID;/**64个字符,请通过官网注册获取,格式为“0123456789012345678901234567890123456789012345678901234567890123”*/profile.appSign=appSign;/**通用场景访问*/profile.scenario=ZegoScenario.GENERAL;/**设置app/profileapplication.getapp对象*;/**创建引擎*/engine=ZegoExpressEngine.createEngine(profile,null);4.2多人视频通话功能实现房间内用户变更通知开发者需要将ZegoRoomConfig中的“isUserStatusNotify”设置为每个用户登录房间时“isUserStatusNotify”为“true”,以接收其他用户进出房间时的回调通知。ZegoRoomConfigRoomConfig=newZegoRoomConfig();RoomConfig.isUserStatusNotify=true;//登录房间engine.loginRoom(roomID,user,RoomConfig);4.3多人视频通话预览自己的画面并推送到远端用户调用loginRoom后,可以调用startPublishingStream接口,传入"streamID"将自己的音视频流推送到ZEGO音视频云。可以通过回调setEventHandler监听onPublisherStateUpdate回调,了解推流是否成功。如果想看到自己的画面,可以调用startPreview接口设置预览视图,启动本地预览。“streamID”是你本地生成的,但是你需要保证“streamID”在同一个AppID下是全局唯一的。如果不同的用户在同一个AppID下推送同一个“streamID”的流,会导致后面推流的用户推流失败。//预览推流engine.startPreview(newZegoCanvas(preview));//preview是一个View对象,开发者可以根据业务自定义,一般使用的是TextureView对象engine.startPublishingStream("YOUR_STREAM_ID");//用户端的StreamID4.4多人视频通话拉取音视频流4.4.1多人视频聊天拉取其他用户的音视频进行视频通话,我们需要拉取其他用户的音视频。onRoomStreamUpdate:当同房间的其他用户向ZEGO音视频云推送音视频流时,我们会在该回调中收到新的音视频流通知。在这个回调中,我们可以调用startPlayingStream,传入“streamID”来拉取并播放用户的音视频。可以通过监听onPlayerStateUpdate回调了解音视频是否拉取成功。4.4.2多人语音聊天显示用户进出房间信息。onRoomUserUpdate回调可用于监控房间内的用户变化。当房间内的其他用户进入或退出时会触发此回调。onRoomUserUpdate回调在房间人数大于500时不保证有效,如果在业务场景下房间人数大于500,不应该依赖这个回调来设计业务逻辑。如果房间人数大于500时需要使用该回调,请联系ZEGO技术支持。4.4的代码示例如下:engine.setEventHandler(newIZegoEventHandler(){@OverridepublicvoidonRoomUserUpdate(StringroomID,ZegoUpdateTypeupdateType,ArrayListuserList){super.onRoomUserUpdate(roomID,updateType,userList);//roomuserchange回调,本例以toast为例,实际业务流程需要开发者自行设计userListProcessfor(ZegoUseruser:userList){//Toast显示Toast.makeText(myActivity,user.userID+"JoinRoom",Toast.LENGTH_SHORT).show();//myActivity是一个内容对象,如果在activity中这个Activity可以作为参数}}else{//当"updateType"为"ZegoUpdateTypeDelete"时,用户可以拉取userList中的用户进行处理for(ZegoUseruser:userList){//执行Toast显示Toast.makeText(myActivity,user.userID+"Jointheroom",Toast.LENGTH_SHORT).show();//myActivity是一个内容对象,如果可以在activity中作为参数使用}}}@OverridepublicvoidonRoomStateUpdate(StringroomID,ZegoRoomStatestate,interrorCode,JSONObjectextendedData){//房间状态回调super.onRoomStateUpdate(roomID,state,errorCode,extendedData);if(state==ZegoRoomState.CONNECTED){//可根据实际业务设计}}@OverridepublicvoidonRoomStreamUpdate(StringroomID,ZegoUpdateTypeupdateType,ArrayListstreamList,JSONObjectextendedData){//流变化回调super.onRoomStreamUpdate(roomID,updateType,streamList,extendedData);//在这里更新UI或执行其他操作if(updateType==ZegoUpdateType.ADD){//当"updateTypepe"为"ZegoUpdateTypeADD",用户可以拉取streamList中的音视频流来显示房间内其他用户的图片和声音for(ZegoStreamstream:streamList){//拉取流,preview是一个View对象,开发者可以根据业务自定义,常用TextureView对象;在展示多人视频时,开发者需要使用不同的View来承载不同音视频流的画面,保证不同用户的视频会不重叠;此处示例代码将覆盖当前正在拉流的屏幕可以停止拉取对应的音频视频流for(ZegoStreamstream:streamList){//停止推流engine.stopPlayingStream(stream.streamID);}}}});多人语音聊天API调用时序图SDK参考5获取Java多人语音聊天SDK更新更多帮助,获取本文Java多人语音聊天SDK的开发文档和技术支持,访问极狗文档中心,可以实现视频会议中的多人视频和语音聊天功能,直播场景;近期有开发计划的开发者可到机购官网查看公司7周年之际所有音视频产品10%优惠,联系商家获取产品优惠;