阿里云RTC的基本功能包含初始化SDK、加入頻道、本地發布、訂閱遠端和離開頻道等。通過閱讀本文,您可以了解阿里云RTC的基本功能。
前提條件
操作步驟
初始化SDK。
您需要創建DingRtcEngine實例,并注冊回調。如果您在ViewController中持有DingRtcEngine實例,請聲明屬性。具體回調接口請參見回調及監聽。
#import <DingRTC/DingRtcEngine.h> @interface ViewController () <DingRtcEngineDelegate> @property (nonatomic, strong) DingRtcEngine *engine; @end
self.engine = [DingRtcEngine sharedInstance:self extras:@""];
本地預覽。在創建完DingRtcEngine實例后,您可以創建canvas布局進行本地預覽視頻。
DingRtcVideoCanvas *canvas = [[DingRtcVideoCanvas alloc] init]; canvas.renderMode = DingRtcRenderModeAuto; canvas.view = view; /* 預覽窗口view,iOS為UIView對象,Mac為NSView對象*/ canvas.mirrorMode = DingRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled; [self.engine setLocalViewConfig:canvas forTrack:DingRtcVideoTrackCamera]; [self.engine startPreview];
說明DingRtcRenderMode提供四種渲染模式:
DingRtcRenderModeAuto(推薦):自動。
DingRtcRenderModeStretch:拉伸填充視圖,不保持視頻比例。
DingRtcRenderModeFill:在保持視頻寬高比的同時縮放,填充黑邊。
DingRtcRenderModeCrop:在保持視頻寬高比的同時縮放,并裁剪以適合視圖。
DingRtcRenderMirrorMode在本地或遠端均可設置鏡像模式,并提供三種鏡像模式:
DingRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled:只有前置攝像頭預覽鏡像,其余不鏡像。
DingRtcRenderMirrorModeAllEnabled:全部鏡像。
DingRtcRenderMirrorModeAllDisabled:全部不鏡像。
可選:取消本地預覽。
[self.engine stopPreview];
設置發布與訂閱。
SDK默認入會后不會自動發布音頻流與視頻流,如果您希望自動發布音頻和視頻,可以在入會前通過以下接口設置:
[self.engine publishLocalAudioStream:YES];//默認發布音頻流 [self.engine publishLocalVideoStream:YES];//默認發布視頻流
SDK默認入會后自動訂閱遠端的音頻流與視頻流,如果您不希望自動訂閱音頻與視頻,可以在入會前通過以下接口設置:
[self.engine subscribeAllRemoteAudioStreams:NO];//不訂閱音頻流 [self.engine subscribeAllRemoteVideoStreams:NO];//不訂閱視頻流
加入頻道。
DingRtcAuthInfo *authinfo = [[DingRtcAuthInfo alloc]init]; authinfo.channelId = /* 您的channelId */; authinfo.appId = /* 您的Appid */; authinfo.userId = /* 您的userId */; authinfo.token = /* 您的token */; authinfo.gslbServer = /* 您的gslb地址 */; [self.engine joinChannel:authinfo name:@"userName" onResult:^(NSInteger errCode,NSString * _Nonnull channel,NSInteger elapsed){ // 加入頻道UI處理 }];
參數
描述
appId
應用ID,在控制臺應用管理頁面創建和查看。
channelId
頻道ID。1~64位,由大小寫字母、數字、下劃線(_)、短劃線(-)組成。
userId
用戶ID。1~64位,由大小寫字母、數字、下劃線(_)、短劃線(-)組成。
說明同一個用戶ID在其他端登錄,先入會的端會被后入會的端踢出頻道。
token
頻道鑒權令牌。
gslbServer
服務地址,可為空,默認值為:
"https://gslb.dingrtc.com"
,請您通過業務服務器下發到客戶端SDK,不建議您將該地址固化在客戶端代碼。發布或取消發布本地流。
發布本地音頻流和視頻流
如果您在入會前沒有設置發布音頻流和視頻流,則入會后不會自動發布本地的音頻流和視頻流,需要調用以下接口進行手動發布:
[self.engine publishLocalAudioStream:YES];//發布音頻流 [self.engine publishLocalVideoStream:YES];//發布視頻流
取消發布本地音頻流和視頻流
如果您需要取消發布本地的音頻流和視頻流,請調用以下接口:
[self.engine publishLocalAudioStream:NO];//取消發布音頻流 [self.engine publishLocalVideoStream:NO];//取消發布視頻流
訂閱或取消訂閱遠程流。
訂閱遠端音頻流和視頻流
如果您在入會前沒有設置訂閱音頻流和視頻流,則入會后會自動訂閱遠端的音頻流和視頻流;如果您在入會前設置取消訂閱音頻流和視頻流,則入會后需要調用以下接口進行手動訂閱:
[self.engine subscribeAllRemoteAudioStreams:YES];//訂閱全部的遠端音頻流 [self.engine subscribeAllRemoteVideoStreams:YES];//訂閱全部的遠端視頻流
訂閱成功后,您可以在onRemoteTrackAvailableNotify回調里渲染遠端的視頻畫面:
- (void)onRemoteTrackAvailableNotify:(NSString *_Nonnull)uid audioTrack:(DingRtcAudioTrack)audioTrack videoTrack:(DingRtcVideoTrack)videoTrack { dispatch_async(dispatch_get_main_queue(), ^{ // UI或者邏輯處理,例如渲染遠端視頻流的操作如下。 if(videoTrack == DingRtcVideoTrackCamera) { // camera track DingRtcVideoCanvas *canvas = [[DingRtcVideoCanvas alloc] init]; canvas.renderMode = /* renderMode */; canvas.view = view;/* 渲染view */ [self.engine setRemoteViewConfig:canvas uid:uid forTrack:DingRtcVideoTrackCamera]; } }); }
取消訂閱遠端音頻流和視頻流
如果您需要取消訂閱遠端的音頻流和視頻流,請調用以下接口:
[self.engine subscribeAllRemoteAudioStreams:NO];//取消訂閱全部的遠端音頻流 [self.engine subscribeAllRemoteVideoStreams:NO];//取消訂閱全部的遠端視頻流
訂閱特定用戶的音頻流和視頻流
當已取消訂閱所有的音頻流和視頻流之后,如果您需要訂閱某個遠端用戶的音頻流和視頻流,可以通過調用以下接口實現(如果需要取消訂閱此遠端用戶的音頻流和視頻流,參數sub傳入NO即可):
[self.engine subscribeRemoteAudioStream:uid sub:YES];//訂閱特定用戶的音頻流 [self.engine subscribeRemoteVideoStream:uid track:DingRtcVideoTrackCamera sub:YES];//訂閱特定用戶的視頻流
訂閱不同規格相機流
如果您需要訂閱流暢規格相機流,請調用以下接口:
[self.engine setRemoteDefaultVideoStreamType:DingRtcVideoStreamTypeLD];
說明 此接口作用于后續入會的遠端用戶,對于調用此接口之前已經入會的遠端用戶,此接口不產生影響。取消訂閱所有遠端用戶音頻流和視頻流
如果您希望當前會議中及后續入會的用戶全部取消訂閱,請調用以下接口:
[self.engine subscribeAllRemoteAudioStreams:NO]; [self.engine subscribeAllRemoteVideoStreams:NO];
離開頻道。
[self.engine leaveChannel];
后續步驟
您可以下載示例代碼,快速運行Demo,實現頻道內和其他人進行實時音視頻通話,詳情請參見運行 Mac Demo。