试用声网Agora语音SDK感受 | 掘金技术征文

2,236 阅读3分钟
这次体验的是声网下的"语音通话/语音直播"模块,如此实用普及的功能使用Agora SDK竟感觉如此的简单丝滑,我们先去下载官方的demo看一看


官方demo

1.进入官网,先注册一个声网账号,创建项目,然后获得一个appid



2.在sdk界面选择我们要是使用的sdk


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跨平台,这对于热爱跨平台技术的我来说无比兴奋,有机会一定再实践一下。