设置视频属性

更新时间: 2024/08/05 15:02:55

在视频通话前,开发者可以根据不同场景下的用户喜好与需求,对视频属性进行设置,调整发送视频画面的清晰度以及流畅度,带给用户最优的通话体验。 视频属性通常包含分辨率、帧率、码率的档位,裁剪模式等参数。

NERTC SDK 通过 setVideoConfig 设置视频属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。

注意事项

  • NERTC SDK 会根据实时网络环境,对设置的参数作自适应调整,通常会下调参数。
  • 本文中各参数的设置可能会影响计费。
  • 如果同时设置 Profile 模式和自定义分辨率、码率和帧率,将以自定义设置为准。
  • setVideoConfig 为全量参数配置接口,重复调用此接口时,SDK 会刷新此前的所有参数配置,以最新的传参为准。所以每次修改配置时都需要设置所有参数,未设置的参数将取默认值。

设置视频编码分辨率、码率和帧率

此处设置的数值均为理想情况下的最大值,实际场景中,如果频引擎因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,会自动向下取值。

设置 Profile 模式

您可以直接使用 SDK 预设的 Profile 模式,NERTC SDK 会根据当前场景和网络状况为您调整各项参数的取值。通过 max_profile 属性设置本地视频发送的最大 Profile 类型,默认为 kNERtcVideoProfileStandard 。目前支持设置的模式如下。

视频 Profile 模式
默认分辨率
帧率(fps) 通信场景码率(Kbps) 直播场景码率(Kbps)
kNERtcVideoProfileLowest 160x120 15 62 93
kNERtcVideoProfileLow 320x240 15 175 263
kNERtcVideoProfileStandard 640 x 480 30 752 1128
kNERtcVideoProfileHD720P 1280 x 720 30 1714 2572
kNERtcVideoProfileHD1080P 1920 x 1080 30 3150 4725

注意

  • max_profile 属性支持设置摄像头采集数据和自定义视频输入的 Profile 模式,如果是自定义的外部数据源,会根据选择的 max_profile 进行分辨率缩放,例如设置为 kNERtcVideoProfileStandard ,自定义输入的视频数据分辨率为 720 x 720,则会被缩放为 480 x 480。
  • 不同裁剪模式下,Profile 档位的对应分辨率不同,其他裁剪模式的对应分辨率请参考Profile 档位对应分辨率

自定义设置

如果预设模式无法满足您的需求,您还可以通过以下方式自定义视频编码的分辨率、码率或帧率。通过以下参数自定义设置后,max_profile 属性设置将被覆盖。

  • 分辨率
    • 视频编码的分辨率可以用来衡量编码质量,通常情况下分辨率越高,视频越清晰。

    • 通过 widthheight 设置摄像头采集视频的编码分辨率(px)。默认为 640 x 480,取值范围为 64 x 64 ~ 1920 x 1080,如果设置取值范围以外的数值,则保持默认设置,即 640 x 480。

      注意

      • 只支持针对摄像头采集的数据设置视频编码分辨率,如果是自定义的外部数据源,请通过 max_profile 选择 SDK 预设的 Profile 模式。
      • 如果 widthheight 任一参数设置为 0,则使用 maxProfile 设置的分辨率。
  • 帧率
    • 视频编码帧率(fps)指是每秒钟编码多少帧画面。
    • 通过 framerate 可以设置视频编码帧率。
  • 码率
    • 码率(Bitrate)指每秒钟编码器输出多少 Kbit 的编码后的二进制数据。
    • 通过 bitrate 可以设置视频编码码率。

视频的分辨率、码率和帧率并不是越高越好,三者之间需要维持一个平衡的映射关系关系,您可以参考分辨率、帧率和码率推荐表设置分辨率和码率。

设置适应性偏好

在弱网环境下,视频的清晰度和流畅度可能无法兼顾,为保证音视频通话或互动直播场景下的视频体验,您可以通过 degradation_preference 参数设置带宽受限时视频编码的适应性偏好。

参数
描述
kNERtcDegradationBalanced 在编码帧率和视频质量之间保持平衡。
kNERtcDegradationDefault 根据场景模式调整适应性偏好。
通信场景中,选择 kNERtcDegradationBalanced 模式,在编码帧率和视频质量之间保持平衡。
直播场景中,选择 kNERtcDegradationMaintainQuality 模式,降低编码帧率以保证视频质量。
kNERtcDegradationMaintainFramerate 流畅优先,降低视频质量以保证编码帧率。在弱网环境下,降低视频清晰度以保证视频流畅,此时画质降低,画面会变得模糊,但可以保持视频流畅。
kNERtcDegradationMaintainQuality 清晰优先,降低编码帧率以保证视频质量。在弱网环境下,降低视频帧率以保证视频清晰,此时可能会出现一定卡顿。

设置旋转方向模式

旋转方向模式指移动端视频是横屏还是竖屏显示。采集端采集图像时,同时收集视频的旋转方向模式信息;播放端将接收到的视频图像进行渲染,并旋转方向模式信息对应地旋转视频,以达到和采集端表现一致。

NERTC SDK 支持根据 orientation_mode 参数设置本地视频编码的旋转方向模式,使接收端的视频展示为指定的方向效果。其中,orientationMode 参数中提供了 kNERtcVideoOutputOrientationModeAdaptative(自适应)、kNERtcVideoOutputOrientationModeFixedLandscape(风景) 和 kNERtcVideoOutputOrientationModeFixedPortrait (肖像) 三种方向模式。

  • kNERtcVideoOutputOrientationModeAdaptative

    自适应模式下,SDK 输出的视频方向与采集到的视频方向一致。接收端会根据收到的视频旋转信息对视频进行旋转。该模式适用于接收端可以自主调整视频方向的场景。

  • kNERtcVideoOutputOrientationModeFixedLandscape

    该模式下 SDK 固定输出横屏模式的视频。如果采集到的视频是竖屏模式,则视频编码器会对其进行裁剪。该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。

  • kNERtcVideoOutputOrientationModeFixedPortrait

    该模式下 SDK 固定输出竖屏模式的视频,如果采集到的视频是横屏模式,则视频编码器会对其进行裁剪。该模式适用于当接收端无法调整视频方向时,例如旁路推流场景。

设置镜像模式

您可以通过 mirror_mode 参数来设置视频编码的镜像模式,影响远端用户看到的视频画面。

默认情况下,桌面端编码时关闭镜像模式。

示例代码

请确保已在项目中实现了基本的音视频通信或直播功能。 使用 setVideoConfig 方法来设置视频相关的属性,比如分辨率、码率、帧率等。配置中的具体含义请参考 NERtcVideoConfig 定义。

C++// 场景一:设置使用预定义的配置kNERtcVideoProfileHD1080P
NERtcVideoConfig config;
videoConfig.max_profile = kNERtcVideoProfileHD1080P;
videoConfig.width = 0;
videoConfig.height = 0;
videoConfig.crop_mode_ = kNERtcVideoCropModeDefault;
videoConfig.framerate = kNERtcVideoFramerateFpsDefault; 
videoConfig.min_framerate = 15; 
videoConfig.bitrate = 0; 
videoConfig.min_bitrate = 0;
videoConfig.degradation_preference = kNERtcDegradationDefault; 
rtc_engine_->setVideoConfig(config); //设置本地视频参数

// 场景二:设置使用自定义的分辨率
NERtcVideoConfig config;
videoConfig.max_profile = kNERtcVideoProfileHD1080P; // width & height不为0,该字段设置无效。
videoConfig.width = 900;
videoConfig.height = 600;
videoConfig.crop_mode_ = kNERtcVideoCropModeDefault;
videoConfig.framerate = 24; // 设置24帧采集
videoConfig.min_framerate = 15; // 设置最低15帧采集
videoConfig.bitrate = 0; 
videoConfig.min_bitrate = 0;
videoConfig.degradation_preference = kNERtcDegradationDefault; 
rtc_engine_->setVideoConfig(config); //设置本地视频参数

Profile 档位对应分辨率

在不同的裁剪模式下,SDK 预设的 Profile 模式对应不同的分辨率,主要表现为:

视频 Profile 模式 16:9 4:3 1:1 默认
Lowest 160 × 90 160 × 120 120 × 120 160 x 120
Low 320 × 180 320 × 240 240 × 240 320 x 240
Standard 640 x 360 640 x 480 480 x 480 640 x 480
720P 1280 x 720 960 x 720 720 x 720 1280 x 720
1080P 1920 x 1080 1440 x 1080 1080 x 1080 1920 x 1080

分辨率、帧率和码率推荐表

在大多数场景下,您可以根据实际业务场景中的视频窗口的大小去配置分辨率、帧率、码率,以控制带宽压力及编解码的资源消耗。 在自定义视频编码参数的过程中,您也可以参考下表对这些参数进行自定义配置。

注意:下表中的视频参数推荐仅适用于 Native 端,即 Android、iOS、Windows、macOS、 Linux 平台。

|分辨率|帧率(fps)|通信场景码率(kbps)|直播场景码率(kbps)| |:--|:--|:--|:--| |90 x 90|30|49|73| |90 x 90|15|32|48| |120 x 90|30|61|91| |120 x 90|15|40|60| |120 x 120|30|75|113| |120 x 120|15|50|75| |160 x 90|30|75|113| |160 x 90|15|50|75| |160 x 120|30|94|141| |160 x 120|15|62|93| |180 x 180|30|139|208| |180 x 180|15|91|137| |240 x 180|30|172|259| |240 x 180|15|113|170| |240 x 240|30|214|321| |240 x 240|15|141|212| |320 x 180|30|214|321| |320 x 180|15|141|212| |320 x 240|30|259|389| |320 x 240|15|175|263| |360 x 360|30|393|590| |360 x 360|15|259|389| |424 x 240|15|217|325| |480 x 360|30|488|732| |480 x 360|15|322|483| |480 x 480|30|606|909| |480 x 480|15|400|600| |640 x 360|30|606|909| |640 x 360|15|400|600| |640 x 480|30|752|1128| |640 x 480|15|496|744| |720 x 720|30|1113|1670| |720 x 720|15|734|1102| |848 x 480|30|929|1394| |720 x 720|15|613|919| |960 x 720|30|1382|2073| |960 x 720|15|911|1367| |1080 x 1080|30 |2046|3069| |1080 x 1080|15|1350|2025| |1280 x 720|30|1714|2572| |1280 x 720|15|1131|1697| |1440 x 1080|30|2538|3808| |1440 x 1080|15 |1675|2512| |1920 x 1080|30|3150|4725| |1920 x 1080|15|2078|3117|

此文档是否对你有帮助?
有帮助
去反馈
  • 注意事项
  • 设置视频编码分辨率、码率和帧率
  • 设置 Profile 模式
  • 自定义设置
  • 设置适应性偏好
  • 设置旋转方向模式
  • 设置镜像模式
  • 示例代码
  • Profile 档位对应分辨率
  • 分辨率、帧率和码率推荐表