系列教程:javascript
在上一篇Agora iOS SDK-快速入門中聊了若是配置Agora iOS SDK,這一篇將看下如何使用Agora如何進行聊天。html
Agora封裝了視頻聊天的大多數經常使用功能,直接調用Agora API便可直接開始聊天。這篇文章的主要目標是結合文檔完成一對一視頻聊天的Demo。java
AgoraRtcEngineKit
是Agora SDK的入口,經過它就能夠完成聊天的基本設置。好比設置遠程視頻、本地視頻的配置、聲音控制、以及設置攝像頭等。ios
首先,新建一個ChatViewController
用來實現聊天功能,在ChatViewController
中聲明一個AgoraRtcEngineKit的變量:git
var agoraKit : AgoraRtcEngineKit!複製代碼
初始化該變量須要實現委託:AgoraRtcEngineDelegate
,它是AgoraRtcEngineKit的回調,在出現錯誤、離開頻道....等狀況出現的時候能夠在該回調中獲得通知。github
它的其中一個方法- (void)rtcEngine:(AgoraRtcEngineKit *)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed;
的意思是在第一個用戶準備好視頻通訊的狀況下會觸發該方法,這個時候就能夠配置該用戶的顯示界面了,AgoraRtcEngineDelegate
實現:swift
extension ChatViewController:AgoraRtcEngineDelegate{
func rtcEngine(_ engine: AgoraRtcEngineKit!, firstRemoteVideoDecodedOfUid uid: UInt, size: CGSize, elapsed: Int) {
}
func rtcEngine(_ engine: AgoraRtcEngineKit!, didLeaveChannelWith stats: AgoraRtcStats!) {
}
}複製代碼
這裏使用了extension
擴展了ChatViewController用來實現AgoraRtcEngineDelegate
。api
再實現了委託以後就能夠實例化agoraKit了,實例化方法:安全
agoraKit=AgoraRtcEngineKit.sharedEngine(withAppId: AgoraSetting.AgoraAppId, delegate: self)異步
這樣就完成了AgoraRtcEngineKit的初始化,初始化完成以後還須要設置視頻顯示,下面就先從遠程視頻的設置開始。
遠程視頻的設置也比較簡單,在AgoraRtcEngineDelegate
中的方法func rtcEngine(_ engine: AgoraRtcEngineKit!, firstRemoteVideoDecodedOfUid uid: UInt, size: CGSize, elapsed: Int)
被調用的時候,就能夠開啓該遠程視頻的顯示,實現該方式就能夠拿到該用戶的信息。
在設置遠程用戶視頻以前,還須要新建一個UIView用來顯示遠程視頻,遠程視頻的顯示會在該UIView內完成,新建一個UIView用來接收遠程視頻:
@IBOutlet weak var remoteView: UIView!
還須要一個VideoCanvas的實例,在該實例中配置遠程視頻的顯示方式。
let videoCanvas = AgoraRtcVideoCanvas()
videoCanvas須要設置下下面幾個參數:
配置好videoCanvas以後,就能夠在agoraKit中開啓遠程視頻了:
agoraKit.setupRemoteVideo(videoCanvas)
使用Agora設置遠程視頻的播放就是如此簡單,不用再關心底層的實現,減小了應用開發者在底層上的開發時間。固然本地視頻的設置也是如此的簡單。
對於本地視頻的配置,首先須要設置視頻參數,包括分辨率、幀率、碼率等,當設置的分辨率不被攝像頭支持的時候,SDK會自動找到一個合適的分辨率來適配攝像頭,但顯示的仍然是指定的分辨率。
設置本地視頻配置的方法:
setVideoProfile:(AgoraRtcVideoProfile)profile
swapWidthAndHeight:(BOOL)swapWidthAndHeight;
第一參數包含了分辨率、幀率、碼率的配置,在SDK中已經有已經設置好的參數,在demo中使用的是._VideoProfile_360P
,第二個參數表示是否交換寬和高,用來適應橫屏和豎屏的顯示。默認爲false。
設置本地視頻配置:
agoraKit.setVideoProfile(._VideoProfile_360P, swapWidthAndHeight: false)
和遠程視頻的設置同樣,首先須要一個view用來接收本地視頻的顯示,定義一個本地顯示本地視頻的view:
@IBOutlet weak var localVideo: UIView!
本地視頻的顯示也須要實例化一個AgoraRtcVideoCanvas
,還要配置AgoraRtcVideoCanvas的三個參數,而後把AgoraRtcVideoCanvas
設置給agoraKit,完整代碼以下:
func setupLocalVideo(){
agoraKit.setVideoProfile(._VideoProfile_360P, swapWidthAndHeight: false)
let videoCanvas=AgoraRtcVideoCanvas()
videoCanvas.uid=0
videoCanvas.view=localVideo
videoCanvas.renderMode = .render_Adaptive
agoraKit.setupLocalVideo(videoCanvas)
}複製代碼
上面完成了本地視頻和遠程視頻的設置和顯示,在須要和人一塊兒聊天以前,還要兩我的都加入到一個頻道中。
頻道
:在同一個頻道內的用戶能夠互相通話,若是多個用戶加入了一個頻道就能夠羣聊,一個用戶只能加入一個頻道。切換頻道必須從當前頻道中退出。
先看加入頻道的代碼:
func joinChannel(){
agoraKit.joinChannel(byKey: nil, channelName: "demo", info: nil, uid: 0){[weak self](sid,uid,elapsed)->Void in
if let weakSelf = self{
weakSelf.agoraKit.setEnableSpeakerphone(true)
UIApplication.shared.isIdleTimerDisabled = true
}
}複製代碼
下面簡單說下各個參數的含義:
經過agoraKit.leaveChannel()
能夠離開頻道,只有離開一個頻道才能進入下一個頻道,leaveChannel是異步操做,調用時並無真正的退出頻道,在真正的退出頻道後,會觸發didLeaveChannelWithStats回調。
在一個頻道中的用戶就能夠正式的開始聊天了。
在聊天過程當中特別是會議聊天時,有時須要禁止本身的聲音,防止打擾別人說話,Agora SDK也提供了對於聲音和攝像頭的控制。
聊天中對於聲音的控制有不少種方式,下面介紹下幾種比較經常使用的方式:
muteLocalAudioStream
能夠設置本地聲音的開關,使用方式也比較簡單,經過一個Button控制本地聲音的開啓:
@IBAction func mute(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
agoraKit.muteLocalAudioStream(sender.isSelected)
}複製代碼
而muteAllRemoteAudioStreams
的做用是禁止全部的遠程視頻的聲音,使用方式和muteLocalAudioStream
同樣。
若是想禁止某一個用戶的聲音能夠可使用方法:
-(int)muteRemoteAudioStream:(NSUInteger)uid muted:(BOOL)muted;複製代碼
其中uid是用戶的惟一標識,利用uid就能夠針對某一個用戶開啓/關閉該用戶的聲音。
經過方法:
-(int)setEnableSpeakerphone:(BOOL)enableSpeaker;複製代碼
能夠設置使用揚聲器或聽筒,其中YES是輸出聲音到揚聲器,NO是使用聽筒。
在多人聊天的過程當中,咱們還須要知道是誰在說話,這個時候就須要設置監聽用戶的聲音狀態,經過方法:
-(int)enableAudioVolumeIndication:(NSInteger)interval smooth:(NSInteger)smooth;複製代碼
就能夠監聽遠程用戶的聲音狀態,設置該方法以後能夠在AgoraRtcEngineDelegate
中的reportAudioVolumeIndicationOfSpeakers中收到誰在說話以及他說話的音量。
上面是針對聲音的方法,更多的設置能夠參考官方的文檔,下面再看下針對攝像頭的方法
對於攝像頭的控制方法也有不少的方式,下面以幾個比較經常使用方法爲主簡單介紹下。
在demo中的頻道列表中使用的背景是本地視頻的預覽,本地預覽相關的有兩個方法:
startPreview(開啓預覽)
stopPreview(中止預覽)
注意開啓視頻預覽以前必須先設置本地的視頻顯示屬性以及預覽的UIView,詳細的設置能夠參考demo。
視頻聊天中經常須要對前置/後置攝像頭進行切換,切換攝像頭的代碼爲:
@IBAction func switchCamera(_ sender: UIButton) {
agoraKit.switchCamera()
}複製代碼
使用該方法,SDK會判斷當前攝像頭的狀態,並對攝像頭進行切換。
和聲音開關相似,也能夠經過API暫停發送視頻,暫定發送本地視頻流的方法:
-(int)muteLocalVideoStream:(BOOL)mute;複製代碼
暫停全部遠程視頻流的方法:
-(int)muteAllRemoteVideoStreams:(BOOL)mute;複製代碼
暫停某一個遠程用戶視頻的方法:
-(int)muteRemoteVideoStream:(NSUInteger)uid mute:(BOOL)mute;複製代碼
經過該例子能夠實現一對一的視頻聊天,下一篇文章將介紹下若是進行多人視頻聊天。
源代碼地址:github.com/jjz/agora-s…
參考文檔:docs.agora.io/cn/user_gui…