上一篇我們已經將 Agora 的環境設定好了
還沒看過的同學可以點擊下方連結
Android Agora 介紹、入門教學、實作範例 Real-Time 直播、視訊、通話、互動遊戲 ( 一 ) 』Willy's Fish教學筆記
再來就是實作功能的部份囉
1、Initialize Agora Engine
mRtcEngine = RtcEngine.create(getBaseContext()
, [ your app id ]
, mRtcEventHandler)
這裡需要帶入 APP ID
只有相同的 APP ID 才能加入相同的 Channel 進行連線
而 mRtcEventHandler 是最重要的
他是實作 IRtcEngineEventHandler abstract class
裡頭有超多 method 幾乎所有的 event 都可以在裡面找到
比較常用的像是
public void onUserJoined(int uid, int elapsed)
public void onUserMuteVideo(int uid, boolean muted)
public void onJoinChannelSuccess(String channel, int uid, int elapsed)
...等等。 我們有需要的話再 override 就好
2、Set Channel Profile
mRtcEngine.setChannelProfile(
Constants.CHANNEL_PROFILE_COMMUNICATION)
Agora 會根據我們提供的 Channel Profile 去優化運行的效能
In this case 我們要做的是 1 : 1 視訊
所以使用
CHANNEL_PROFILE_COMMUNICATION
若是要做直播類的,也就是影像廣播
可以使用
CHANNEL_PROFILE_LIVE_BROADCASTING
3、Join a Channel
mRtcEngine.enableWebSdkInteroperability(true);
mRtcEngine.joinChannel(null
, roomId
, "Extra Optional Data"
, AGENT_AGORA_UID);
第一行是因為我們案子的 APP 有機會和 web side 通話而設定的
再來就是 joinChannel 這個主要 method
這裡需要講幾個重要參數
token = 用來識別使用者的身分與權限,若沒有分級的話可以不用
channel id = 就像聊天室、房間號碼一樣的識別值
uid = 每個 User 都該有不同的 uid,一對一比較沒這問題,若是直播的話就會需要不同 uid
4、開啟與設定 Video
mRtcEngine.enableVideo();
// setting for video
mRtcEngine.setVideoEncoderConfiguration(
new VideoEncoderConfiguration(
VideoEncoderConfiguration.VD_320x180,
VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15,
VideoEncoderConfiguration.STANDARD_BITRATE,
VideoEncoderConfiguration.ORIENTATION_MODE
.ORIENTATION_MODE_ADAPTIVE));
若只是要語音通話,其實可以不用開啟 video
這裡我們做視訊,所以需要開啟
再來是 video profile
Agora 用了 VideoEncoderConfiguration 把設定值包起來
主要分成四個部份
1、解析度
2、影格率 ( 畫面順暢度 )
3、比特率 ( 資訊傳輸速率 )
4、螢幕方向適配性
5、設定本地端畫面
// 取得 Agora 的 SurfaceView
SurfaceView surfaceView = RtcEngine.CreateRendererView(
getBaseContext());
// 將此 view 置於畫面頂部
surfaceView.setZOrderMediaOverlay(true);
// 把 view 加進 FrameLayout 做顯示
smallVideoView.addView(surfaceView);
// 設定本地端 video steam 設置進 surfaceView
mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView
, VideoCanvas.RENDER_MODE_HIDDEN
, 0));
視訊通話的時候,除了看到對方之外
也有一個小格子看得到相機對準自己的狀態吧?
這個小格子就是本地端畫面 ( 由 FrameLayout 實作顯示)
是由我們裝置提供的 video streams
註解寫得應該滿詳細的
來說說最後一個設定,是關於影像縮放的條件
VideoCanvas.RENDER_MODE_HIDDEN
等比例填滿螢幕,多的將被截掉
VideoCanvas.RENDER_MODE_FIT
等比例填滿螢幕,長 or 寬不足的地方以黑色填充
6、設定遠端畫面
private void setupRemoteVideo(int uid) {
SurfaceView surfaceView = RtcEngine.CreateRendererView(
getBaseContext());
smallVideoView.addView(surfaceView);
mRtcEngine.setupRemoteVideo(new VideoCanvas(surfaceView
, VideoCanvas.RENDER_MODE_HIDDEN
, uid));
surfaceView.setTag(uid);
}
這裡和本地端很像
只有換成 setupRemoteVideo 而已
但有個問題是 uid 要從何而來呢?
答案就是第一步的 Handler 裡面
我們可以在 onUserJoined event 取得遠端 user 給我們的 uid
7、離開 Channel
mRtcEngine.leaveChannel()
到此是最後一步了
不要用的話就離開吧
養成隨手關燈的好習慣
省資源做環保 XD
發送完畫面了接下來我們會談到如何接收 & 如何螢幕分享
螢幕分享請看這
Android Agora 介紹、入門教學、實作範例 sample --- 螢幕分享 Screen Sharing ( 一 ) 』Willy's Fish教學筆記
畫面接收請看這
Android Agora 介紹、入門教學、實作範例 sample --- 螢幕分享 Screen Sharing --- 接收畫面 ( 二 ) 』Willy's Fish教學筆記
留言列表