Android 集成声网Agora 音视频实时通话(二)

转载请注明出处
作者: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去存储对应的uid和SurfaceView

离开房间

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

/**
 * 离开房间
 */
public void leaveChannel() {
    mRtcEngine.leaveChannel();
}

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

你可能感兴趣的:(Android 集成声网Agora 音视频实时通话(二))