前言
这篇文章介绍一下RTC(视频语音通话)的API接口的用法,主要讲解一下常用API,一些接口,是什么?怎么用?其实官网是已经写的很出清楚了,我这边多写一下代码,以方便参照。
RtcEngine
1.这个是Rtc的引擎类,首先你需要获取一下RtcEngine实例
try {
mRtcEngine = RtcEngine.create(getBaseContext(), APPID, mRtcEventHandler);
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e));
throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));
}
- 上面这行代码上返回了一个RtcEngine实例,用try,catch处理异常。详情
- APPID需要去官网申请一个。
- mRtcEventHandler是IRtcEngineEventHandler实例。后面会讲到
2.设置视频的配置
mRtcEngine.enableVideo(); //开启视频
mRtcEngine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
VideoEncoderConfiguration.VD_640x360,
VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15,
VideoEncoderConfiguration.STANDARD_BITRATE,
VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT));
3.加入频道的配置
mRtcEngine.enableDualStreamMode(true);
mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING);
mRtcEngine.setClientRole(Constants.CLIENT_ROLE_AUDIENCE);
mRtcEngine.joinChannel("", CHANNEL_NAME, "Extra Optional Data",userId);
mRtcEngine.setEnableSpeakerphone(true);
-
enableDualStreamMode:是否开启双流模式、默认为false。详情
-
setChannelProfile:设置频道场景。默认(CHANNEL_PROFILE_COMMUNICATION) 多种场景由你选择
-
setClientRole:设置直播场景下的用户角色。默认观众(CLIENT_ROLE_AUDIENCE)。详情
-
joinChannel:加入频道。参数 详情
-
setEnableSpeakerphone:设置扬声器,默认false(关闭)。详情
到上面一步就已经加他房间了,如果两个设置加入同一个房间,你们就可以通话了。想开视频交流,往下看
4.设置本地视频
TextureView mLocalView = RtcEngine.CreateRendererView(getBaseContext());
arVideoGroup.addView("local",mLocalView,true);
mRtcEngine.setupLocalVideo(new VideoCanvas(mLocalView, Constants.RENDER_MODE_HIDDEN,CHANNEL_NAME, userId,Constants.VIDEO_MIRROR_MODE_AUTO));
mRtcEngine.startPreview();
-
创建一个TextureView来渲染视图。该方法在主线程调用。详情
-
arVideoGroup是自定义View来展示视图的。
-
setupLocalVideo:初始化本地视图。详情
-
startPreview:开启视频预览。详情
完成以上几部就可以展示自己的视图了,别忘记给摄像、麦克风权限。
IRtcEngineEventHandler
IRtcEngineEventHandler是Rtc接口的回调,介绍几个常用的回调,详情
private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
@Override
public void onJoinChannelSuccess(String channel, final String uid, int elapsed) {
//加入频道的回调
}
@Override
public void onUserJoined(String uid, int elapsed) {
//加入当前频道的回调
}
@Override
public void onFirstRemoteVideoDecoded(final String uid, int width, int height, int elapsed) {
//已完成远端视频首帧解码回调
}
@Override
public void onUserOffline(final String uid, int reason) {
//离开当前频道回调
}
@Override
public void onRemoteVideoStateChanged(String uid, int state, int reason, int elapsed) {
//远端用户视频状态发生已变化回调
}
@Override
public void onWarning(int warn) {
//发生警告回调
}
@Override
public void onError(int err) {
//发生错误回调
}
};
上面是获取IRtcEngineEventHandler的实例。和一些回调的重写
1.初始化远端用户视图 setupRemoteVideo
TextureView mRemoteView = RtcEngine.CreateRendererView(getBaseContext());
arVideoGroup.addView(uid,mRemoteView,true);
mRtcEngine.setRemoteVideoStreamType(uid,0);
mRtcEngine.setupRemoteVideo(new VideoCanvas(mRemoteView, Constants.RENDER_MODE_HIDDEN,CHANNEL_NAME, uid,Constants.VIDEO_MIRROR_MODE_DISABLED));
-
创建一个TextureView来渲染视图。该方法在主线程调用。详情
-
arVideoGroup是自定义View来展示视图的。
-
setRemoteVideoStreamType:设置订阅的视频流类型。详情
-
setupRemoteVideo:初始化远端用户视图。详情
-
VideoCanvas:远端视图属性。详情
2.完成解码第一帧展示远端视图
@Override
public void onFirstRemoteVideoDecoded(final String uid, int width, int height, int elapsed) {
runOnUiThread(new Runnable() {
@Override
public void run() {
setupRemoteVideo(uid);
}
});
}
- 在完成解码第一帧时,把远端视图展示出来。
这个时候你就可以和你的小伙伴开视频通讯了。
3.最后离开频道或者退出移除视图,并且调用离开频道并销毁。
mRtcEngine.leaveChannel();
RtcEngine.destroy();
熟悉以上的接口,就差不多掌握了RTC的流程。如果有问题,在AnyRtc官网,资源在线客服。