问题场景
如果您因业务场景需求,需要用户将手机横着放,然后进行视频通话。可以参考以下文档实现该功能。
解决方案
场景一:用户习惯是手机固定横着放。
1. 将 Activity 设置为横屏
假设视频通话界面名为 TRTCMainActivity,在 AndroidManifest.xml
中将该界面设置为横屏。
<activity
android:name=".trtc.TRTCMainActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="landscape" />
2.将视频分辨率设置为横屏
代码语言:txt复制private TRTCCloud trtcCloud; /// TRTC SDK 实例对象
private TRTCCloudListener trtcListener; /// TRTC SDK 回调监听
// 创建 trtcCloud 实例
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
trtcListener = new TRTCCloudListenerImpl(this);
trtcCloud = TRTCCloud.sharedInstance(this);
trtcCloud.setListener(trtcListener);
// 预览前配置默认参数
setTRTCCloudParam();
// 开启视频采集预览
......
//进房
trtcCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL);
}
/**
* 设置视频通话的视频参数(分辨率、帧率和流畅模式等参数)
*/
private void setTRTCCloudParam() {
// 大画面的编码器参数设置
TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360;
encParam.videoFps = 15;
encParam.videoBitrate = 550;
// videoResolutionMode 设置为横屏
encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE;
trtcCloud.setVideoEncoderParam(encParam);
......
}
场景二:用户习惯是手机固定横着放,但需支持手机旋转 360 度。
首先按照场景一的流程实现,然后开启 SDK 的重力接口即可。
代码语言:txt复制/**
* 设置视频通话的视频参数(分辨率、帧率和流畅模式等参数)
*/
private void setTRTCCloudParam() {
// 大画面的编码器参数设置
TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360;
encParam.videoFps = 15;
encParam.videoBitrate = 550;
// videoResolutionMode 设置为横屏
encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE;
trtcCloud.setVideoEncoderParam(encParam);
// 开启重力感应
trtcCloud.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_UIAUTOLAYOUT);
......
}
原理说明
TRTC SDK 还提供了 5个 改变渲染角度(本地预览、远端观众)的接口,方便您根据场景需要进行各种调整。
补充
1) 为什么横屏预览会有出现裁剪的问题?
建议您先将TRTC SDK 更新到 6.3 版本或以上,问题应该能迎刃而解。
2) 是否能设置预览画面的渲染效果(填充 or 适应)?
SDK 支持该功能。您可以使用TrtcCloud.setLocalViewFillMode();
接口来实现效果。其中的值分别是:
填充模式(画面可能会被拉伸裁剪)值为 TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT,
适应模式(画面可能会有黑边)值为 TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL
3) 参考文档
- 高级功能 -> 视频画面旋转
- TRTCVideoEncParam -> videoResolution