欢迎来到 安卓源码空间!
安卓源码空间

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();

}


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


copyright@ 2020-2028  安卓源码空间网版权所有   

备案号:豫ICP备2023034476号-1号