對於 Web、iOS、Android 開發者來講,React Native 給跨平臺開發工作帶來了很大的幫助。僅用 JavaScript 就可以建立執行於移動端的應用。同時,你也可以將 React Native 程式碼與 Native 程式碼結合,不論你是用 Objective C、Java 還是用 Swift 開發。
有一位 Agora 開發者,同時也是 React Native 愛好者(Github:syanbo)採用 Agora SDK 寫了一個 React Native 封裝模組,可實現直播、多人語音或視訊會議,當然,同時支援 Android、iOS 平臺。
他的 Github 在這裡:github.com/syanbo/reac…
當他在 Agora 的交流群裡發出來時,我們也是稍感意外。感謝開發者們對我們的支援。如果你也默默地做了什麼新鮮嘗試,並用到了 Agora SDK,歡迎私信告訴我們,我們也很樂意幫你分享給更多開發者。
另一方面,現在聲網Agora SDK 已經支援 React Native,能幫助你利用 React Native 為應用增加實時音視訊功能。我們之前也開源了一個 Demo,實現了基本的視訊通話功能,與 @syanbo 的有些差別。為了方便大家開發,我們簡單介紹一下,做一個 React Native 實時視訊通話應用的介面呼叫邏輯,如果你也正在做 React Native 開發,會對你有幫助:
開發環境
首先需要你註冊一個 Agora 開發者賬號,並準備好 Node.js 6.9.1+開發環境。
Android 開發者還需要:
Android Studio 2.0+
編輯器,如 Sublime Text
Android 裝置(不支援模擬器)
iOS 開發者則需要:
Xcode 8.0+
iPhone 或 iPad(不支援模擬器)
快速開始
下面我們來為應用建立 Agora React Native wrapper
註冊賬號,並獲取一個 App ID
在 Agora.io 註冊一個開發者賬號,每個賬號每個月有10000分鐘的免費通話,可以滿足大家日常開發與測試
進入 Dashboard ,選擇左側邊欄的
專案->專案列表
複製頁面中的 App ID
更新並執行 Sample App
開啟
App.js
檔案。在render()
中,將裡面的 App ID 更新為你剛剛複製的 App ID。
render() {
AgoraRtcEngine.createEngine('YOUR APP ID');
}
複製程式碼
使用終端或Command Prompt,
cd
進入你的專案目錄,然後輸入npm install
,生成專案檔案。新增適當的 SDK,連線裝置,然後按如下所述步驟執行專案:
Android:
下載 Agora Video SDK。
解壓縮下載的 SDK 包並將
libs/agora-rtc-sdk.jar
檔案複製到該android/app/libs
資料夾中。然後將
libs/arm64-v8a/x86/armeabi-v7a
資料夾複製到該android/app/src/main/jniLibs
資料夾中。在 Android Studio 中,開啟 Android 專案資料夾並連線 Android 裝置。
同步並執行專案。
iOS:
下載 Agora Video SDK。
解壓縮下載的 SDK 包並將
libs/AograRtcEngineKit.framework
檔案複製到該ios/RNapi
資料夾中。開啟
RNapi.xcodeproj
並連線iPhone或iPad裝置。應用有效的配置檔案並執行該專案。
為已有 React Native 應用新增視訊通話
以下要介紹的介面主要實現:
渲染檢視
加入頻道
離開頻道
切換攝像頭
切換 Audio Route
新增事件監聽器
檔案中的App
類擴充套件App.js
包含React Native Android/iOS 示例應用程式的相關 Agora SDK 程式碼。
export default class App extends Component {
...
}
複製程式碼
渲染檢視
該render()
方法在其return
中生成 UI 元素。在return
之前的程式碼中,根據需要來配置 Agora engine。
render(){
...
return(
...
);
}
複製程式碼
在渲染之前,我們需要先建立 RTC Engine。在如下程式碼中填寫你的 App ID。
AgoraRtcEngine.createEngine('YOUR APP ID');
複製程式碼
建立完成之後,啟用視訊與音訊
AgoraRtcEngine.enableVideo();
AgoraRtcEngine.enableAudio();
複製程式碼
設定視訊和頻道配置檔案。如下述程式碼中,視訊被設定為寬度360、高度640,幀率為15,位元率為300:
AgoraRtcEngine.setVideoProfileDetail(360,640,15,300);
AgoraRtcEngine.setChannelProfile(AgoraRtcEngine.AgoraChannelProfileCommunication);
複製程式碼
該return()
方法為 Sample App 顯示檢視。AgoraRendererView
是用來顯示音訊/視訊的 UI 元素。示例應用程式建立了兩個AgoraRendererView
元素,即_localView
和_remoteView
。
return(
<View style = {styles.container}>
<AgoraRendererView
ref = {component => this._localView = component}
style = {{width:360,height:240}}
/>
<AgoraRendererView
ref = {component => this ._remoteView = component}
style = {{width:360,height:240}}
/>
...
</ View>
);
複製程式碼
然後在return()
新增UI按鈕元素讓使用者能夠加入頻道、離開頻道、切換攝像頭、切換音訊線路。詳細程式碼請見文末連結。
加入頻道
使用_joinChannel()
方法將使用者加入特定頻道。
_joinChannel(){
...
}
複製程式碼
在_joinChannel()
方法中,以下方法執行其他任務:
AgoraRtcEngine.setLocalVideoView()
設定本地視訊 view。
Sample App 將本地視訊 view 應用於在render()
中建立的_localView
UI 元素。
AgoraRtcEngine.setLocalVideoView(this._localView,AgoraRtcEngine.AgoraVideoRenderModeFit);
複製程式碼
AgoraRtcEngine.setVideoProfile()
將視訊配置檔案設定為預設的 Agora 配置檔案,且不更改 orientation 屬性。
AgoraRtcEngine.setVideoProfile(AgoraRtcEngine.AgoraVideoProfileDEFAULT,false);
複製程式碼
AgoraRtcEngine.startPreview()
啟動 Agora SDK 預覽,並讓AgoraRtcEngine.joinChannel()
加入頻道。
AgoraRtcEngine.startPreview();
AgoraRtcEngine.joinChannel(null,“rnchannel01”,“React Native for Agora RTC SDK”,0);
複製程式碼
上述程式碼中joinChannel
的引數設定是這樣的:
token為null。加入通道後,Agora Engine將設定token為新值。
頻道名為
rnchannel01
info
記錄了關於頻道的資訊“React Native for Agora RTC SDK”uid
為0,這是通用使用者ID值
離開頻道
Sample App 應用了_leaveChannel()
,會呼叫 AgoraRtcEngine.stopPreview()
和AgoraRtcEngine.leaveChannel()
。需要注意的是,_leaveChannel()
不會自動停止預覽,因此需要先呼叫stopPreview()
。
_leaveChannel(){
AgoraRtcEngine.stopPreview();
AgoraRtcEngine.leaveChannel();
}
複製程式碼
切換相機
Sample App 中,我們通過AgoraRtcEngine.switchCamera()
切換攝像頭。
switchCamera(){
AgoraRtcEngine.switchCamera();
}
複製程式碼
切換 Audio Route
呼叫AgoraRtcEngine.setEnableSpeakerphone()
開啟或關閉揚聲器。這裡需要注意由於isSpeakerPhone
用於全域性檢測使用者是否處於揚聲器模式,所以在setEnableSpeakerphone
後必須更改。
_switchAudio(){
AgoraRtcEngine.setEnableSpeakerphone(isSpeakerPhone);
isSpeakerPhone =!isSpeakerPhone;
}
複製程式碼
新增事件監聽器
通過agoraKitEmitter.addListener()
新增remoteDidJoineChannelNoti
事件偵聽器來檢測遠端使用者加入頻道的動作。
事件監聽器的名稱是RemoteDidJoinedChannel
。觸發時,它會執行以下操作:
將遠端視訊檢視新增到
_remoteView
為使用者應用遠端視訊檢視,
notify.uid
保證視訊內容全部顯示
remoteDidJoineChannelNoti = agoraKitEmitter.addListener(
'RemoteDidJoinedChannel',
(notify)=> {
AgoraRtcEngine.setRemoteVideoView(this._remoteView,notify.uid,AgoraRtcEngine.AgoraVideoRenderModeFit);
}
);
複製程式碼
在 React Native 檢視移除後,呼叫remoteDidJoineChannelNoti.remove()
來移除事件偵聽器。
以上程式碼詳見 Github AgoraIO