AnyRtc --RTC常用API的用法

907 阅读3分钟

前言

这篇文章介绍一下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));
  • enableVideo:启动视频模块,需要在加入频道和通话之中调用。详情

  • setVideoEncoderConfiguration:设置视频编码配置:分辨率、帧率、码率、视频方向等。详情点击

  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();
  • leaveChannel:离开频道。详情

  • destroy:销毁RtcEngine实例。详情

熟悉以上的接口,就差不多掌握了RTC的流程。如果有问题,在AnyRtc官网,资源在线客服。