设置视频旋转方向

更新时间: 2024/09/18 16:26:13

为了让视频有更好的观看体验,App 往往需要实现视频横竖屏切换、默认竖屏或默认横屏等功能。为防止视频因旋转出现视频画面裁剪、缩放等问题,您可以通过 setLocalVideoConfigorientationMode 参数,设置视频的旋转方向。

基本概念

  • Status Bar:移动端的系统状态栏。

  • UI 锁定:由开发者进行设置。UI 锁定时,即使用户打开屏幕自动旋转,也无法旋转。不锁定时,App 方向将跟随设备旋转。

  • 屏幕自动旋转:开启时,App 方向将跟随设备旋转,用户可以在移动端系统控制栏中进行操作。

功能原理

采集端采集图像时,同时收集视频的旋转方向模式信息。播放端将接收到的视频图像进行渲染,并旋转方向模式信息对应地旋转视频,以达到和采集端表现一致。

orientationMode 参数提供了三种模式:

  • VIDEO_OUTPUT_ORIENTATION_MODE_ADAPTATIVE(自适应模式)
  • VIDEO_OUTPUT_ORIENTATION_MODE_FIXED_PORTRAIT(竖屏模式)
  • VIDEO_OUTPUT_ORIENTATION_MODE_FIXED_LANDSCAPE(横屏模式)

具体说明参考下文。

自适应模式

该模式下,SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。该模式适用于接收端可以自主调整视频方向的场景。

UI 锁定或关闭屏幕自动旋转

Status Bar 与屏幕的位置固定不变,不应重力感应而变化位置。因此视频和屏幕的相对位置,采集端和接收端始终保持一致。

采集端 接收端横屏 接收端竖屏

UI 不锁定或开启屏幕自动旋转

Status Bar 总是在屏幕的顶端。

采集端 接收端横屏 接收端竖屏

竖屏模式

该模式下,SDK 输出的视频相对于 Status Bar 总是处于竖屏模式。如果采集到的视频是横屏,则视频编码器会对视频进行裁剪。

如果采集到的视频是竖屏,则无需裁剪视频。该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。

采集端 接收端横屏 接收端竖屏

横屏模式

该模式下,SDK 输出的视频相对于 Status Bar 总是处于横屏模式。如果采集到的视频是竖屏,则视频编码器会对视频进行裁剪。如果采集到的视频是横屏,则无需裁剪视频。

该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。

采集端 接收端横屏 接收端竖屏

注意事项

  • 若您集成的是 V4.6.0 之前的版本,设置旋转方向后,只会影响远端用户看到的视频画面。
  • 若您集成的是 V4.6.0 及之后的版本,设置旋转方向后,会同时影响本端用户的预览画面和远端用户看到的视频画面。

实现 App 为竖屏模式

如果希望 App 界面为竖屏模式,例如微信的视频通话,您可以参考如下步骤:

  1. 设置 App UI 默认为竖屏。

    AndroidManifest.xml 中,设置 activityscreenOrientation 属性为 portrait,即可指定该界面为竖屏模式。

    XML<activity
                android:name=".NERTCMainActivity" android:launchMode="singleTask" android:windowSoftInputMode="adjustPan"
                android:screenOrientation="portrait" /><!--竖屏设置-->
    
  2. 推流端配置 SDK 使用竖屏模式。

    加入房间前,通过 NERTC SDK 的 setLocalVideoConfig 设置视频属性时,将 orientationMode 参数对值设置为 VIDEO_OUTPUT_ORIENTATION_MODE_FIXED_PORTRAIT(竖屏模式)。

  3. 拉流端配置 SDK 使用自适应模式。

    加入房间前,通过 NERTC SDK 的 setLocalVideoConfig 设置视频属性时,将 orientationMode 参数对值设置为 VIDEO_OUTPUT_ORIENTATION_MODE_ADAPTATIVE(自适应模式)。

实现 App 为横屏模式

如果要实现 App 界面为横屏模式,您可以参考如下步骤:

  1. 设置 App UI 默认为横屏。

    AndroidManifest.xml 中,设置 activityscreenOrientation 属性为 landscape,即可指定该界面为横屏模式:

    XML<activity
                android:name=".NERTCMainActivity" android:launchMode="singleTask" android:windowSoftInputMode="adjustPan"
                android:screenOrientation="landscape" /><!--横屏设置-->
    
  2. 推流端配置 SDK 使用横屏模式。

    加入房间前,通过 NERTC SDK 的 setLocalVideoConfig 设置视频属性时,将 orientationMode 参数对值设置为 VIDEO_OUTPUT_ORIENTATION_MODE_FIXED_LANDSCAPE(横屏模式)。

  3. 拉流端配置 SDK 使用自适应模式。

    加入房间前,通过 NERTC SDK 的 setLocalVideoConfig 设置视频属性时,将 orientationMode 参数对值设置为 VIDEO_OUTPUT_ORIENTATION_MODE_ADAPTATIVE(自适应模式)。

此文档是否对你有帮助?
有帮助
去反馈
  • 基本概念
  • 功能原理
  • 自适应模式
  • 竖屏模式
  • 横屏模式
  • 注意事项
  • 实现 App 为竖屏模式
  • 实现 App 为横屏模式