天天看點

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

阿裡雲 RTC 的基本功能包含初始化 SDK、加入頻道、本地釋出和訂閱遠端、離開頻道等。當您成功初始化 SDK,您可以進行本地預覽視訊功能,進行簡單的預覽和測試。當您操作本地釋出和訂閱遠端時,可以設定手動或者自動模式。

前提條件

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

SDK 下載下傳

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

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

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

操作步驟

  1. 請您先初始化 SDK。首先您需要建立 AliRtcEngine 執行個體,并注冊 AliRtcEngineDelegate 監聽相關回調。如果您在 ViewController 中持有 AliRtcEngine 執行個體,請聲明屬性。
@interface ViewController () <AliRtcEngineDelegate>
@property (nonatomic, strong) AliRtcEngine *engine;
@end      

Mac 回調詳情請參見

回調及監聽
self.engine = [AliRtcEngine sharedInstance:self extras:@""];      

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

    1. 本地預覽。在建立完 AliRtcEngine 執行個體後,您可以建立 canvas 布局進行本地預覽視訊。
AliVideoCanvas *canvas = [[AliVideoCanvas alloc] init];
canvas.renderMode = AliRtcRenderModeAuto;
canvas.view = (AliRenderView *)view; /* 預覽視窗view */
canvas.mirrorMode = AliRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled;
[self.engine setLocalViewConfig:canvas forTrack:AliRtcVideoTrackCamera];
[self.engine startPreview];      

說明

      • AliRtcRenderMode 提供四種渲染模式。
        • (推薦)AliRtcRenderModeAuto:自動模式。
        • AliRtcRenderModeStretch:拉伸填充視圖,不保持視訊比例。
        • AliRtcRenderModeFill:在保持視訊寬高比的同時縮放,填充黑邊。
        • AliRtcRenderModeCrop:在保持視訊寬高比的同時縮放,并裁剪以适合視圖。
      • view 必須是 AliRenderView 或者其子類。
      • AliRtcRenderMirrorMode 在本地或遠端均可設定鏡像模式,并提供三種鏡像模式。
        • AliRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled:隻有前置攝像頭預覽鏡像,其餘不鏡像。
        • AliRtcRenderMirrorModeAllEnabled:全部鏡像。
        • AliRtcRenderMirrorModeAllDisabled:全部不鏡像。

您也可以取消本地預覽。

[self.engine stopPreview];      
    1. 設定自動或者手動模式。阿裡雲音視訊通信 Mac 端預設實作自動釋出和訂閱,您也可以通過代碼手動釋出和訂閱。
      • 自動釋出模式: 如果您打開自動釋出模式,加入頻道之後,SDK 将自動開始釋出音視訊流;如果關閉自動釋出模式,則需要您調用 publish 接口之後才會釋出音視訊流。
      • 自動訂閱模式: 如果您打開自動訂閱模式,加入頻道之後,SDK 将會自動訂閱目前頻道内其他人的音視訊流;如果關閉自動訂閱模式,則需要您調用 subscribe 接口之後才會訂閱其他人的音視訊流。
/*
設定自動釋出和訂閱,隻能在加入頻道之前配置。
autoPublish:是否自動釋出。取值:YES|NO。
autoSubscribe:是否自動訂閱。取值:YES|NO。
*/ 
[self.engine setAutoPublish:YES withAutoSubscribe:YES];      
  1. 加入頻道。
AliRtcAuthInfo *authinfo = [[AliRtcAuthInfo alloc]init];
authinfo.channel   = /* 您的channelId */;
authinfo.appid     = /* 您的Appid */;
authinfo.nonce     = /* 您的nonce */;
authinfo.user_id   = /* 您的userId */;
authinfo.token     = /* 您的token */;
authinfo.timestamp = /* 您的timestamp */;
authinfo.gslb      = /* 您的gslb位址 */;
[self.engine joinChannel:authinfo name:/* userName */ onResult:^(NSInteger errCode){
    // 加入頻道UI處理
}];      
參數 描述
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 接口。
    • 手動釋出模式下:加入頻道成功後,可通過以下接口釋出本地流。

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

//YES表示允許釋出音頻流,NO表示不允許
[self.engine configLocalAudioPublish:YES];
//YES表示允許釋出相機流,NO表示不允許
[self.engine configLocalCameraPublish:YES];
//YES表示允許釋出次要視訊流;NO表示不允許
[self.engine configLocalSimulcast:YES forTrack:AliRtcVideoTrackCamera];
[self.engine publish:^(int err) {
    // 相關UI操作
}];      

取消釋出本地流。

[self.engine configLocalAudioPublish:NO];
[self.engine configLocalCameraPublish:NO];
[self.engine configLocalSimulcast:NO forTrack:AliRtcVideoTrackCamera];
[self.engine publish:^(int err) {
    // 取消相關UI操作
}];      
  1. 訂閱或取消訂閱遠端流。訂閱遠端流。
    • 自動訂閱模式下:加入頻道成功後,即可訂閱遠端流,無需再次調用 subscribe 接口。
    • 手動訂閱模式下:加入頻道成功後,可通過以下接口訂閱遠端流。

無論是自動模式還是非自動模式,當您訂閱成功後,通過 delegate 可以擷取訂閱的 callback,然後您可以進行相關 UI 操作或邏輯處理。

- (void)onSubscribeChangedNotify:(NSString *)uid audioTrack:(AliRtcAudioTrack)audioTrack videoTrack:(AliRtcVideoTrack)videoTrack {
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI或者邏輯處理,例如渲染遠端視訊流的操作如下
        if(videoTrack & AliRtcVideoTrackCamera) {
        // camera track
        AliVideoCanvas *canvas = [[AliVideoCanvas alloc] init];
        canvas.renderMode = /* renderMode */;
        canvas.view = (AliRenderView *)view;/* 渲染view */
        [self.engine setRemoteViewConfig:canvas uid:uid forTrack:AliRtcVideoTrackCamera];
      }
    });
}      

您可以通過下述 delegate 回調監聽遠端使用者的流狀态變更。例如,手動模式下,收到此回調後,可以擷取到遠端使用者的釋出狀态,然後相應做出訂閱(subscribe)操作,或者更新 UI 等。

- (void)onRemoteTrackAvailableNotify:(NSString *)uid audioTrack:(AliRtcAudioTrack)audioTrack videoTrack:(AliRtcVideoTrack)videoTrack {
}      

取消訂閱遠端流。

[self.engine configRemoteAudio:/* remoteUserID */ enable:NO];
[self.engine configRemoteScreenTrack:/* remoteUserID */ enable:NO];
[self.engine configRemoteCameraTrack:/* remoteUserID */ preferMaster:YES enable:NO];
[self.engine subscribe:/* remoteUserID */ onResult:^(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
}];      
  1. 離開頻道。
[self.engine leaveChannel];      

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

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