Android 实时音视频(TRTC)实现横屏视频通话

2019-09-30 11:40:52 浏览数 (1)

问题场景

如果您因业务场景需求,需要用户将手机横着放,然后进行视频通话。可以参考以下文档实现该功能。

解决方案

场景一:用户习惯是手机固定横着放。

1. 将 Activity 设置为横屏

假设视频通话界面名为 TRTCMainActivity,在 AndroidManifest.xml 中将该界面设置为横屏。

代码语言:txt复制
<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

0 人点赞