这次体验的是声网下的"语音通话/语音直播"模块,如此实用普及的功能使用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跨平台,这对于热爱跨平台技术的我来说无比兴奋,有机会一定再实践一下。