设置视频编码属性

最近更新时间:2022-09-20 05:17:40

功能描述

在视频通话或视频互动直播场景中,视频画面是否清晰流畅,很大程度上决定着用户体验。

视频属性包含视频分辨率、帧率、码率等影响视频质量的参数设置。本文介绍如何使用 AR SDK 的 API 设置视频相关的属性,从而提升用户的视频使用体验。

示例项目

AR 在 GitHub 上提供已实现设置视频属性功能的开源示例项目。你可以下载体验并参考源代码。

实现方法

开始前请确保已在项目中实现了基本的音视频通信或直播功能。

分辨率、帧率、码率

AR SDK 通过如下参数设置视频编码的分辨率、帧率和码率。

  • dimensions: 视频编码的分辨率 (px),默认值为 640 × 360。通常情况下,分辨率越高,视频的清晰度会越好。该参数的值不代表最终视频输出的方向。详情如下旋转方向模式了解如何设置视频输出的方向模式。
  • frameRate: 视频编码的帧率 (fps),即每秒钟要编码多少帧画面,默认值为 15。通常情况下,帧率越大,画面越流畅。如果对视频流畅度要求较高,可以设为 20 或 25,但建议不要超过 30。
  • bitrate: 视频编码码率 (Kbps),默认值为 STANDARD_BITRATE,即标准码率模式。AR 会依据当前频道场景、分辨率、帧率为你设置一个最合适的
  • 码率。
    • 视频的分辨率、码率和帧率并非越大越好,且彼此需要维持一个平衡的关系。较高的分辨率需要较高的码率来支撑;码率一定的情况下,帧率过高又会降低视频的分辨率。
    • 上述参数设置的均为理想情况下的最大值。当视频因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,会取最接近最大值的那个值。

你可以直接选择 SDK 预设的分辨率、帧率和码率值,也参考下表进行自定义。

视频属性参考表

视频能否达到 720P 的分辨率取决于设备的性能,在性能配备较低的设备上有可能无法实现。如果采用 720P 分辨率而设备性能跟不上,则有可能出现帧率过低的情况。

分辨率 (宽 × 高)帧率 (fps)基准码率 (Kbps,适用于通信)直播码率 (Kbps,适用于直播)
160 × 1201565130
120 × 1201550100
320 × 18015140280
180 × 18015100200
240 × 18015120240
320 × 24015200400
240 × 24015140280
424 × 24015220440
640 × 36015400800
360 × 36015260520
640 × 360306001200
360 × 36030400800
480 × 36015320640
480 × 36030490980
640 × 480155001000
480 × 48015400800
640 × 480307501500
480 × 480306001200
848 × 480156101220
848 × 480309301860
640 × 48010400800
1280 × 7201511302260
1280 × 7203017103420
960 × 720159101820
960 × 7203013802760

常用分辨率、帧率、码率

通常来讲,视频参数的选择要根据产品实际情况来确定,比如,如果一对一教学场景中 ,老师和学生的窗口比较大,要求的分辨率会高一点,随之帧率和码率也高;如果是一对四, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。一般可按下列场景中的推荐值进行设置。

  • 二人视频通话场景:
    • 分辨率 320 × 240、帧率 15 fps、码率 200 Kbps
    • 分辨率 640 × 360、帧率 15 fps、码率 400 Kbps
  • 多人视频通话场景:
    • 分辨率 160 × 120、帧率 15 fps、码率 65 Kbps
    • 分辨率 320 × 180、帧率 15 fps、码率 140 Kbps
    • 分辨率 320 × 240、帧率 15 fps、码率 200 Kbps

旋转方向模式

在视频旋转场景中,我们主要关注采集端和播放端的行为。其中:

  • 采集端采集并输出视频图像,以及视频相对于 Status Bar 的位置,即旋转信息。
  • 播放端渲染接收到的视频图像,并根据接收到的旋转信息,结合自身 Status Bar 的相对位置,旋转视频。

为防止视频因旋转出现大头、缩放或剪切的问题,AR SDK 在 setVideoEncoderConfiguration 中还提供了一个 orientationMode 参数。你可以通过这个参数,结合视频场景需要,获取想要的视频渲染效果。

降级偏好

为保证弱网下用户的视频体验,AR SDK 还提供了 degradationPrefer 参数,来设置带宽受限时视频编码的降级偏好。

  • 降低视频帧率以保证清晰度:将参数设为 MAINTAIN_QUALITY
  • 降低视频清晰度以保证流畅度:将参数设为 MAINTAIN_FRAMERATE

镜像模式

默认情况下,SDK 在编码时不对视频作镜像操作。你可以通过 mirrorMode 参数来设置视频编码的镜像模式,影响远端用户看到的视频画面。

最低编码帧率、码率

如果你的场景中对视频质量或传输帧率有特殊的需求,还可以通过如下两个参数进行设置。

  • minFrameRate: 视频最低编码帧率 (fps)。可以与 degradationPrefer 中的 MAINTAIN_QUALITY 选项搭配使用,用于平衡帧率和视频清晰度。minFrameRate 较低时,一旦带宽不足,帧率下降幅度较大,画质清晰度受影响比较小;minFrameRate 较高时,一旦带宽不足,帧率下降幅度有限,视频清晰度受影响比较大。
  • minBitrate: 视频最低编码码率 (Kbps)。网络情况会影响视频编码器输出的视频。该参数可强制视频编码器输出高质量的视频帧;注意在网络状况不佳的情况下,码率过高可能会影响视频播放的流畅度。

minFrameRateminBitrate 的默认值经实验且能满足大部分场景的需求,因此 AR 建议你不要修改。

示例代码

你可以参考如下示例代码对 setVideoEncoderConfiguration 中的各参数进行设置:

  
  Future<void> setVideoEncoderConfiguration(VideoEncoderConfiguration config) {
    return _invokeMethod(
        'setVideoEncoderConfiguration', {'config': config.toJson()});
  }
       func setVideoEncoderConfiguration(_ params: NSDictionary, _ callback: Callback) {
        callback.code(engine?.setVideoEncoderConfiguration(mapToVideoEncoderConfiguration(params["config"] as! Dictionary)))
    }

开发注意事项

  • setVideoEncoderConfiguration 中各参数设置的是理想值。AR SDK 会根据实时网络环境和设备,对设置的参数作自适应调整,通常会下调参数。
  • 本文中各参数的设置可能会影响计费。如果因自适应产生参数下调,计费按用户实际订阅的视频分辨率为准。