android分析通话中的音频,Android 集成声网Agora 音视频实时通话(二)

正文

前一章我们已经简单介绍了声网集成的准备工作,今天我们就来正式编写相关代码,我们可以新建一个单例类来将声网的所有方法放入其中,方便我们在需要的时候调用

新建AgoraManager

AgoraManager.java

public class AgoraManager {

private static AgoraManager instance;

private AgoraManager() {

}

public static synchronized AgoraManager getInstance() {

if (null == instance) {

synchronized (AgoraManager.class) {

if (null == instance) {

instance = new AgoraManager();

}

}

}

return instance;

}

}

好了,现在我们可以依次往该类里写方法了,我们先是初始化RtcEngine

初始化RtcEngine

/**

* 初始化

*

* @param context

*/

public void init(Context context) {

try {

mRtcEngine = RtcEngine.create(context, context.getResources().getString(R.string.agora_app_id), mHandler);

mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION);

mSurfaceViews = new SparseArray<>();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 回调接口

*/

private IRtcEngineEventHandler mHandler = new IRtcEngineEventHandler() {

@Override

public void onJoinChannelSuccess(String channel, int uid, int elapsed) {

}

@Override

public void onRejoinChannelSuccess(String channel, int uid, int elapsed) {

}

@Override

public void onLeaveChannel(RtcStats stats) {

}

@Override

public void onUserJoined(int uid, int elapsed) {

}

@Override

public void onUserOffline(int uid, int reason) {

}

};

其中创建RtcEngine需要APP ID,这个id就是你在声网官网创建应用时所得到的APP ID

我们的初始化方法接收一个Context,我们可以选择在需要的时候初始化,不过一般我们是在Application中进行初始化的,我们在自己的Application中加入如下方法并调用

/**

* 初始化Agora

*/

private void initAgora(){

AgoraManager.getInstance().init(this);

}

这样,我们就完成了初始化的工作,接下来是其他一些方法,我们一起来看看如何实现

加入房间

当我们初始化成功后,我们要开始进行视频通话了,那么第一步就要加入房间

/**

* 加入房间

*

* @param channelName

* @param uid

*/

public void joinChannel(String channelName, int uid) {

mRtcEngine.joinChannel(null, channelName, null, uid);

}

设置本地视频

那么加入房间之后我们要进行视频通话,就必须先能看到本地自己的图像

/**

* 设置本地视频

*

* @param context

* @param uid

*/

public void setupLocalVideo(Context context, int uid) {

localUid = uid;

SurfaceView surfaceView = RtcEngine.CreateRendererView(context);

surfaceView.setZOrderMediaOverlay(true);

mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, uid));

mSurfaceViews.put(uid, surfaceView);

}

设置远端视频

此时如果有人也加入了房间,那么就应该给其他人设置图像

/**

* 设置远端视频

*

* @param context

* @param uid

*/

public void setupRemoteVideo(Context context, int uid) {

remoteUid = uid;

SurfaceView surfaceView = RtcEngine.CreateRendererView(context);

mRtcEngine.setupRemoteVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, uid));

mSurfaceViews.put(uid, surfaceView);

}

你可以发现,不管是本地还是远端图像,用的都是SurfaceView,并且我们使用SparseArray去存储对应的uid和SurfaceView

离开房间

当我们想结束通话后,我们就要离开房间

/**

* 离开房间

*/

public void leaveChannel() {

mRtcEngine.leaveChannel();

}

这样我们就完成了通话基本流程,后面我们会讲解具体怎么在项目中使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值