设置视频旋转方向
更新时间: 2024/09/18 16:26:13
为了让视频有更好的观看体验,App 往往需要实现视频横竖屏切换、默认竖屏或默认横屏等功能。为防止视频因旋转出现视频画面裁剪、缩放等问题,您可以通过setLocalVideoConfig
的orientationMode
参数,设置视频的旋转方向。
基本概念
-
Status Bar:移动端的系统状态栏。
-
UI 锁定:由开发者进行设置。UI 锁定时,即使用户打开屏幕自动旋转,也无法旋转;不锁定时,App 方向将跟随设备旋转。
-
屏幕自动旋转:开启时, App 方向将跟随设备旋转,用户可以在移动端系统控制栏中进行操作。
功能原理
采集端采集图像时,同时收集视频的旋转方向模式信息;播放端将接收到的视频图像进行渲染,并旋转方向模式信息对应地旋转视频,以达到和采集端表现一致。
orientationMode
参数提供了三种模式,具体说明如下:
NERtcVideoOutputOrientationMode.adaptative(自适应模式)
该模式下,SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。该模式适用于接收端可以自主调整视频方向的场景。
UI 锁定或关闭屏幕自动旋转
Status Bar 与屏幕的位置固定不变,不应重力感应而变化位置。因此视频和屏幕的相对位置,采集端和接收端始终保持一致。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
UI 不锁定或开启屏幕自动旋转
Status Bar 总是在屏幕的顶端。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
NERtcVideoOutputOrientationMode.adaptative.fixedPortrait (竖屏模式)
该模式下, SDK 输出的视频相对于 Status Bar 总是处于竖屏模式。如果采集到的视频是横屏,则视频编码器会对视频进行裁剪。
如果采集到的视频是竖屏,则无需裁剪视频。该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
NERtcVideoOutputOrientationMode.adaptative.fixedLandscape (横屏模式)
该模式下, SDK 输出的视频相对于 Status Bar 总是处于横屏模式。如果采集到的视频是竖屏,则视频编码器会对视频进行裁剪。如果采集到的视频是横屏,则无需裁剪视频。
该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。
采集端 | 接收端横屏 | 接收端竖屏 |
---|---|---|
注意事项
- 若您集成的是 V4.6.0 之前的版本,设置旋转方向后,只会影响远端用户看到的视频画面。
- 若您集成的是 V4.6.0 及之后的版本,设置旋转方向后,会同时影响本端用户的预览画面和远端用户看到的视频画面。
实现 App 为竖屏模式
如果希望 App 界面为竖屏模式,例如微信的视频通话,您可以参考如下步骤:
-
设置 App UI 默认为竖屏
在您的 Flutter 应用程序需要指定为横屏的页面中,您可以使用 SystemChrome.setPreferredOrientations() 方法,即可指定该界面为横屏模式:
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); return Scaffold( /// to do ); }
-
推流端配置 SDK 使用竖屏模式
加入房间前,通过 NERTC SDK 的
setLocalVideoConfig
设置视频属性时,将orientationMode
参数的值设置为NERtcVideoOutputOrientationMode.adaptative.fixedPortrait
(竖屏模式)。 -
拉流端配置 SDK 使用自适应模式。
加入房间前,通过 NERTC SDK 的
setLocalVideoConfig
设置视频属性时,将orientationMode
参数的值设置为NERtcVideoOutputOrientationMode.adaptative.adaptative
(自适应模式)。
实现 App 为横屏模式
如果要实现 App 界面为横屏模式,您可以参考如下步骤:
-
设置 App UI 默认为横屏
在您的 Flutter 应用程序需要指定为横屏的页面中,您可以使用 SystemChrome.setPreferredOrientations() 方法,即可指定该界面为横屏模式:
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]); return Scaffold( /// to do );
-
推流端配置 SDK 使用横屏模式
加入房间前,通过 NERTC SDK 的
setLocalVideoConfig
设置视频属性时,将orientationMode
参数对值设置为NERtcVideoOutputOrientationMode.adaptative.fixedLandscape
(横屏模式)。 -
拉流端配置 SDK 使用自适应模式。
加入房间前,通过 NERTC SDK 的
setLocalVideoConfig
设置视频属性时,将orientationMode
参数对值设置为NERtcVideoOutputOrientationMode.adaptative.adaptative
(自适应模式)。