@rongcloud/plugin-call
    TypeScript icon, indicating that this package has built-in type declarations

    5.0.7 • Public • Published

    CallLib 5.0

    基于融云 IMLib 与 RTCLib 能力构建的音视频通话场景 SDK,基于该 SDK,开发者可快速实现音视频呼叫功能的开发。

    RFC

    初始化
    import { IMClient, init  } from '@rongcloud/imlib-v4'
    import { installer as rtcInstaller, RCRTCClient, RCTrack, IMicphoneAudioProfile, ICameraVideoProfile, } from "@rongcloud/plugin-rtc";
    import { installer as callInstaller, RCCallClient, RCCallSession, RCCallErrorCode, IEndSummary, ISender, RCCallLanguage, RCCallEndReason} from "@rongcloud/plugin-call";
    
    
    // im 客户端初始化
    const imClient: IMClient = init({ ... })
    
    // rtc 客户端初始化
    const rtcClient: RCRTCClient = imClient.install(rtcInstaller, { ...options })
    
    // calllib 客户端初始化
    const caller: RCCallClient = imClient.install(callInstaller, {
      // rtcClient 实例
      rtcClient,
      // 监听被叫
      onSession (session: RCCallSession) {
        // session
      },
      // 通话终止
      onSessionClose (session: RCCallSession, summaryInfo: IEndSummary) {
        // session
    
      },
    
    
      
    
      // 其他初参数
      ...options
    })
    注册用户数据

    通过发消息携带用户信息功能,将用户信息通知到对端。不注册的前提下,对端只能收到人员 id 数据

    // 注册用户数据,对端收到相应通知时可携带数据,多次注册时以最后一次注册为准
    caller.registerUserInfo({ name, profile, extra })
    主动呼叫
    • 单呼
          /**
           * 单呼,发送invite消息, 成工后返回session
           * @param params.targetId 被呼叫一方的用户 id 必填
           * @param params.mediaType 音频呼叫 or 音视频呼叫  必填
           * @param params.listener (session上的监听) 必填
           * @param params.constraints 获取音频或音视频资源时的参数 可选
           * @param params.channelId 组织 Id 可选
           */
          const { code, session } = await caller.call({
            targetId: this.targetId, 
            mediaType,
            listener: {
              /**
               * 当对方已响铃
               */
              onRinging: (sender: ISender, session: RCCallSession) => {},
              /**
               * 当对方已同意
               */
              onAccept: (sender: ISender, session: RCCallSession) => {},
              /**
               * 当对方已挂断
               */
              onHungup: (sender: ISender, reason: RCCallEndReason, session: RCCallSession) => {},
              /**
               * 群组通话,人员改变
               */
              onMemberModify: (sender: ISender, invitedUsers: IInvitedUsers[], session: RCCallSession) => {},
              /**
               * 通话降级
               */
              onMediaModify: (sender: ISender, mediaType: RCCallMediaType, session: RCCallSession) => {},
              /**
               * 当接到流
               */
              onTrackReady: (track: RCTrack, session?: RCCallSession) => {};
              /**
               * 关闭 或 开启 音频
               */
              onAudioMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {},
              /**
               * 关闭 或 开启 视频
               */
              onVideoMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {},
    
            }
      
          });
          if (code === RCCallErrorCode.SUCCESS) {
    
            ......
          }
    • 群呼
            /**
             * 发起群组呼叫
             * @param params.targetId 群组 Id 必填
             * @param params.userIds 被呼叫的群内成员 Id 必填
             * @param params.mediaType 音频呼叫 or 音视频呼叫 必填
             * @param params.listener (session上的监听) 必填
             * @param params.channelId 组织 Id 可选
             * @param params.constraints 获取音频或音视频资源时的参数 可选
             */
            const { code, session } = await caller.callInGroup({
            targetId: this.targetId,
            userIds,
            mediaType,
            listener: {
              /**
               * 当对方已响铃
               */
              onRinging: (sender: ISender, session: RCCallSession) => {},
              /**
               * 当对方已同意
               */
              onAccept: (sender: ISender, session: RCCallSession) => {},
              /**
               * 当对方已挂断
               */
              onHungup: (sender: ISender, reason: RCCallEndReason, session: RCCallSession) => {},
              /**
               * 群组通话,人员改变
               */
              onMemberModify: (sender: ISender, invitedUsers: IInvitedUsers[], session: RCCallSession) => {},
              /**
               * 通话降级
               */
              onMediaModify: (sender: ISender, mediaType: RCCallMediaType, session: RCCallSession) => {},
              /**
               * 当接到流
               */
              onTrackReady: (track: RCTrack, session?: RCCallSession) => {},
              /**
               * 关闭 或 开启 音频
               */
              onAudioMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {},
              /**
               * 关闭 或 开启 视频
               */
              onVideoMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {}
    
            }
    
          });
          if (code === RCCallErrorCode.SUCCESS) {
    
            
            
          }
    RCCallSession

    RCCallSession 是 CallLib 业务的单次呼叫所建立的会话场景的抽象,标识当前的通话

    // 当前通话的唯一性标识
    session.getSessionId()
    
    // targetId,群呼为群组 Id,单呼为对方人员 Id
    session.getTargetId()
    
    // 获取会话类型
    session.getConversationType()
    
    // 多组织功能相关
    session.getChannelId()
    
    // 房间人员列表,不包含本端信息
    session.getRemoteUsers()
    
    // 获取人员状态:等待 | 通话中 | 结束
    session.getUserState(userId)
    
    // 会话状态:呼入等待 | 呼出等待 | 通话中 | 通话已结束
    session.getState() 
    
    // 获取会话发起者 Id
    session.getCallerId(): Promise<string | undefined>
    
    
    // 注册会话事件监听
    session.registerSessionListener({
        /**
         * 当对方已响铃
         */
        onRinging: (sender: ISender, session: RCCallSession) => {},
        /**
         * 当对方已同意
         */
        onAccept: (sender: ISender, session: RCCallSession) => {},
        /**
         * 当对方已挂断
         */
        onHungup: (sender: ISender, reason: RCCallEndReason, session: RCCallSession) => {},
        /**
         * 群组通话,人员改变
         */
        onMemberModify: (sender: ISender, invitedUsers: IInvitedUsers[], session: RCCallSession) => {},
        /**
         * 通话降级
         */
        onMediaModify: (sender: ISender, mediaType: RCCallMediaType, session: RCCallSession) => {},
        
       /**
         * 本端资源或远端资源已获取,track为本地音频或音视频, track不可设置成Vue组件的响应式数据
         * track.isLocalTrack() 是否为本地资源
         * track.isAudioTrack() 是否为音频
         * track.isVideoTrack() 是否为视频
         * track.getUserId()    产生该流的用户id
         */
        onTrackReady: (rcTrack: RCTrack, session?: RCCallSession) => {
    
          // 用户资源已获取,包含己方资源
          rcTrack.play('#video')
        },
    
        /**
         * 关闭 或 开启 音频
         */
        onAudioMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {},
        /**
         * 关闭 或 开启 视频
         */
        onVideoMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {}
    
    })
    
    // 继续邀请其他人,groupOnly
    session.invite(userIds): Promise<{code}>
    
    // 接听(callin only)
    session.accept(constraints?: { audio?: IMicphoneAudioProfile; video?: ICameraVideoProfile })
    
    // 挂断
    session.hungup()

    Install

    npm i @rongcloud/plugin-call

    DownloadsWeekly Downloads

    8

    Version

    5.0.7

    License

    LGPL 2.1

    Unpacked Size

    118 kB

    Total Files

    7

    Last publish

    Collaborators

    • libin_npm
    • cloudregister
    • knight1cy
    • congk