天天看點

産品百科 |Ali RTC Android 基本功能介紹

前提條件

在實作基本功能前,請您確定下載下傳最新 SDK,請參見

SDK 下載下傳

獲得加入頻道必須的頻道鑒權令牌(Token):

  • 您可以在控制台生成臨時 Token 校驗加入頻道是否成功,詳情請參見 控制台生成 Token
  • 在安全要求更高的場景下,建議您在服務端生成 Token,詳情請參見 服務端生成 Token

說明 本文中的實作方法為主要功能方法,僅供參考,您可以根據業務需求進行實際開發。

操作步驟

  1. 初始化 SDK。您需要建立 AliRtcEngine 執行個體,并注冊回調。相關回調有 AliRtcEngineEventListener 和 AliRtcEngineNotify,具體回調接口請參見 回調及監聽
mEngine = AliRtcEngine.getInstance(getApplicationContext());
mEngine.setRtcEngineEventListener(mEventListener);
mEngine.setRtcEngineNotify(mEngineNotify);      
  1. 說明該接口隻能在主線程調用,暫不支援多執行個體。mEventListener:操作回調監聽(回調接口都在子線程)。
private AliRtcEngineEventListener mEventListener = new AliRtcEngineEventListener() {
};      
  1. mEngineNotify:SDK 事件通知(回調接口都在子線程)。
private AliRtcEngineNotify mEngineNotify = new AliRtcEngineNotify() {    
};      
    1. 本地預覽。在建立完 AliRtcEngine 執行個體後,您可以建立 canvas 布局進行本地預覽視訊。
//建立canvas,canvas為SophonSurfaceView或者它的子類。
AliRtcEngine.AliVideoCanvas canvas = new AliRtcEngine.AliVideoCanvas();
//SDK内部提供進行播放的視圖。
SophonSurfaceView surfaceView = new SophonSurfaceView(this);
surfaceView.setZOrderOnTop(true);
surfaceView.setZOrderMediaOverlay(true);
mSurfaceContainer.addView(surfaceView,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
/* 預覽視窗的視圖 */
canvas.view = surfaceView; 
canvas.renderMode = AliRtcRenderModeAuto;
mEngine.setLocalViewConfig(canvas, AliRtcVideoTrackCamera);
mEngine.startPreview();
//mSurfaceContainer為包裹mCanvas的父視圖。
mSurfaceContainer.getChildAt(0).setVisibility(View.VISIBLE);      
    1. 建議您把 mAliVideoCanvas 之上的所有視圖單獨放在一個透明的父布局,因為 surfaceview 的 z-order 問題可能會擋住 contronlview 的顯示。說明AliRtcRenderMirrorMode 提供三種鏡像模式。
      • AliRtcRenderMirrorModeOnlyFront:隻有前置攝像頭預覽鏡像,其餘不鏡像。
      • AliRtcRenderMirrorModeAllEnabled:全部鏡像。
      • AliRtcRenderMirrorModeAllDisable:全部不鏡像。
    1. AliRtcRenderMode 渲染模式有四種模式。
      • AliRtcRenderModeAuto(推薦):自動。
      • AliRtcRenderModeStretch:拉伸填充視圖,不保持視訊比例。
      • AliRtcRenderModeFill:在保持視訊寬高比的同時縮放,填充黑邊。
      • AliRtcRenderModeClip:在保持視訊寬高比的同時縮放,并裁剪以适合視圖。
    1. 設定自動或者手動模式。說明阿裡雲 RTC Android 端預設實作自動釋出和訂閱,您也可以通過代碼手動釋出和訂閱。
      • 自動釋出模式: 如果您打開自動釋出模式,加入頻道之後,SDK 将自動開始釋出音視訊流;如果關閉自動釋出模式,則需要您調用 publish 接口之後才會釋出音視訊流。
      • 自動訂閱模式: 如果您打開自動訂閱模式,加入頻道之後,SDK 将會自動訂閱目前頻道内其他人的音視訊流;如果關閉自動訂閱模式,則需要您調用 subscribe 接口之後才會訂閱其他人的音視訊流。
/**
*設定自動釋出和訂閱,隻能在加入頻道之前設定。
*@param autoPub:是否自動釋出。取值:true|false。
*@param autoSub:是否自動訂閱。取值:true|false。
*/
mEngine.setAutoPublish(true, true);      
  1. 加入頻道。
AliRtcAuthInfo userInfo = new AliRtcAuthInfo();
userInfo.setConferenceId(/* 頻道ID */);
userInfo.setAppid(/* 應用ID */);
userInfo.setNonce(/* 随機碼 */);
userInfo.setTimestamp(/* 時間戳*/);
userInfo.setUserId(/* 使用者ID */);
userInfo.setGslb(/* GSLB位址*/);
userInfo.setToken(/*鑒權令牌Token*/);
if(mEngine != null) {    
mEngine.joinChannel(userInfo, /* 使用者顯示名稱 */);
}      
參數 描述
AppID 應用 ID,在控制台應用管理頁面建立和檢視。
ChannelId 頻道 ID。1~64 位,支援大小寫字母、數字、下劃線(_)、中劃線(-)。
UserId

使用者 ID。1~64 位,支援大小寫字母、數字、下劃線(_)、中劃線(-)。

說明 同一個使用者 ID 在其他端登入,先入會的端會被後入會的端踢出頻道。

Nonce 随機碼。需要加上字首 AK-,由字母 [a-zA-Z] 和數字 [0-9] 組成,不包含特殊字元,最大 64 位元組。例如:AK-2b9be4b25c2d38c409c376ffd2372be1。
TimeStamp 頻道過期時間戳。代表令牌有效時間為目前時間 + 所選擇小時數。
Token 頻道鑒權令牌,計算方法:

token = sha256(appId + appKey + channelId + userId + nonce + timestamp)

GSLB 服務位址,該參數是數組類型,目前請使用:

["https://rgslb.rtc.aliyuncs.com"]

,請您通過業務伺服器下發到用戶端 SDK,不建議您将該位址固化在用戶端代碼。
  1. 釋出或取消釋出本地流。釋出本地流。
    • 自動釋出模式下:加入頻道成功後,即可釋出本地流,無需再次調用 publish 接口。
    • 手動釋出模式下:加入頻道成功後,可通過以下接口釋出本地流。
  1. 如果釋出過程中需要變更配置或者停止釋出,需要按如下流程先重新設定配置參數,然後再調用 publish 接口。
//釋出本地流設定。
//true表示允許釋出音頻流,false表示不允許。
mEngine.configLocalAudioPublish(true);
//true表示允許釋出相機流,false表示不允許。
mEngine.configLocalCameraPublish(true);
//true表示允許釋出螢幕流,false表示不允許。
mEngine.configLocalScreenPublish(true);
//true表示允許釋出次要視訊流,false表示不允許。
mEngine.configLocalSimulcast(true, AliRtcEngine.AliRtcVideoTrack.AliRtcVideoTrackCamera);
mEngine.publish();      
  1. 取消釋出本地流。
mEngine.configLocalAudioPublish(false);
mEngine.configLocalCameraPublish(false);
mEngine.configLocalScreenPublish(false);
mEngine.configLocalSimulcast(false, AliRtcEngine.AliRtcVideoTrack.AliRtcVideoTrackCamera);
mEngine.publish();      
  1. 釋出和取消釋出本地流回調代碼如下所示。
private AliRtcEngineEventListener mEventListener = new AliRtcEngineEventListener() {
@Override
public void onPublishResult(int result, String publishId) {
//釋出本地流回調。
}
@Override
public void onUnpublishResult(int result) {
//取消釋出本地流回調。
}
}      
  1. 訂閱或取消訂閱遠端流。訂閱遠端流。
    • 自動訂閱模式下:加入頻道成功後,即可訂閱遠端流,無需再次調用 subscribe 接口。
    • 手動訂閱模式下:加入頻道成功後,可通過以下接口訂閱遠端流。
  1. 如果訂閱過程中需要變更配置或者停止訂閱,需要按如下流程先重新設定配置參數,然後再調用 subscribe 接口。
// 訂閱遠端音頻流。
mEngine.configRemoteAudio(/* remoteUserID */, true);
// 訂閱遠端螢幕流。
mEngine.configRemoteScreenTrack(/* remoteUserID */, true);
// 訂閱遠端相機流。
mEngine.configRemoteCameraTrack(/* remoteUserID */, true, true);
// 訂閱遠端使用者ID。
mEngine.subscribe(/* remoteUserID */);      
  1. 取消訂閱遠端流。
mEngine.configRemoteAudio(/* remoteUserID */, false);
mEngine.configRemoteScreenTrack(/* remoteUserID */, false);
mEngine.configRemoteCameraTrack(/* remoteUserID */, true, false);
mEngine.subscribe(/* remoteUserID */);      
  1. 遠端流回調代碼如下所示。
private AliRtcEngineNotify mEngineNotify = new AliRtcEngineNotify() {
@Override
public void onRemoteUserUnPublish(AliRtcEngine rtcEngine, String userId) {
//遠端使用者停止釋出通知,處于OB(observer)狀态。
}
@Override
public void onRemoteUserOnLineNotify(String uid) {
//遠端使用者上線通知。
}
@Override
public void onRemoteUserOffLineNotify(String uid) {
//遠端使用者下線通知。
}
@Override
public void onRemoteTrackAvailableNotify(String uid,AliRtcEngine.AliRtcAudioTrackaudioTrack,AliRtcEngine.AliRtcVideoTrack videoTrack) {
//遠端使用者釋出音視訊流變化通知。
}
public void onSubscribeResult(String uid,int result,AliRtcVideoTrack videoTrack,AliRtcAudioTrack audioTrack) {
//訂閱流回調,可以做UI及資料的更新。
}
}      
  1. 離開頻道。
    • 對于版本号大于 1.7 的 SDK,請調用如下接口。
mEngine.leaveChannel();      
    • 對于版本号小于等于 1.7 的 SDK,請增加 timeout 參數,一般設定為 1000,表示該接口的調用逾時時間為 1 秒,建議您在 Activity 的 onDestroy 接口中調用。

      說明 調用 leaveChannel 接口後請不要再操作 AliRtcEngine 執行個體。

mEngine.leaveChannel(1000);      
  1. 您可以下載下傳示例代碼,快速跑通 Demo,實作頻道内和其他人進行實時音視訊通話,詳情請參見  Android Demo 接口方法請參見 AliRtcEngine 接口