在视频通话或视频互动直播场景中,视频画面是否清晰流畅,很大程度上决定着用户体验。
视频属性包含视频分辨率、帧率、码率等影响视频质量的参数设置。本文介绍如何使用声网 SDK 的 API 设置视频相关的属性,从而提升用户的视频使用体验。
声网在 GitHub 上提供已实现设置视频属性功能的开源示例项目。你可以下载体验并参考源代码。
开始前请确保你已在项目中实现基本的音视频通信或直播功能。
声网 SDK 提供 setVideoEncoderConfiguration
方法,支持对视频编码属性进行设置。
setVideoEncoderConfiguration
可以在初始化 IRtcEngine
后的任何阶段调用。如果在加入频道后不需要重新设置视频编码属性,声网建议在 enableVideo
前调用,以加快首帧出图的时间。
声网 SDK 通过如下参数设置视频编码的分辨率、帧率和码率。
dimensions
: 视频编码的分辨率 (px),默认值为 640 × 360。通常情况下,分辨率越高,视频的清晰度会越好。该参数的值不代表最终视频输出的方向。点击旋转方向模式了解如何设置视频输出的方向模式。frameRate
: 视频编码的帧率 (fps),即每秒钟要编码多少帧画面,默认值为 15。通常情况下,帧率越大,画面越流畅。如果对视频流畅度要求较高,可以设为 20 或 25,但建议不要超过 30。bitrate
: 视频编码码率 (Kbps),默认值为 STANDARD_BITRATE
,即标准码率模式。声网会依据当前频道场景、分辨率、帧率为你设置一个最合适的码率。你可以直接选择 SDK 预设的分辨率、帧率和码率值,也参考下表进行自定义。
分辨率 (宽 x 高) | 帧率 (fps) | 基准码率 (Kbps,适用于通信) | 直播码率 (Kbps,适用于直播) |
---|---|---|---|
160 x 120 | 15 | 65 | 130 |
120 x 120 | 15 | 50 | 100 |
320 x 180 | 15 | 140 | 280 |
180 x 180 | 15 | 100 | 200 |
240 x 180 | 15 | 120 | 240 |
320 x 240 | 15 | 200 | 400 |
240 x 240 | 15 | 140 | 280 |
424 x 240 | 15 | 220 | 440 |
640 x 360 | 15 | 400 | 800 |
360 x 360 | 15 | 260 | 520 |
640 x 360 | 30 | 600 | 1200 |
360 x 360 | 30 | 400 | 800 |
480 x 360 | 15 | 320 | 640 |
480 x 360 | 30 | 490 | 980 |
640 x 480 | 15 | 500 | 1000 |
480 x 480 | 15 | 400 | 800 |
640 x 480 | 30 | 750 | 1500 |
480 x 480 | 30 | 600 | 1200 |
848 x 480 | 15 | 610 | 1220 |
848 x 480 | 30 | 930 | 1860 |
640 x 480 | 10 | 400 | 800 |
1280 x 720 | 15 | 1130 | 2260 |
1280 x 720 | 30 | 1710 | 3420 |
960 x 720 | 15 | 910 | 1820 |
960 x 720 | 30 | 1380 | 2760 |
1920 x 1080 | 15 | 2080 | 4160 |
1920 x 1080 | 30 | 3150 | 6300 |
1920 x 1080 | 60 | 4780 | 6500 |
通常来讲,视频参数的选择要根据产品实际情况和场景来确定,比如,如果是一对一,老师和学生的窗口比较大,要求分辨率会高一点,随之帧率和码率也要高一点;如果是一对四, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。一般可按下列场景中的推荐值进行设置。
在视频旋转场景中,我们主要关注采集端和播放端的行为。其中:
为防止视频因旋转出现大头、缩放或剪切的问题,声网 SDK 在 setVideoEncoderConfiguration
中还提供了一个 orientationMode
参数。你可以通过这个参数,结合视频场景需要,获取想要的视频渲染效果。
声网在 orientationMode
参数中,提供了 ADAPTIVE
、FIXED_LANDSCAPE
和 FIXED_PORTRAIT
三种方向模式。
该模式下 SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。该模式适用于接收端可以调整视频方向的场景:
该模式下,SDK 保证输出的视频相对 Status Bar 总是处于横屏模式;如果采集到的视频是竖屏模式,则相对于播放端 Status bar 平行方向的画面会被裁剪。
该模式下,SDK 保证输出的视频相对 Status Bar 总是处于竖屏模式;如果采集到的视频是横屏模式,则相对于播放端 Status bar 垂直方向的画面会被裁剪。
为保证弱网下用户的视频体验,声网 SDK 还提供了 degradationPreference
参数,来设置带宽受限时视频编码的降级偏好。
默认情况下,SDK 在编码时不对视频作镜像操作。你可以通过 mirrorMode
成员来设置视频编码的镜像模式,影响远端用户看到的视频画面。
如果你的场景中对视频质量或传输帧率有特殊的需求,还可以通过如下两个参数进行设置。
minFrameRate
: 视频最低编码帧率 (fps)。可以与 degradationPreference
中的 MAINTAIN_QUALITY
选项搭配使用,用于平衡帧率和视频清晰度。minFrameRate
较低时,一旦带宽不足,帧率下降幅度较大,画质清晰度受影响比较小;minFrameRate
较高时,一旦带宽不足,帧率下降幅度有限,视频清晰度受影响比较大。minBitrate
: 视频最低编码码率 (Kbps)。网络情况会影响视频编码器输出的视频。该参数可强制视频编码器输出高质量的视频帧;注意在网络状况不佳的情况下,码率过高可能会影响视频播放的流畅度。minFrameRate
和 minBitrate
的默认值经实验且能满足大部分场景的需求,因此声网建议你不要修改。// 配置一个 VideoEncoderConfiguration 实例。
// 设置分辨率为 640 x 360。
VideoEncoderConfiguration (lpVideoConfig(640, 360),
// 设置帧率为 15 fps。
FRAME_RATE_FPS_15,
// 设置码率为 800 Kbps。
800,
// 设置旋转方向模式为 ADAPTIVE。
ORIENTATION_MODE_ADAPTIVE
// 设置降级偏好为 MAINTAIN_QUALITY。
MAINTAIN_QUALITY
);
// 设置视频编码属性。
lpAgoraEngine->setVideoEncoderConfiguration(lpVideoConfig);
setVideoEncoderConfiguration
中各参数设置的是理想值。声网 SDK 会根据实时网络环境和设备,对设置的参数作自适应调整,通常会下调参数。