# 实现多方通话

本章将介绍如何实现多方语音通话,多方语音通话的 API 调用时序见下图:

../../../../_images/uniapp2rtos.png

# 加入频道

  1. 调用 publishLocalAudioStream (opens new window) 开启音频流。若要开启视频,调用 publishLocalVideoStream (opens new window) 开启视频流。

    // 1. 开启音频流
    this.JRTCEngine.publishLocalAudioStream(true);
    // 2. 开启视频流(语音无需调用此方法)
    this.JRTCEngine.publishLocalVideoStream(true);
    
  2. 调用 joinChannel (opens new window),创建并加入频道。需要传入 channelIdchannelConfig (opens new window)

    • channelId:媒体频道标识。

    • channelConfig:加入参数,没有则不填。

    this.JRTCEngine.joinChannel(channelId:string, channelConfig?:object)
    
  3. 加入频道后自身会收到 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);
最后更新时间: 2023/11/23 15:08:55