close

上一篇我們已經將 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教學筆記

 

 

 

 

 

 

 

 

 

 


arrow
arrow

    顏澤偉 發表在 痞客邦 留言(0) 人氣()