DingRTC的基本功能包含初始化SDK、加入頻道、本地發布、訂閱遠端和離開頻道等。通過閱讀本文,您可以了解DingRTC的基本功能。
前提條件
您已下載并集成最新版本的SDK。具體操作,請參見如何在Android端集成音視頻通信SDK。
您已獲取加入頻道必需的頻道鑒權令牌(Token)。具體操作,請參見使用Token鑒權。
操作步驟
初始化SDK。
您需要創建RtcEngine實例,并注冊回調。具體回調接口請參見回調及監聽。
import static com.ding.rtc.DingRtcEngine mRtcEngine = DingRtcEngine.create(getApplicationContext(), ""); mRtcEngine.setRtcEngineEventListener(new DingRtcEngineEventListener() { // 重寫您需要監聽的回調方法。 });
本地預覽。在創建完RtcEngine實例后,您可以創建canvas布局進行本地預覽視頻。
DingRtcEngine.DingRtcVideoCanvas canvas = new DingRtcEngine.DingRtcVideoCanvas(); SurfaceView localView = mRtcEngine.createRenderSurfaceView(this); canvas.view = localView; canvas.renderMode = DingRtcEngine.DingRtcRenderMode.DingRtcRenderModeCrop; mRtcEngine.setLocalViewConfig(canvas, DingRtcVideoTrackCamera); mRtcEngine.startPreview();
可選:取消本地預覽。
mRtcEngine.stopPreview();
設置發布與訂閱。
SDK在入會時不會自動推流。想要入會即推流的話,在app里實現
new DingRtcEngineEventListener() { @Override public void onJoinChannelResult(int result, String channel, String userId, int elapsed) { runOnUiThread(() -> { if(result == 0) { mRtcEngine.publishLocalAudioStream(true); mRtcEngine.publishLocalVideoStream(true); } }); } }
SDK默認入會后自動訂閱遠端的音頻流與視頻流,如果您不希望自動訂閱音頻與視頻,可以在入會前通過以下接口設置:
// 設置自動拉流,以及視頻清晰度 // 這些值根據需要配置 boolean autoSubAudio = true; boolean autoSubVideo = true; DingRtcEngine.DingRtcVideoStreamType preferVideoQuality = DingRtcEngine.DingRtcVideoStreamType.DingRtcVideoStreamTypeFHD; mRtcEngine.setDefaultSubscribeAllRemoteAudioStreams(autoSubAudio); mRtcEngine.setDefaultSubscribeAllRemoteVideoStreams(autoSubVideo); mRtcEngine.setRemoteDefaultVideoStreamType(preferVideoQuality);
加入頻道。
DingRtcAuthInfo auth = new DingRtcAuthInfo(); auth.channelId = /* 頻道ID */; auth.appId = /* 應用ID */; auth.token = /* 頻道鑒權令牌Token */; auth.userId = /* 用戶ID */; auth.gslbServer = /* GSLB地址 */; mRtcEngine.joinChannel(auth, nick /* 顯示名稱 */);
參數
描述
appId
應用ID,在控制臺應用管理頁面創建和查看。
channelId
頻道ID。1~64位,由大小寫字母、數字、下劃線(_)、短劃線(-)組成。
userId
用戶ID。1~64位,由大小寫字母、數字、下劃線(_)、短劃線(-)組成。
說明同一個用戶ID在其他端登錄,先入會的端會被后入會的端踢出頻道。
token
頻道鑒權令牌。
gslbServer
服務地址,可為空,默認值為:
"https://gslb.dingrtc.com"
,請您通過業務服務器下發到客戶端SDK,不建議您將該地址固化在客戶端代碼。發布或取消發布本地流。
入會之后,也可以改變推流狀態。
發布本地音頻流和視頻流
如果此時沒有推流,可以調用以下接口進行發布音頻或者視頻:
mRtcEngine.publishLocalVideoStream(true); mRtcEngine.publishLocalAudioStream(true);
或者取消推流
mRtcEngine.publishLocalVideoStream(false); mRtcEngine.publishLocalAudioStream(false);
音頻和視頻可以獨立控制。
訂閱或取消訂閱遠程流。
訂閱遠端音頻流和視頻流
如果您在入會前沒有設置訂閱音頻流和視頻流,則入會后會自動訂閱遠端的音頻流和視頻流;如果您在入會前設置取消自動訂閱音頻流和視頻流,則入會后需要調用以下接口進行手動訂閱:
// // 對整體操作:全部訂閱或者全部不訂閱 // // 音頻 mRtcEngine.subscribeAllRemoteAudioStreams(true); // false表示不訂閱 // 視頻 mRtcEngine.subscribeAllRemoteVideoStreams(true); mRtcEngine.setRemoteDefaultVideoStreamType(preferVideoQuality); // 設置拉流最高質量 // // 對個體操作 // // 音頻 // SDK目前不支持對個體音頻訂閱操作 // 視頻 mRtcEngine.subscribeRemoteVideoStream(remoteUid, DingRtcEngine.DingRtcVideoTrack.DingRtcVideoTrackCamera, true); // false 表示不訂閱 mRtcEngine.SetRemoteVideoStreamType(remoteUid, type); // type: DingRtcVideoStreamTypeFHD, DingRtcVideoStreamTypeHD, // DingRtcVideoStreamTypeSD, DingRtcVideoStreamTypeLD // 表示期望最高訂閱規格。實際碼流還要受限于拉流側的網絡質量
訂閱視頻還需要設置窗口以便能夠看到視頻內容。比較推薦的時機是在onRemoteTrackAvailableNotify消息收到時,也可以提前設置,或者晚些時候設置。
SurfaceView remoteView = mRtcEngine.createRenderSurfaceView(this); DingRtcEngine.DingRtcVideoCanvas canvas = new DingRtcEngine.DingRtcVideoCanvas(); canvas.view = remoteView; canvas.renderMode = DingRtcEngine.DingRtcRenderMode.DingRtcRenderModeCrop; mRtcEngine.setRemoteViewConfig(canvas, remoteUid, DingRtcEngine.DingRtcVideoTrack.DingRtcVideoTrackCamera);
離開頻道。
mRtcEngine.leaveChannel();
銷毀引擎。
if(mRtcEngine != null) {
mRtcEngine.destroy();
mRtcEngine = null;
}
后續步驟
您可以下載示例代碼,快速運行Demo,實現頻道內和其他人進行實時音視頻通話,詳情請參見運行 Android Demo。