# 实现多方通话
本章将介绍如何实现多方语音通话,多方语音通话的 API 调用时序见下图:
# 加入频道
调用 publishLocalAudioStream (opens new window) 开启音频流。若要开启视频,调用 publishLocalVideoStream (opens new window) 开启视频流。
// 1. 开启音频流 this.JRTCEngine.publishLocalAudioStream(true); // 2. 开启视频流(语音无需调用此方法) this.JRTCEngine.publishLocalVideoStream(true);
调用 joinChannel (opens new window),创建并加入频道。需要传入
channelId
和 channelConfig (opens new window)。channelId
:媒体频道标识。channelConfig
:加入参数,没有则不填。
this.JRTCEngine.joinChannel(channelId:string, channelConfig?:object)
加入频道后自身会收到 JRTCEventType.CHANNEL_JOIN (opens new window) 回调事件。其他成员会收到 JRTCEventType.PARTICIPANT_JOIN (opens new window) 回调事件。
# 创建本地视频画面
加入频道后,调用 publishLocalVideoStream 如果返回 true,则将自己的 uid 传入到渲染本地视频流的Juphoon-RTC-JCVideoCanvas (opens new window) 组件的 uid 位置。
uid: String 类型
renderType: int 类型 渲染方式
- RENDER_FULL_SCREEN = 0;铺满窗口
- RENDER_FULL_CONTENT = 1;全图像显示,会有黑边
- RENDER_FULL_AUTO = 2;自适应
pictureSize: String 类型– 视频请求级别
- PICTURESIZE_NONE : 不渲染
- PICTURESIZE_MIN : 最小尺寸
- PICTURESIZE_SMALL : 小尺寸
- PICTURESIZE_LARGE : 大尺寸
- PICTURESIZE_MAX : 最大尺寸
<Juphoon-RTC-JCVideoCanvas
ref="JCVideoCanvas"
uid="selfUid"
renderType="renderType"
></Juphoon-RTC-JCVideoCanvas>
this.JRTCEngine.on(JRTCEventType.CHANNEL_JOIN,
(channelId,result ,reason)=>{
if(result){
// 加入频道成功
this.selfUid = uid //渲染本地视频画面
}else{
// 加入频道失败
}
},false);
# 创建远端视频画面
渲染远端画面的组件
<Juphoon-RTC-JCVideoCanvas
ref="JCVideoCanvas"
uid="remoteUid"
renderType="renderType"
></Juphoon-RTC-JCVideoCanvas>
视频通话中,通常需要看到其他用户。当其他成员加入频道后,当前设备会收到JRTCEventType.PARTICIPANT_JOIN (opens new window)回调事件,该事件会上报该成员的 uid。
this.JRTCEngine.on(JRTCEventType.PARTICIPANT_JOIN,
(
...
userId,//远端成员uid
video,//是否是视频
...
)=>{
if(video){
this.remoteUid = userId;
//渲染远端视频
}else{
// 加入频道失败
}
},false);
# 离开频道
调用 leaveChannel 方法可以离开当前频道。
this.JRTCEngine.leaveChannel();
离开频道后,自身收到 JRTCEventType.CHANNEL_LEAVE 回调,其他成员同时收到 JRTCEventType.PARTICIPANT_JOIN 回调。
# 销毁本地和远端视频画面
// 离开频道结果回调
this.JRTCEngine.on(JRTCEventType.CHANNEL_LEAVE,
(
channelId,//channelId
reason,//离开频道结果
)=>{
//销毁组件
},false);
# 解散频道
如果想解散频道,可以调用下面的stopChannel (opens new window)接口,此时所有成员都将被退出。
// 结束频道
this.JRTCEngine.stopChannel();
解散频道后,发起结束的成员收到JRTCEventType.CHANNEL_STOP (opens new window)回调,其他成员同时收到 JRTCEventType.CHANNEL_LEAVE (opens new window)回调。解散失败原因枚举值请参考MediaChannelReason (opens new window)。
// 离开频道结果回调
this.JRTCEngine.on(JRTCEventType.CHANNEL_STOP,
(
result ,//解散会议的结果
reason,//会议解散原因
)=>{
if(result){
//销毁组件
}
},false);