天天看點

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

前提條件

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

SDK 下載下傳

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

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

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

操作步驟

  1. 初始化 SDK。
    1. 如果 CRtcSampleDlg 類中有定義 AliRTCEngine 執行個體,則需要建立 AliRTCEngine 執行個體,并注冊 AliRtcEventListener 監聽相關回調,更多資訊,請參見 回調及監聽
m_pEngine = AliRtcEngine::sharedInstance(AliRtcEventListener* pListener, char* pConfig);//pListener是您實作的AliRtcEventListener對象,用于接收SDK的回調。pConfig是SDK初始化配置,目前版本請使用空字元串      

說明 暫不支援多執行個體。

    1. 建立 canvas 布局進行本地預覽視訊。
      • 開啟本地預覽。
// 擷取預覽視窗
AliVideoCanvas canvas;
canvas.renderMode = AliRtcRenderModeAuto;
canvas.hWnd = /*預覽視窗句柄*/;
// 設定預覽視窗
m_pEngine->setLocalViewConfig(canvas, AliRtcVideoTrackCamera);
m_pEngine->startPreview();
canvas.flip = true;//true表示鏡像畫面,false表示正常畫面      
      • 說明AliRtcRenderMode 提供四種渲染模式。
        • (推薦)AliRtcRenderModeAuto:自動模式。
        • AliRtcRenderModeStretch:拉伸填充視圖,不保持視訊比例。
        • AliRtcRenderModeFill:在保持視訊寬高比的同時縮放,填充黑邊。
        • AliRtcRenderModeCrop:在保持視訊寬高比的同時縮放,并裁剪以适合視圖。
      • 停止本地預覽。
m_pEngine->stopPreview();      
    1. 設定自動或者手動模式。
/*
設定自動釋出和訂閱,隻能在joinChannel之前設定
autoPub: true表示自動釋出,false表示手動釋出
autoSub: true表示自動訂閱,false表示手動訂閱
*/ 
m_pEngine->setAutoPublishSubscribe(bool autoPub, bool autoSub);      
      • 自動釋出模式: 如果您打開自動釋出模式,加入頻道之後,SDK 将自動開始釋出音視訊流;如果關閉自動釋出模式,則需要您調用 publish 接口之後才會釋出音視訊流。
      • 自動訂閱模式: 如果您打開自動訂閱模式,加入頻道之後,SDK 将會自動訂閱目前頻道内其他人的音視訊流;如果關閉自動訂閱模式,則需要您調用 subscribe 接口之後才會訂閱其他人的音視訊流。
  1. 加入頻道。
AliRtcAuthInfo authinfo;
authinfo.channel   = /* 頻道ID */;
authinfo.appid     = /* 應用ID */;
authinfo.token     = /* 頻道鑒權令牌Token */;
authinfo.nonce     = /* 随機碼 */;
authinfo.user_id   = /* 使用者ID */;
authinfo.timestamp = /* 時間戳 */;
authinfo.gslb      = /* GSLB位址 */;
...
// joinChannel是一個異步接口,設定回調函數
auto onJoinResult = [](void *opaque, int errCode) {
    if (errCode == 0) {
        // 加入頻道成功        
    } else {
        //加入頻道失敗
    }
};
m_pEngine->joinChannel(authinfo, /* 顯示名稱 */, onJoinResult, /*UserData,傳遞給onJoinResult回調函數*/);      
參數 描述
appid 應用 ID,在控制台應用管理頁面建立和檢視。
channel 頻道 ID。1~64 位,支援大小寫字母、數字、下劃線(_)、短劃線(-)。
user_id

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

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

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

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

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

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

,請您通過業務伺服器下發到用戶端 SDK,不建議您将該位址固化在用戶端代碼。
  1. 釋出或取消釋出本地流。釋出本地流。
    • 自動釋出模式下:加入頻道成功後,即可釋出本地流,無需再次調用 publish 接口。
    • 手動釋出模式下:加入頻道成功後,可通過以下接口釋出本地流。

如果釋出過程中需要變更配置或者停止釋出,需要按如下流程先重新設定配置參數,然後再調用 publish 接口。

//釋出本地流設定
//true表示允許釋出螢幕共享流,false表示不允許
m_pEngine->configLocalScreenPublish(true);
//true表示允許釋出音頻流,false表示不允許
m_pEngine->configLocalAudioPublish(true);
//true表示允許釋出相機流,false表示不允許
m_pEngine->configLocalCameraPublish(true);
//true表示允許釋出次要視訊流;false表示不允許
//子碼流
m_pEngine->configLocalSimulcast(true, AliRtcVideoTrack::AliRtcVideoTrackCamera); 
//螢幕共享流不支援子碼流,是以第二個參數隻能為AliRtcVideoTrack::AliRtcVideoTrackCamera。 
// Call back when publish finished
auto onPubResult = [](void *opaque, int errCode) {
    if (errCode == 0) {
       // 釋出成功
    } else {
       // 釋出失敗
    }
};
m_pEngine->publish(onPubResult, /*UserData,傳遞給onPubResult回調函數*/);      

取消釋出本地流。

m_pEngine->configLocalScreenPublish(false);
m_pEngine->configLocalAudioPublish(false);
m_pEngine->configLocalCameraPublish(false);
m_pEngine->configLocalSimulcast(false, AliRtcVideoTrack::AliRtcVideoTrackCamera);
// 取消釋出完成傳回成功或者失敗
auto onPubResult = [](void *opaque, int errCode) {
    if (errCode == 0) {
       // 取消釋出成功
    } else {
       // 取釋出失敗
    }
};
m_pEngine->publish(onPubResult, /*UserData,傳遞給onPubResult回調函數*/);      
  1. 訂閱或取消訂閱遠端流。訂閱遠端流。
    • 自動訂閱模式下:加入頻道成功後,即可訂閱遠端流,無需再次調用 subscribe 接口。
    • 手動訂閱模式下:加入頻道成功後,可通過以下接口訂閱遠端流。
  1. 如果訂閱過程中需要變更配置或者停止訂閱,需要按如下流程先重新設定配置參數,然後再調用 subscribe 接口。
//true表示允許訂閱音頻流,false表示不允許
m_pEngine->configRemoteAudio(/* remoteUserID */, true);
//true表示允許訂閱螢幕共享流,false表示不允許
m_pEngine->configRemoteScreenTrack(/* remoteUserID */, true);
//第二個參數preferMaster true表示優先訂閱大流,fales表示優先訂閱次小流
//第三個參數enable true表示允許訂閱相機流,false表示不允許
m_pEngine->configRemoteCameraTrack(/* remoteUserID */, true, true);
//Call back when subscribe finished
auto onSubResult = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) { 
};
m_pEngine->subscribe(/* remoteUserID */, onSubResult, /*UserData*/);      

自動模式或非自動模式下,訂閱成功後,您可以通過訂閱的回調,進行相關 UI 操作或邏輯處理。

auto onSubResult = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
    ...
    // 設定視訊流的視窗
    if (vt == AliRtcVideoTrack::AliRtcVideoTrackCamera || vt == AliRtcVideoTrack::AliRtcVideoTrackBoth) {
        /*設定遠端視訊預覽*/
    }      

另外,您可以通過 onRemoteTrackAvailableNotify 回調獲得遠端使用者的流狀态變更。例如:手動模式下,收到此回調後,可以擷取到遠端使用者的釋出狀态,然後相應做出訂閱操作,或者更新 UI 等。

void onRemoteTrackAvailableNotify(const AliRtc::String & uid,   AliRtcAudioTrack audioTrack, AliRtcVideoTrack videoTrack) {   
}      

取消訂閱遠端流。

m_pEngine->configRemoteAudio(/* remoteUserID */, false);
m_pEngine->configRemoteScreenTrack(/* remoteUserID */, false);
m_pEngine->configRemoteCameraTrack(/* remoteUserID */, true, false);
auto onSubResult = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
};
m_pEngine->subscribe(/* remoteUserID */, onSubResult, /*UserData*/);      
  1. 離開頻道。
m_pEngine->leaveChannel();      

您可以下載下傳示例代碼,快速跑通 Demo,實作頻道内和其他人進行實時音視訊通話,詳情請參見 

Windows Demo

。接口方法請參見

AliRtcEngine 接口
「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。
産品百科 |Ali RTC Windows 基本功能介紹