這次體驗的是聲網下的"語音通話/語音直播"模組,如此實用普及的功能使用Agora SDK竟感覺如此的簡單絲滑,我們先去下載官方的demo看一看
官方demo
3.下載解壓後兩個資料夾(libs和samples),我們在androidstudio中直接import project samples專案(我的as版本是3.1.3),毫無壓力直接build成功,只是會提示你輸入appid,用我們剛才官網得到的apid“c v”直接過來,搞定
4.官方Demo非常簡單,依賴了lib資料夾裡面的一些庫和os,專案中就一個VoiceChatViewActivity類,裡面的程式碼也只有不到200行,總結起來其實就幾個重點
初始化程式碼:很簡單,就是設定一下我們的appid
private void initializeAgoraEngine() {
try {
mRtcEngine = RtcEngine.create(getBaseContext(), getString(R.string.agora_app_id), mRtcEventHandler);
} catch (Exception e) {
Log.e(LOG_TAG, Log.getStackTraceString(e));
throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));
}
}複製程式碼
加入頻道:注意,加入頻道前需要先關閉之前的頻道
private void joinChannel() {
mRtcEngine.joinChannel(null, "demoChannel1", "Extra Optional Data", 0); // if you do not specify the uid, Agora will assign one.
}複製程式碼
離開頻道:在onDestory中也需要呼叫
private void leaveChannel() {
mRtcEngine.leaveChannel();
}複製程式碼
我們在官方demo中新增一個按鈕,點選加入一個頻道,後面有用
mRtcEngine.leaveChannel();
mRtcEngine.joinChannel(null, "voiceDemoChannel1", "Extra Optional Data", 0);複製程式碼
基本流程就是這樣,可以看出是灰常的簡單
下面我們自己實現一下這個Demo
1.新建專案,新增sdk和so檔案結構如圖(依賴來自sdk的lib資料夾中)
2.在app的build.gradle中新增
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}}複製程式碼
3.搞定,現在實現以下程式碼,有使用者進入頻道時螢幕提醒一下
private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
// Tutorial Step 1
//使用者離開房間
@Override
public void onUserOffline(final int uid, final int reason) {
runOnUiThread(new Runnable() {
@Override
public void run() {
onLeaveRoom(uid, reason);
}
});
}
//使用者加入了房間
@Override
public void onUserJoined(final int uid, final int elapsed) {
super.onUserJoined(uid, elapsed);
runOnUiThread(new Runnable() {
@Override
public void run() {
onIntoRoom(uid, elapsed);
}
});
}};
/** * 1.初始化聲網 **/private void initializeAgoraEngine() {
try {
mRtcEngine = RtcEngine.create(getBaseContext(), "b4dfdd47b81a4d4eadee22c9a479e193", mRtcEventHandler);
} catch (Exception e) {
Log.e(LOG_TAG, Log.getStackTraceString(e));
throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));
}}
/** * 2.加入頻道 **/
private void joinChannel() {
mRtcEngine.joinChannel(null, "voiceDemoChannel1", "Extra Optional Data", 0); // if you do not specify the uid, we will generate the uid for you
}
/** * 使用者離開房間 **/
private void onLeaveRoom(final int uid, int reason) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
tvMessaghe.setText(tvMessaghe.getText() + "\n使用者" + uid + "離開房間 " +getNowTime());
} });
}
/** * 使用者進入房間 **/
private void onIntoRoom(final int uid, int reason) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
tvMessaghe.setText(tvMessaghe.getText() + "\n使用者" + uid + "進入房間 "+getNowTime());
}
});
}
/** * 3.退出房間,在關閉程式時需要呼叫 **/
private void leaveChannel() {
mRtcEngine.leaveChannel();
}複製程式碼
4.最終效果,加入房間後就可以1v1通話,由於錄製不了聲音,能看到效果大概就是這樣了
5.它的功能還有很多,比如變聲通話質量,混音等等,這裡就不一一例舉了,感興趣的童靴可以去它的官網看一看,都很簡單
總結:整體感覺就是,簡單容易上手,API簡潔,真的是幾行程式碼實現一個1v1通話,快速開發首選,另外聽說小米和陌陌都在用它,好像它還支援flutter跨平臺,這對於熱愛跨平臺技術的我來說無比興奮,有機會一定再實踐一下。