






dependencies {// RTC Engine 精简版 SDK, 包含 RTC Engine 和直播播放两项功能, 体积小巧implementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'// RTC Engine 全功能版 SDK, 另含直播、短视频、点播等多项功能, 体积略大// implementation 'com.tencent.liteav:LiteAVSDK_Professional:latest.release'// 美颜 AR SDK 例如:S1-07套餐如下implementation 'com.tencent.mediacloud:TencentEffect_S1-07:latest.release'}
defaultConfig {ndk {abiFilters "armeabi-v7a", "arm64-v8a"}}
../assets/MotionRes../assets/lut<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera.autofocus" />
android:hardwareAccelerated="false",关闭硬件加速之后,会导致对方的视频流无法渲染。targetSdkVersion 为 31 或者目标设备涉及到 Android 12 及更高系统版本,官方要求需要在代码中动态申请 android.permission.BLUETOOTH_CONNECT 权限,以正常使用蓝牙功能,具体信息请参见 蓝牙权限。-keep class com.tencent.** { *; }-keep class org.light.** { *;}-keep class org.libpag.** { *;}-keep class org.extra.** { *;}-keep class com.gyailib.**{ *;}-keep class androidx.exifinterface.** { *;}

import com.tencent.xmagic.telicense.TELicenseCheck;// 如果仅仅是为了触发下载或更新 License,而不关心鉴权结果,则第4个参数传入 nullTELicenseCheck.getInstance().setTELicense(context, URL, KEY, new TELicenseCheck.TELicenseCheckListener() {@Overridepublic void onLicenseCheckFinish(int errorCode, String msg) {// 注意:此回调不一定在调用线程if (errorCode == TELicenseCheck.ERROR_OK) {// 鉴权成功} else {// 鉴权失败}}});
// 创建 RTC Engine SDK 实例(单例模式)TRTCCloud mTRTCCloud = TRTCCloud.sharedInstance(context);// 设置事件监听器mTRTCCloud.addListener(trtcSdkListener);// 来自 SDK 的各类事件通知(比如:错误码,警告码,音视频状态参数等)private TRTCCloudListener trtcSdkListener = new TRTCCloudListener() {@Overridepublic void onError(int errCode, String errMsg, Bundle extraInfo) {Log.d(TAG, errCode + errMsg);}@Overridepublic void onWarning(int warningCode, String warningMsg, Bundle extraInfo) {Log.d(TAG, warningCode + warningMsg);}};// 移除事件监听器mTRTCCloud.removeListener(trtcSdkListener);// 销毁 RTC Engine SDK 实例(单例模式)TRTCCloud.destroySharedInstance();
import com.tencent.xmagic.XmagicApi;// 初始化美颜 SDKXmagicApi mXmagicApi = new XmagicApi(context, XmagicResParser.getResPath(), new XmagicApi.OnXmagicPropertyErrorListener());// 开发调试时,可以把日志级别设置为DEBUG,发布包请设置为 WARN,否则会影响性能mXmagicApi.setXmagicLogLevel(Log.WARN);// 释放美颜 SDK,此方法需要在 GL 线程中调用mXmagicApi.onDestroy();
TXCloudVideoView 类型,因此您需要先在布局文件中定义视图渲染控件。<com.tencent.rtmp.ui.TXCloudVideoViewandroid:id="@+id/live_cloud_view_main"android:layout_width="match_parent"android:layout_height="match_parent" />
// 获取用于展示主播本地画面预览的视频渲染控件TXCloudVideoView mTxcvvAnchorPreviewView = findViewById(R.id.live_cloud_view_main);// 设置视频编码参数,决定远端用户看到的画面质量TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540;encParam.videoFps = 15;encParam.videoBitrate = 1300;encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;mTRTCCloud.setVideoEncoderParam(encParam);// boolean mIsFrontCamera 可指定使用前置/后置摄像头进行视频采集mTRTCCloud.startLocalPreview(mIsFrontCamera, mTxcvvAnchorPreviewView);// 这里可指定声音音质,从低到高分别为 SPEECH/DEFAULT/MUSICmTRTCCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT);
enterRoom 之前调用以上接口,SDK 只会开启摄像头预览和音频采集,并一直等到您调用 enterRoom 之后才开始推流。enterRoom 之后调用以上接口,SDK 会开启摄像头预览和音频采集,并自动开始推流。TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; // 画面镜像模式params.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // 画面填充模式params.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 画面旋转角度// 设置本地画面的渲染参数mTRTCCloud.setLocalRenderParams(params);// 设置编码器输出的画面镜像模式mTRTCCloud.setVideoEncoderMirror(boolean mirror);// 设置视频编码器输出的画面方向mTRTCCloud.setVideoEncoderRotation(int rotation);
public void enterRoomByAnchor(String roomId, String userId) {TRTCCloudDef.TRTCParams params = new TRTCCloudDef.TRTCParams();// 以字符串房间号为例params.strRoomId = roomId;params.userId = userId;// 从业务后台获取到的 UserSigparams.userSig = getUserSig(userId);// 替换成您的 SDKAppIDparams.sdkAppId = SDKAppID;// 指定主播角色params.role = TRTCCloudDef.TRTCRoleAnchor;// 以互动直播场景进房mTRTCCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE);}// 进房结果事件回调@Overridepublic void onEnterRoom(long result) {if (result > 0) {// result 代表加入房间所消耗的时间(毫秒)Log.d(TAG, "Enter room succeed");} else {// result 代表进房失败的错误码Log.d(TAG, "Enter room failed");}}
roomId 和字符串类型 strRoomId,两种类型的房间不互通,建议统一房间号类型。TRTC_APP_SCENE_LIVE。public void enterRoomByAudience(String roomId, String userId) {TRTCCloudDef.TRTCParams params = new TRTCCloudDef.TRTCParams();// 以字符串房间号为例params.strRoomId = roomId;params.userId = userId;// 从业务后台获取到的 UserSigparams.userSig = getUserSig(userId);// 替换成您的 SDKAppIDparams.sdkAppId = SDKAppID;// 指定观众角色params.role = TRTCCloudDef.TRTCRoleAudience;// 以互动直播场景进房mTRTCCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE);}// 进房结果事件回调@Overridepublic void onEnterRoom(long result) {if (result > 0) {// result 代表加入房间所消耗的时间(毫秒)Log.d(TAG, "Enter room succeed");} else {// result 代表进房失败的错误码Log.d(TAG, "Enter room failed");}}
@Overridepublic void onUserAudioAvailable(String userId, boolean available) {// 某远端用户发布/取消了自己的音频// 在自动订阅模式下,您无需做任何操作,SDK 会自动播放远端用户音频}@Overridepublic void onUserVideoAvailable(String userId, boolean available) {// 某远端用户发布/取消了主路视频画面if (available) {// 订阅远端用户的视频流,并绑定视频渲染控件mTRTCCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, TXCloudVideoView view);} else {// 停止订阅远端用户的视频流,并释放渲染控件mTRTCCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);}}
TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; // 画面镜像模式params.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // 画面填充模式params.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 画面旋转角度// 设置远端画面的渲染模式mTRTCCloud.setRemoteRenderParams(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, params)
// 切换为主播角色mTRTCCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor);// 切换角色事件回调@Overridepublic void onSwitchRole(int errCode, String errMsg) {if (errCode == TXLiteAVCode.ERR_NULL) {// 切换角色成功}}
// 获取用于展示连麦观众本地画面预览的视频渲染控件TXCloudVideoView mTxcvvAudiencePreviewView = findViewById(R.id.live_cloud_view_sub);// 设置视频编码参数,决定远端用户看到的画面质量TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_480_270;encParam.videoFps = 15;encParam.videoBitrate = 550;encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;mTRTCCloud.setVideoEncoderParam(encParam);// boolean mIsFrontCamera 可指定使用前置/后置摄像头进行视频采集mTRTCCloud.startLocalPreview(mIsFrontCamera, mTxcvvAudiencePreviewView);// 这里可指定声音音质,从低到高分别为 SPEECH/DEFAULT/MUSICmTRTCCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT);
// 切换为观众角色mTRTCCloud.switchRole(TRTCCloudDef.TRTCRoleAudience);// 切换角色事件回调@Overridepublic void onSwitchRole(int errCode, String errMsg) {if (errCode == TXLiteAVCode.ERR_NULL) {// 停止摄像头采集推流mTRTCCloud.stopLocalPreview();// 停止麦克风采集推流mTRTCCloud.stopLocalAudio();}}
public void exitRoom() {mTRTCCloud.stopLocalAudio();mTRTCCloud.stopLocalPreview();mTRTCCloud.exitRoom();}// 离开房间事件回调@Overridepublic void onExitRoom(int reason) {if (reason == 0) {Log.d(TAG, "主动调用 exitRoom 退出房间");} else if (reason == 1) {Log.d(TAG, "被服务器踢出当前房间");} else if (reason == 2) {Log.d(TAG, "当前房间整个被解散");}}
onExitRoom 回调通知到您。enterRoom 或者切换到其他的音视频 SDK,请等待 onExitRoom 回调到来后再执行相关操作。否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。DismissRoom(区分数字房间 ID 和字符串房间 ID),您可以调用此接口把房间所有用户从房间移出,并解散房间。exitRoom 接口,将房间内的所有主播和听众完成退房,退房后,根据 RTC Engine 房间生命周期规则,房间将会自动解散,详情请参见 退出房间。public void connectOtherRoom(String roomId, String userId) {try {JSONObject jsonObj = new JSONObject();// 数字房间号为 roomIdjsonObj.put("strRoomId", roomId);jsonObj.put("userId", userId);mTRTCCloud.ConnectOtherRoom(jsonObj.toString());} catch (JSONException e) {e.printStackTrace();}}// 请求跨房连麦的结果回调@Overridepublic void onConnectOtherRoom(String userId, int errCode, String errMsg) {// 要跨房通话的另一个房间中的主播的用户 ID// 错误码,ERR_NULL 代表请求成功// 错误信息}
@Overridepublic void onUserAudioAvailable(String userId, boolean available) {// 某远端用户发布/取消了自己的音频// 在自动订阅模式下,您无需做任何操作,SDK 会自动播放远端用户音频}@Overridepublic void onUserVideoAvailable(String userId, boolean available) {// 某远端用户发布/取消了主路视频画面if (available) {// 订阅远端用户的视频流,并绑定视频渲染控件mTRTCCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, TXCloudVideoView view);} else {// 停止订阅远端用户的视频流,并释放渲染控件mTRTCCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);}}
// 退出跨房连麦mTRTCCloud.DisconnectOtherRoom();// 退出跨房连麦的结果回调@Overridepublic void onDisConnectOtherRoom(int errCode, String errMsg) {super.onDisConnectOtherRoom(errCode, errMsg);}
DisconnectOtherRoom() 后,即退出与所有其他房间主播的跨房 PK 连麦。DisconnectOtherRoom() 退出跨房 PK 连麦。XmagicResParser.setResPath(new File(getFilesDir(), "xmagic").getAbsolutePath());//loading//copy资源文件到私有目录,只需要做一次XmagicResParser.copyRes(getApplicationContext());
XmagicResParser.setResPath(下载的资源文件本地路径);
mTRTCCloud.setLocalVideoProcessListener(TRTCCloudDef.TRTC_VIDEO_PIXEL_FORMAT_Texture_2D, TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE, new TRTCCloudListener.TRTCVideoFrameListener() {@Overridepublic void onGLContextCreated() {// SDK 内部 OpenGL 环境已经创建,此时可进行第三方美颜的初始化工作if (mXmagicApi == null) {XmagicApi mXmagicApi = new XmagicApi(context, XmagicResParser.getResPath(), new XmagicApi.OnXmagicPropertyErrorListener());} else {mXmagicApi.onResume();}}@Overridepublic int onProcessVideoFrame(TRTCCloudDef.TRTCVideoFrame srcFrame, TRTCCloudDef.TRTCVideoFrame dstFrame) {// 用于对接第三方美颜组件的视频处理回调if (mXmagicApi != null) {dstFrame.texture.textureId = mXmagicApi.process(srcFrame.texture.textureId, srcFrame.width, srcFrame.height);}return 0;}@Overridepublic void onGLContextDestory() {// SDK 内部 OpenGL 环境被销毁,此时可进行第三方美颜的资源销毁工作mXmagicApi.onDestroy();}});
public void enableDualStreamMode(boolean enable) {// 小流的视频编码参数(可自定义)TRTCCloudDef.TRTCVideoEncParam smallVideoEncParam = new TRTCCloudDef.TRTCVideoEncParam();smallVideoEncParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_480_270;smallVideoEncParam.videoFps = 15;smallVideoEncParam.videoBitrate = 550;smallVideoEncParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;mTRTCCloud.enableEncSmallVideoStream(enable, smallVideoEncParam);}
// 订阅远端用户视频流时可选视频流类型mTRTCCloud.startRemoteView(userId, streamType, videoView);// 亦可随时切换指定远端用户的大小画面mTRTCCloud.setRemoteVideoStreamType(userId, streamType);
streamType 视频流类型为 TRTC_VIDEO_STREAM_TYPE_SMALL 来拉取低清小画面观看。TXCloudVideoView 作为视频渲染控件,支持 SurfaceView 和 TextureView 两种渲染方案。下面介绍指定渲染控件类型,以及更新视频渲染控件的方法。TXCloudVideoView,您可以按照如下方法进行编码。// 强制使用TextureViewTextureView textureView = findViewById(R.id.texture_view);TXCloudVideoView cloudVideoView = new TXCloudVideoView(context);cloudVideoView.addVideoView(textureView);// 强制使用SurfaceViewSurfaceView surfaceView = findViewById(R.id.surface_view);TXCloudVideoView cloudVideoView = new TXCloudVideoView(surfaceView);
// 更新本地预览画面渲染控件mTRTCCloud.updateLocalView(videoView);// 更新远端用户视频渲染控件mTRTCCloud.updateRemoteView(userId, streamType, videoView);
videoView 为目标视频渲染控件,streamType 仅支持 TRTC_VIDEO_STREAM_TYPE_BIG 和 TRTC_VIDEO_STREAM_TYPE_SUB。// 构造点赞消息体JSONObject jsonObject = new JSONObject();try {jsonObject.put("cmd", "like_msg");JSONObject msgJsonObject = new JSONObject();msgJsonObject.put("type", 1); // 点赞类型msgJsonObject.put("likeCount", 10); // 点赞数量jsonObject.put("msg", msgJsonObject);} catch (JSONException e) {e.printStackTrace();}String data = jsonObject.toString();// 发送群自定义消息(点赞消息建议设置为低优先级)V2TIMManager.getInstance().sendGroupCustomMessage(data.getBytes(), mRoomId,V2TIMMessage.V2TIM_PRIORITY_LOW, new V2TIMValueCallback<V2TIMMessage>() {@Overridepublic void onError(int i, String s) {// 发送点赞消息失败}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {// 发送点赞消息成功// 本地渲染点赞效果}});
// 收到群自定义消息V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {@Overridepublic void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) {String customStr = new String(customData);if (!customStr.isEmpty()) {try {JSONObject jsonObject = new JSONObject(customStr);String command = jsonObject.getString("cmd");JSONObject messageJsonObject = jsonObject.getJSONObject("msg");if (command.equals("like_msg")) {int type = messageJsonObject.getInt("type"); // 点赞类型int likeCount = messageJsonObject.getInt("likeCount"); // 点赞数量// 根据点赞类型和数量渲染点赞效果}} catch (JSONException e) {e.printStackTrace();}}}});
https://xxxxxx/v4/group_open_http_svc/send_group_msg?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
{"GroupId": "@TGS#12DEVUDHQ","Random": 2784275388,"MsgPriority": "High", // 消息的优先级,礼物消息应设置为高优先级"MsgBody": [{"MsgType": "TIMCustomElem","MsgContent": {// type: 礼物类型; giftUrl: 礼物资源地址; giftName: 礼物名称; giftCount: 礼物数量"Data": "{\\"cmd\\": \\"gift_msg\\", \\"msg\\": {\\"type\\": 1, \\"giftUrl\\": \\"xxx\\", \\"giftName\\": \\"xxx\\", \\"giftCount\\": 1}}"}}]}
// 收到群自定义消息V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {@Overridepublic void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) {String customStr = new String(customData);if (!customStr.isEmpty()) {try {JSONObject jsonObject = new JSONObject(customStr);String command = jsonObject.getString("cmd");JSONObject messageJsonObject = jsonObject.getJSONObject("msg");if (command.equals("gift_msg")) {int type = messageJsonObject.getInt("type"); // 礼物类型int giftCount = messageJsonObject.getInt("giftCount"); // 礼物数量String giftUrl = messageJsonObject.getString("giftUrl"); // 礼物资源地址String giftName = messageJsonObject.getString("giftName"); // 礼物名称// 根据礼物类型、礼物数量、礼物资源地址、礼物名称渲染礼物特效}} catch (JSONException e) {e.printStackTrace();}}}});
// 发送公屏弹幕消息V2TIMManager.getInstance().sendGroupTextMessage(text, groupID, V2TIMMessage.V2TIM_PRIORITY_NORMAL, new V2TIMValueCallback<V2TIMMessage>() {@Overridepublic void onError(int i, String s) {// 发送弹幕消息失败}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {// 发送弹幕消息成功// 本地展示消息文本}});// 接收公屏弹幕消息V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {@Overridepublic void onRecvGroupTextMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, String text) {// 根据发送者信息 sender 和消息文本 text 渲染弹幕消息}});
枚举 | 取值 | 描述 |
ERR_TRTC_INVALID_USER_SIG | -3320 | 进房参数 UserSig 不正确,请检查 TRTCParams.userSig 是否为空。 |
ERR_TRTC_USER_SIG_CHECK_FAILED | -100018 | UserSig 校验失败,请检查参数 TRTCParams.userSig 是否填写正确或已经过期。 |
枚举 | 取值 | 描述 |
ERR_TRTC_CONNECT_SERVER_TIMEOUT | -3308 | 请求进房超时,请检查是否断网或者是否开启 VPN,您也可以切换4G进行测试。 |
ERR_TRTC_INVALID_SDK_APPID | -3317 | 进房参数 sdkAppId 错误,请检查 TRTCParams.sdkAppId 是否为空 |
ERR_TRTC_INVALID_ROOM_ID | -3318 | 进房参数 roomId 错误,请检查 TRTCParams.roomId 或 TRTCParams.strRoomId 是否为空,注意 roomId 和 strRoomId 不可混用。 |
ERR_TRTC_INVALID_USER_ID | -3319 | 进房参数 userId 不正确,请检查 TRTCParams.userId 是否为空。 |
ERR_TRTC_ENTER_ROOM_REFUSED | -3340 | 进房请求被拒绝,请检查是否连续调用 enterRoom 进入相同 ID 的房间。 |
枚举 | 取值 | 描述 |
ERR_CAMERA_START_FAIL | -1301 | 打开摄像头失败,例如在 Windows 或 Mac 设备,摄像头的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序。 |
ERR_MIC_START_FAIL | -1302 | 打开麦克风失败,例如在 Windows 或 Mac 设备,麦克风的配置程序(驱动程序)异常,禁用后重新启用设备,或者重启机器,或者更新配置程序。 |
ERR_CAMERA_NOT_AUTHORIZED | -1314 | 摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了。 |
ERR_MIC_NOT_AUTHORIZED | -1317 | 麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了。 |
ERR_CAMERA_OCCUPY | -1316 | 摄像头正在被占用中,可尝试打开其他摄像头。 |
ERR_MIC_OCCUPY | -1319 | 麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败。 |
setLocalRenderParams 和视频编码镜像 setVideoEncoderMirror,两者分别影响本地预览画面镜像效果,以及视频编码输出画面的镜像效果(远端观众及云端录制的镜像模式)。如果希望本地预览的镜像效果同时在远端观众侧生效,请按照如下方法进行编码。// 设置本地画面的渲染参数TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE; // 画面镜像模式params.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // 画面填充模式params.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 画面旋转角度mTRTCCloud.setLocalRenderParams(params);// 设置编码器输出的画面镜像模式mTRTCCloud.setVideoEncoderMirror(true);
// 获取摄像头的最大缩放倍数(仅适用于移动端)float zoomRatio = mTRTCCloud.getDeviceManager().getCameraZoomMaxRatio();// 设置摄像头的缩放倍数(仅适用于移动端)// 取值范围1-5,取值为1表示最远视角(正常镜头),取值为5表示最近视角(放大镜头);最大值推荐为5,若超过5,视频数据会变得模糊不清mTRTCCloud.getDeviceManager().setCameraZoomRatio(zoomRatio);
// 开启或关闭摄像头的自动对焦功能(仅适用于移动端)mTRTCCloud.getDeviceManager().enableCameraAutoFocus(false);// 设置摄像头的对焦位置(仅适用于移动端)// 使用该接口的前提是先通过 enableCameraAutoFocus 关闭自动对焦功能mTRTCCloud.getDeviceManager().setCameraFocusPosition(int x, int y);
// 判断当前是否为前置摄像头(仅适用于移动端)boolean isFrontCamera = mTRTCCloud.getDeviceManager().isFrontCamera();// 切换前置或后置摄像头(仅适用于移动端)// 传入true: 切换为前置;传入false: 切换为后置mTRTCCloud.getDeviceManager().switchCamera(!isFrontCamera);
文档反馈