转载请注明出处
作者:JYangkai
出处:简书
地址: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<SurfaceView>去存储对应的uid和SurfaceView
离开房间
当我们想结束通话后,我们就要离开房间
/**
* 离开房间
*/
public void leaveChannel() {
mRtcEngine.leaveChannel();
}
这样我们就完成了通话基本流程,后面我们会讲解具体怎么在项目中使用。
网友评论