本文指导用户如何选择与场景适配的视频旋转模式。
为满足用户处理视频旋转的需求,声网为用户提供了设置视频编码属性 setVideoEncoderConfiguration
接口,其中就包含了 orientationMode
参数,即旋转模式。
声网的视频采集、渲染和输出的流程大致如下:
因此在视频旋转场景中,我们主要关注两个端:采集端和播放端 。
采集端采集视频,并输出视频信息。视频信息包含:
视频图像
视频与 Status Bar 的相对位置
播放端负责播放接收到的视频图像。
进入声网频道后,用户可以通过调用 setVideoEncoderConfiguration
来设置视频属性。
public abstract int setVideoEncoderConfiguration(VideoEncoderConfiguration config);
其中的 VideoEncoderConfiguration 就包含 orientationMode
参数。声网推荐根据下表来选择适合你场景的旋转模式(通信和直播模式均适用):
声网通过 orientationMode
参数,提供了 ADAPTIVE 模式 、 FIXED_LANDSCAPE 模式 和 FIXED_PORTRAIT 模式 三种模式,供用户在不同场景下使用。无论是哪一种模式,声网 SDK 保证视频和 Status Bar 的相对位置在采集端和播放端始终一致。
该模式下,采集端采集视频和视频与 Status Bar 的相对方向信息并传输;播放端播放视频并还原视频与 Status Bar 的相对方向信息。
假设视频采集设备使用后置摄像头进行采集,下图演示了 Adaptive 模式分别在 UI 锁定和 UI 不锁定情况下的行为:
UI 锁定时(或 UI 不锁定但客户端关闭了屏幕自动旋转功能时):
Status Bar 与屏幕的相对方向保持不变,和手机的重力感应无关(比如微信,Status Bar 总是位于屏幕的顶端)。此时,视频和屏幕的相对方向在采集端和播放端始终一致:
采集端横屏时:
采集端竖屏时:
UI 不锁定且客户端开启屏幕自动旋转时:
Status Bar 总是处于垂直地面方向的正上方,和屏幕的朝向无关(比如 Facetime)。此时,视频和重力的相对方向在采集端和播放端始终一致:
采集端横屏时:
采集端竖屏时:
该模式下,采集端保证输出的视频相对 Status Bar 处于横屏模式;如有需要,会对硬件采集的视频进行裁剪处理。播放端不对视频进行旋转操作,直接渲染出横屏画面。
FIXED_LANDSCAPE 模式下,硬件采集到的视频在垂直于 Status Bar 的两端可能会被裁剪。
假设视频采集设备使用后置摄像头进行采集,下图演示了 FIXED_LANDSCAPE 模式在采集端处于不同角度时的行为:
采集到的视频是横屏模式:(采集端未对硬件采集的视频进行裁剪处理)
采集到的视频是竖屏模式:(采集端对硬件采集的视频进行裁剪处理,使其成为横屏画面。图中红色虚线部分演示 SDK 对采集到的图像裁剪后留下的部分)
该模式下,采集端保证输出的视频相对 Status Bar 处于竖屏模式;如果需要,会对硬件采集的视频进行裁剪处理。播放端不对视频进行旋转操作,直接渲染出竖屏画面。
FIXED_PORTRAIT 模式下,硬件采集到的视频在平行于 Status Bar 的两端可能会被裁剪。
假设视频采集设备使用后置摄像头进行采集,下图演示了 FIXED_PORTRAIT 模式在采集端处于不同角度时的行为:
采集到的视频是竖屏模式:(采集端未对硬件采集的视频进行裁剪处理)
采集到的视频是横屏模式:(采集端对硬件采集的视频进行裁剪处理,使其成为竖屏画面。图中红色虚线部分演示 SDK 对采集到的图像裁剪后留下的部分)