【音視頻】Android CallLib 開發指南

開通方式

音視頻服務開通,請參考音視頻開通方式說明。

使用說明

由於底層引擎技術不同,2.6.0 之後的音視頻 SDK 與 2.6.0 之前的 SDK 中的實時音視頻不能互通。

音視頻 SDK 爲商用收費功能,之前的 SDK 中的實時音視頻爲免費測試功能,如果您還想使用之前的實時音視頻,可以使用 2.5.2 版本,2.6.0 之後的音視頻服務使用說明如下:

集成說明

1、 首先請參考官網文檔集成 CallLib SDK 。

2、 使用融雲通話之前,必須先初始化 SDK 和連接服務器,詳細內容可以參考 IMLib 快速集成文檔

快速集成

發起通話

您可以調用 RongCallClient 下面接口發起通話。

/**
 * 發起一個通話
 * @param conversationType  會話類型
 * @param targetId          目標會話id
 * @param userIds           邀請參與通話的用戶ID列表
 * @param mediaType         發起的通話媒體類型
 * @param extra             附加信息
 * @return                  呼叫id
 */
 public String startCall(Conversation.ConversationType conversationType, String targetId, List<String> userIds, RongCallCommon.CallMediaType mediaType, String extra);

設置通話來電監聽

RongCallClient.setReceivedCallListener(new IRongReceivedCallListener() {    
    /**
     * 來電回調
     * @param callSession 通話實體
     */
    @Override
    public void onReceivedCall(RongCallSession callSession) {        
    //accept or hangup the call
    }    
    
    /**
     * targetSDKVersion>=23時檢查權限的回調。當targetSDKVersion<23的時候不需要實現。
     * 在這個回調裏用戶需要使用Android6.0新增的動態權限分配接口requestCallPermissions通知用戶授權,
     * 然後在onRequestPermissionResult回調里根據用戶授權或者不授權分別回調
     * RongCallClient.getInstance().onPermissionGranted()和
     * RongCallClient.getInstance().onPermissionDenied()來通知CallLib。
     * 其中audio call需要獲取Manifest.permission.RECORD_AUDIO權限;
     * video call需要獲取Manifest.permission.RECORD_AUDIO和Manifest.permission.CAMERA兩項權限。
     * @param callSession 通話實體
     */
    @Override
    public void onCheckPermission(RongCallSession callSession) {

    }
});

接聽和掛斷通話

您可以調用 RongCallClient 下面接口接聽和掛斷通話。

/**
 * 接聽通話
 * @param callId 呼叫id,可以從來電監聽的callSession中獲取
 */public void acceptCall(String callId);
/**
 * 掛斷通話
 * @param callId 呼叫id,可以從來電監聽的callSession中獲取
 */public void hangUpCall(String callId);

會話是否支持發起通話--call_conversation--

目前,SDK 支持在單聊中發起單人通話,在討論組中發起多人通話。

您可以通過 RongCallClient 的下面接口查詢當前會話類型的通話能力。

/**
 * 當前會話類型是否支持音頻通話。
 * @param type  會話類型
 * @return      true:支持; false:不支持
 */
 public boolean isAudioCallEnabled(Conversation.ConversationType type);
 
/**
 * 當前會話類型是否支持視頻通話。
 * @param type  會話類型
 * @return      true:支持; false:不支持
 */
 public boolean isVideoCallEnabled(Conversation.ConversationType type);

獲取當前的通話實體

您可以通過RongCallClient的下面接口獲取當前的通話實體,通話實體中維護着當前通話的所有信息。

/**
 * 獲取當前通話實體,通話實體中維護着當前通話的所有信息。
 * @return 當前通話實體
 */
 public RongCallSession getCallSession();

邀請用戶加入當前通話

您可以通過 RongCallClient 的下面接口邀請用戶加入當前通話(僅限討論組和羣組)。

/**
 * 邀請用戶加入當前通話(僅限討論組和羣組)
 * @param callId    通話id
 * @param userIds   邀請的用戶id列表
 */
 public void addParticipants(String callId, List<String> userIds);

通話過程中的媒體接口

您可以通過 RongCallClient 的下面接口進行媒體類的操作。

/**
 * 切換 audio,video 通話
 * @param mediaType 要切換的媒體類型:audio、video
 */
 public void changeCallMediaType(RongCallCommon.CallMediaType mediaType);
 
/**
 * 前後攝像頭切換
 */
 public void switchCamera();
 
/**
 * 設置是否打開本地攝像頭
 * @param enabled true:打開攝像頭;false:關閉攝像頭。
 */
 public void setEnableLocalVideo(boolean enabled);
 
/**
 * 設置是否打開本地音頻
 * @param enabled true:打開本地音頻 false:關閉本地音頻
 */
 public void setEnableLocalAudio(boolean enabled);
 
/**
 * 設置是否打開免提
 * @param enabled true:打開免提 false:關閉免提
 */
 public void setEnableSpeakerphone(boolean enabled);

設置通話狀態的回調

您需要設置通話狀態的回調,來監聽通話狀態的變化。

RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() {    
    /**
     * 電話已撥出。
     * 主叫端撥出電話後,通過回調 onCallOutgoing 通知當前 call 的詳細信息。
     *
     * @param callSession 通話實體。
     * @param localVideo  本地 camera 信息。
     */
    @Override
    public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) {

    }    
    
    /**
     * 已建立通話。
     * 通話接通時,通過回調 onCallConnected 通知當前 call 的詳細信息。
     *
     * @param callSession 通話實體。
     * @param localVideo  本地 camera 信息。
     */
    @Override
    public void onCallConnected(RongCallSession callSession, SurfaceView localVideo) {

    }    
    
    /**
     * 通話結束。
     * 通話中,對方掛斷,己方掛斷,或者通話過程網絡異常造成的通話中斷,都會回調 onCallDisconnected。
     *
     * @param callSession 通話實體。
     * @param reason      通話中斷原因。
     */
    @Override
    public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {

    }    
    
    /**
     * 被叫端正在振鈴。
     * 主叫端撥出電話,被叫端收到請求,發出振鈴響應時,回調 onRemoteUserRinging。
     *
     * @param userId 振鈴端用戶 id。
     */
    @Override
    public void onRemoteUserRinging(String userId) {

    }    
    
    /**
     * 被叫端加入通話。
     * 主叫端撥出電話,被叫端收到請求後,加入通話,回調 onRemoteUserJoined。
     *
     * @param userId      加入用戶的 id。
     * @param mediaType   加入用戶的媒體類型,audio or video。
     * @param remoteVideo 加入用戶者的 camera 信息。
     */
    @Override
    public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView remoteVideo) {

    }    
    
    /**
     * 通話中的某一個參與者,邀請好友加入通話,發出邀請請求後,回調 onRemoteUserInvited。
     *
     * @param userId    被邀請者的 id。
     * @param mediaType 被邀請者的 id。
     */
    @Override
    public void onRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) {

    }    
    
    /**
     * 通話中的遠端參與者離開。
     * 回調 onRemoteUserLeft 通知狀態更新。
     *
     * @param userId 遠端參與者的 id。
     * @param reason 遠端參與者離開原因。
     */
    @Override
    public void onRemoteUserLeft(String userId, RongCallCommon.CallDisconnectedReason reason) {

    }    
    
    /**
     * 當通話中的某一個參與者切換通話類型,例如由 audio 切換至 video,回調 onMediaTypeChanged。
     *
     * @param userId    切換者的 userId。
     * @param mediaType 切換者,切換後的媒體類型。
     * @param video     切換着,切換後的 camera 信息,如果由 video 切換至 audio,則爲 null。
     */
    @Override
    public void onMediaTypeChanged(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView video) {

    }    
    
    /**
     * 通話過程中,發生異常。
     *
     * @param errorCode 異常原因。
     */
    @Override
    public void onError(RongCallCommon.CallErrorCode errorCode) {

    }    
    
    /**
     * 遠端參與者 camera 狀態發生變化時,回調 onRemoteCameraDisabled 通知狀態變化。
     *
     * @param userId   遠端參與者 id。
     * @param disabled 遠端參與者 camera 是否可用。
     */
    @Override
    public void onRemoteCameraDisabled(String userId, boolean disabled) {

    }
});


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章