设置视频旋转方向
更新时间: 2024/08/23 10:16:57
为了让视频有更好的观看体验,App 往往需要实现视频横竖屏切换、默认竖屏或默认横屏等功能。为防止视频因旋转出现视频画面裁剪、缩放等问题,您可以通过setLocalVideoConfig
方法设置视频的旋转方向。
基本概念
-
Status Bar:移动端的系统状态栏。
-
UI 锁定:由开发者进行设置。UI 锁定时,即使用户打开屏幕自动旋转,也无法旋转;不锁定时,App 方向将跟随设备旋转。
-
屏幕自动旋转:开启时, App 方向将跟随设备旋转,用户可以在移动端系统控制栏中进行操作。
功能原理
采集端采集图像时,同时收集视频的旋转方向模式信息;播放端将接收到的视频图像进行渲染,并旋转方向模式信息对应地旋转视频,以达到和采集端表现一致。
orientationMode
参数提供了三种模式,具体说明如下:
kNERtcVideoOutputOrientationModeAdaptative (自适应模式)
该模式下,SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。该模式适用于接收端可以自主调整视频方向的场景。
UI 锁定或关闭屏幕自动旋转
Status Bar 与屏幕的位置固定不变,不应重力感应而变化位置。因此视频和屏幕的相对位置,采集端和接收端始终保持一致。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
UI 不锁定或开启屏幕自动旋转
Status Bar 总是在屏幕的顶端。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
kNERtcVideoOutputOrientationModeFixedPortrait (竖屏模式)
该模式下, SDK 输出的视频相对于 Status Bar 总是处于竖屏模式。如果采集到的视频是横屏,则视频编码器会对视频进行裁剪。
如果采集到的视频是竖屏,则无需裁剪视频。该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
kNERtcVideoOutputOrientationModeFixedLandscape (横屏模式)
该模式下, SDK 输出的视频相对于 Status Bar 总是处于横屏模式。如果采集到的视频是竖屏,则视频编码器会对视频进行裁剪。如果采集到的视频是横屏,则无需裁剪视频。
该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
注意事项
- 在设置视频旋转方向前需要先完成呼叫组件初始化。
- 一旦调用
setLocalVideoConfig
方法成功,会覆盖用户已设置的其它视频编码属性,因此在调用setLocalVideoConfig
方法时,需要同步设置其他需要的属性,否则会直接使用默认值。
实现 App 为竖屏模式
如果希望 App 界面为竖屏模式,例如微信的视频通话,您可以参考如下步骤:
-
设置 App UI 默认为竖屏。
在 Xode 中选择 General 页签,在Deployment Info区域,将Device Orientation 参数的值设置为 Portrait。
-
呼叫组件(含 UI)初始化。
示例代码:
#import <NERtcCallKit/NERtcCallKit.h> @interface SomeViewController()<NECallEngineDelegate> @end @implementation SomeViewController - (void)viewDidLoad { [self setupSDK]; } - (void)setupSDK { NESetupConfig *setupConfig = [[NESetupConfig alloc] initWithAppkey:kAppKey]; [[NECallEngine sharedInstance] setup:setupConfig]; NECallUIKitConfig *config = [[NECallUIKitConfig alloc] init]; [[NERtcCallUIKit sharedInstance] setupWithConfig:config]; } @end
-
呼叫组件配置 SDK 使用竖屏模式。
加入房间前,通过
setLocalVideoConfig
方法设置视频属性时,将orientationMode
参数的值设置为kNERtcVideoOutputOrientationModeFixedPortrait
(竖屏模式)。示例代码:
NERtcVideoEncodeConfiguration *config = [[NERtcVideoEncodeConfiguration alloc] init]; config.width = 640;// 设置分辨率宽 config.height = 360;// 设置分辨率高 config.frameRate = kNERtcVideoFrameRateFps15; //视频帧率 config.orientationMode = .fixedPortrait //竖屏 [[NERtcEngine sharedEngine] setLocalVideoConfig:config];
实现 App 为横屏模式
如果要实现 App 界面为横屏模式,您可以参考如下步骤:
-
设置 App UI 默认为横屏。
在 Xode 中选择 General 页签,在Deployment Info区域,将Device Orientation 参数的值设置为 Landscape Left 或 Landscape Right。
-
呼叫组件初始化。
-
呼叫组件配置 SDK 使用横屏模式。
加入房间前,通过
setLocalVideoConfig
方法设置视频属性时,将orientationMode
参数的值设置为kNERtcVideoOutputOrientationModeFixedLandscape
(横屏模式)。示例代码:
NERtcVideoEncodeConfiguration *config = [[NERtcVideoEncodeConfiguration alloc] init]; config.width = 640;// 设置分辨率宽 config.height = 360;// 设置分辨率高 config.frameRate = kNERtcVideoFrameRateFps15; //视频帧率 config.orientationMode = .fixedLandscape //横屏 [[NERtcEngine sharedEngine] setLocalVideoConfig:config];
实现根据 Status Bar 锁定视频画面的方向
若您需要实现视频画面方向与Status Bar的位置固定不变,不受设备重力感应而旋转视频方向,类似如下的效果。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
加入房间前,调用setVideoRotationMode
方法,将 rotationMode
参数的值设置为 NERtcVideoRotationModeByApp
, 使视频画面和 Status Bar的位置固定不变。