设置视频旋转方向

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

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

基本概念

  • 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 界面为竖屏模式,例如微信的视频通话,您可以参考如下步骤:

  1. 设置 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
    );
    }
    
  2. 推流端配置 SDK 使用竖屏模式

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

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

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

实现 App 为横屏模式

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

  1. 设置 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
    );
    
  2. 推流端配置 SDK 使用横屏模式

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

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

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

常见问题

为什么设置本地视频采集画面的旋转方向无效

此文档是否对你有帮助?
有帮助
去反馈
  • 基本概念
  • 功能原理
  • NERtcVideoOutputOrientationMode.adaptative(自适应模式)
  • NERtcVideoOutputOrientationMode.adaptative.fixedPortrait (竖屏模式)
  • NERtcVideoOutputOrientationMode.adaptative.fixedLandscape (横屏模式)
  • 注意事项
  • 实现 App 为竖屏模式
  • 实现 App 为横屏模式
  • 常见问题