阿里云RTC的基本功能包含初始化SDK、加入頻道、本地發(fā)布、訂閱遠端和離開頻道等。通過閱讀本文,您可以了解阿里云RTC的基本功能。
前提條件
- 您已下載并集成最新版本的SDK。具體操作,請參見Android端集成SDK。
- 您已獲取加入頻道必需的頻道鑒權(quán)令牌(Token)。具體操作,請參見生成Token。
使用限制
本文僅供SDK 2.1及以上版本使用,如果您需要SDK 1.17版本對應的文檔,請參見Android端實現(xiàn)基本功能。
操作步驟
- 初始化SDK。
您需要創(chuàng)建AliRtcEngine實例,并注冊回調(diào)。具體回調(diào)接口請參見回調(diào)及監(jiān)聽。
private void getInstance() { AliRtcEngine engine = AliRtcEngine.getInstance(getApplicationContext()); engine.setRtcEngineEventListener(eventListener); engine.setRtcEngineNotify(engineNotify); }
- 本地預覽。在創(chuàng)建完AliRtcEngine實例后,您可以創(chuàng)建canvas布局進行本地預覽視頻。
private void setLocalViewConfig() { // 創(chuàng)建 SurfaceView 對象。 private FrameLayout mLocalContainer; private SurfaceView mLocalView; mLocalView = engine.CreateRendererView(getApplicationContext()); mLocalView.setZOrderMediaOverlay(true); mLocalContainer.addView(mLocalView); // 設(shè)置本地視圖。 AliVideoCanvas canvas = new AliRtcEngine.AliVideoCanvas(); canvas.view = surfaceView; canvas.renderMode = AliRtcRenderModeAuto; engine.setLocalViewConfig(canvas,AliRtcVideoTrackCamera); engine.startPreview(); }
說明- AliRtcRenderMode提供四種渲染模式:
- AliRtcRenderModeAuto(推薦):自動。
- AliRtcRenderModeStretch:拉伸填充視圖,不保持視頻比例。
- AliRtcRenderModeFill:在保持視頻寬高比的同時縮放,填充黑邊。
- AliRtcRenderModeClip:在保持視頻寬高比的同時縮放,并裁剪以適合視圖。
- AliRtcRenderMirrorMode在本地或遠端均可設(shè)置鏡像模式,并提供三種鏡像模式:
- AliRtcRenderMirrorModeOnlyFront:只有前置攝像頭預覽鏡像,其余不鏡像。
- AliRtcRenderMirrorModeAllEnabled:全部鏡像。
- AliRtcRenderMirrorModeAllDisable:全部不鏡像。
- AliRtcRenderMode提供四種渲染模式:
- 可選:取消本地預覽。
engine.stopPreview();
- 設(shè)置發(fā)布與訂閱。
- SDK默認入會后自動發(fā)布音頻流與視頻流,如果您不希望自動發(fā)布音頻和視頻,可以在入會前通過以下接口設(shè)置:
engine.publishLocalAudioStream(false);//默認不發(fā)布音頻流 engine.publishLocalVideoStream(false);//默認不發(fā)布視頻流
- SDK默認入會后自動訂閱遠端的音頻流與視頻流,如果您不希望自動訂閱音頻與視頻,可以在入會前通過以下接口設(shè)置:
engine.setDefaultSubscribeAllRemoteAudioStreams(false);//默認不訂閱音頻流 engine.setDefaultSubscribeAllRemoteVideoStreams(false);//默認不訂閱視頻流
- SDK默認入會后自動發(fā)布音頻流與視頻流,如果您不希望自動發(fā)布音頻和視頻,可以在入會前通過以下接口設(shè)置:
- 本地預覽。在創(chuàng)建完AliRtcEngine實例后,您可以創(chuàng)建canvas布局進行本地預覽視頻。
- 加入頻道。
AliRtcAuthInfo userInfo = new AliRtcAuthInfo(); authinfo.channelId = /* 您的channelId */; authinfo.appId = /* 您的Appid */; authinfo.nonce = /* 您的nonce */; authinfo.userId = /* 您的userId */; authinfo.token = /* 您的token */; authinfo.timestamp = /* 您的timestamp */; authinfo.gslb = /* 您的gslb地址 */; engine.joinChannel(userInfo, mUsername);
參數(shù) 描述 appId 應用ID,在控制臺應用管理頁面創(chuàng)建和查看。 channelId 頻道ID。1~64位,由大小寫字母、數(shù)字、下劃線(_)、短劃線(-)組成。 userId 用戶ID。1~64位,由大小寫字母、數(shù)字、下劃線(_)、短劃線(-)組成。 說明 同一個用戶ID在其他端登錄,先入會的端會被后入會的端踢出頻道。nonce 隨機碼。以前綴AK-開頭,由大小寫字母、數(shù)字組成,最大64字節(jié)。例如:AK-2b9be4b25c2d38c409c376ffd2372be1。 timestamp 過期時間戳。可以選擇12小時、24小時、3天和7天,代表令牌有效時間。 token 頻道鑒權(quán)令牌,計算方法: token = sha256(appId + appKey + channelId + userId + nonce + timestamp)
。gslb 服務地址,該參數(shù)是數(shù)組類型,當前請使用: ["https://rgslb.rtc.aliyuncs.com"]
,請您通過業(yè)務服務器下發(fā)到客戶端SDK,不建議您將該地址固化在客戶端代碼。 - 發(fā)布或取消發(fā)布本地流。
- 發(fā)布本地音頻流和視頻流
如果您在入會前沒有設(shè)置發(fā)布音頻流和視頻流,則入會后會自動發(fā)布本地的音頻流和視頻流;如果您在入會前設(shè)置取消發(fā)布音頻流和視頻流,則入會后需要調(diào)用以下接口進行手動發(fā)布:
engine.publishLocalAudioStream(true);//發(fā)布音頻流 engine.publishLocalVideoStream(true);//發(fā)布視頻流
- 發(fā)布小流
SDK默認不發(fā)布小流,如果您需要推送小流,請調(diào)用以下接口(入會前、后均可調(diào)用):
engine.publishLocalDualStream(true);
- 取消發(fā)布本地音頻流和視頻流
如果您需要取消發(fā)布本地的音頻流和視頻流,請調(diào)用以下接口:
engine.publishLocalAudioStream(false);//取消發(fā)布音頻流 engine.publishLocalVideoStream(false);//取消發(fā)布視頻流
- 發(fā)布本地音頻流和視頻流
- 訂閱或取消訂閱遠程流。
- 訂閱遠端音頻流和視頻流
如果您在入會前沒有設(shè)置訂閱音頻流和視頻流,則入會后會自動訂閱遠端的音頻流和視頻流;如果您在入會前設(shè)置取消訂閱音頻流和視頻流,則入會后需要調(diào)用以下接口進行手動訂閱:
engine.setDefaultSubscribeAllRemoteAudioStreams(true);//訂閱全部的遠端音頻流 engine.setDefaultSubscribeAllRemoteVideoStreams(true);//訂閱全部的遠端視頻流
說明 此接口作用于后續(xù)入會的遠端用戶,對于調(diào)用此接口之前已經(jīng)入會的遠端用戶,此接口不產(chǎn)生影響。訂閱成功后,您可以在onRemoteTrackAvailableNotify回調(diào)里渲染遠端的視頻畫面:
public void onRemoteTrackAvailableNotify(String uid, AliRtcEngine.AliRtcAudioTrack audioTrack, AliRtcEngine.AliRtcVideoTrack videoTrack) { // UI或者邏輯處理,例如渲染遠端視頻流的操作如下。 if(videoTrack == AliRtcVideoTrackCamera) { // 視頻流 AliRtcEngine.AliRtcVideoCanvas canvas = new AliRtcEngine.AliRtcVideoCanvas(); canvas.renderMode = /* renderMode */; canvas.view = view;/* 渲染view */ engine.setRemoteViewConfig(canvas, uid, AliRtcVideoTrackCamera); } }); }
- 取消訂閱遠端音頻流和視頻流
如果您需要取消訂閱遠端的音頻流和視頻流,請調(diào)用以下接口:
engine.setDefaultSubscribeAllRemoteAudioStreams(false);//取消訂閱遠端音頻流 engine.setDefaultSubscribeAllRemoteVideoStreams:(false);//取消訂閱遠端視頻流
說明 此接口作用于后續(xù)入會的遠端用戶,對于調(diào)用此接口之前已經(jīng)入會的遠端用戶,此接口不產(chǎn)生影響。 - 訂閱特定用戶的音頻流和視頻流
當已取消訂閱所有的音頻流和視頻流之后,如果您需要訂閱某個遠端用戶的音頻流和視頻流,可以通過調(diào)用以下接口實現(xiàn)(如果需要取消訂閱此遠端用戶的音頻流和視頻流,參數(shù)sub傳入false即可):
engine.subscribeRemoteAudioStream(uid,true);//訂閱特定用戶的音頻流 engine.subscribeRemoteVideoStream(uid,AliRtcVideoTrackCamera,true);//訂閱特定用戶的視頻流
- 訂閱小流
如果您需要訂閱小流,請調(diào)用以下接口:
engine.setRemoteDefaultVideoStreamType(AliRtcVideoStreamTypeLow);
說明 此接口作用于后續(xù)入會的遠端用戶,對于調(diào)用此接口之前已經(jīng)入會的遠端用戶,此接口不產(chǎn)生影響。 - 取消訂閱所有遠端用戶音頻流和視頻流
如果您希望當前會議中及后續(xù)入會的用戶全部取消訂閱,請調(diào)用以下接口:
engine.subscribeAllRemoteAudioStreams(false); engine.subscribeAllRemoteVideoStreams(false);
說明- 當以上接口設(shè)置為false時,優(yōu)先級最高,即使setDefaultSubscribeAllRemoteAudioStreams和setDefaultSubscribeAllRemoteVideoStreams設(shè)置為true時也不生效。
- 當以上接口設(shè)置為true時,是否訂閱以setDefaultSubscribeAllRemoteAudioStreams和setDefaultSubscribeAllRemoteVideoStreams設(shè)置為準。
- 訂閱遠端音頻流和視頻流
- 離開頻道。
engine.leaveChannel();
后續(xù)步驟
您可以下載示例代碼,快速運行Demo,實現(xiàn)頻道內(nèi)和其他人進行實時音視頻通話,詳情請參見運行Android Demo。