Android

设置视频属性

更新时间: 2022/09/08 14:59:10

NERTC SDK 支持设置视频编码属性设置,本文档为您介绍如何通过 setLocalVideoConfig 方法的 configstreamType 参数自定义设置主流和辅流的视频编码属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。

功能描述

在不同的场景中,用户对于视频清晰度、流畅性等方面的要求各有不同,例如在秀场直播、电商直播等场景中,需要设置适用于直播场景的分辨率、码率、视频旋转模式等参数和能力。NERTC 支持多种视频属性参数配置,适用于不同场景的画质、流畅性的需求,以便您根据不同场景下的用户喜好与需求,调整发送视频画面的清晰度以及流畅度,带给用户最优的通话体验。

前提条件

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

注意事项

  • 本文中各参数的设置可能会影响计费。
  • NERTC SDK 会根据实时网络环境,对设置的参数作自适应调整,通常会下调参数。
  • NERTC SDK 支持在加入房间通话中后,您根据实际场景变化动态调用 setLocalVideoConfig 方法。
  • setLocalVideoConfig 为全量参数配置接口,重复调用此接口时,SDK 会刷新此前的所有参数配置,以最新的传参为准。所以每次修改配置时都需要设置所有参数,未设置的参数将取默认值。

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

您可以自定义视频编码的分辨率、码率或帧率,各参数的设置方法如下。

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

  • 分辨率
    • 视频编码的分辨率可以用来衡量编码质量,通常情况下分辨率越高,视频越清晰。
    • 通过 widthheight 设置摄像头采集视频的编码分辨率(px)。默认为 640 x 360,取值范围为 64 x 64 ~ 1920 x 1080,如果设置取值范围以外的数值,则保持默认设置,即 640 x 360。
  • 帧率
    • 视频编码帧率(fps)指是每秒钟编码多少帧画面。
    • 通过 frameRate 可以设置视频编码帧率。
  • 码率
    • 码率(Bitrate)指每秒钟编码器输出多少 Kbit 的编码后的二进制数据。
    • 通过 bitrate 可以设置视频编码码率。

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

设置适应性偏好

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

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

设置旋转方向模式

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

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

  • kNERtcVideoOutputOrientationModeAdaptative

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

  • kNERtcVideoOutputOrientationModeFixedLandscape

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

  • kNERtcVideoOutputOrientationModeFixedPortrait

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

若您集成的是 V4.6.0 之前的版本,设置旋转方向后,只会影响远端用户看到的视频画面;若您集成的是 V4.6.0 及之后的版本,设置旋转方向后,会同时影响本端用户的预览画面和远端用户看到的视频画面。

设置镜像模式

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

默认情况下,编码时由 SDK 决定镜像模式。移动端如果使用前置摄像头,则默认开启镜像模式;如果使用后置摄像头,则关闭镜像模式。

NERTC SDK 还支持在设置画布时调整本地和远端视频画面的镜像模式,即画面是否左右翻转。本地设置的视频镜像模式仅影响本地用户所见,不影响远端用户所见。NERtcVideoCanvas 中的 mirrorMode 设置为 kNERtcVideoMirrorModeEnabled 表示开启镜像模式。

示例代码

objective-cNERtcEngine *coreEngine = [NERtcEngine sharedEngine];
NERtcVideoEncodeConfiguration *config = [[NERtcVideoEncodeConfiguration alloc] init];
NERtcStreamChannelType *streamType = kNERtcStreamChannelTypeMainStream; //设置主流
config.width = 640;// 设置分辨率宽
config.height = 360;// 设置分辨率高
config.cropMode = kNERtcVideoCropMode16_9;      // 设置裁剪格式为16:9
config.frameRate = kNERtcVideoFrameRateFps30; //视频帧率
config.minFrameRate = mMinFrameRate; //视频最小帧率
config.bitrate = mBitrate; //视频编码码率
config.minBitrate = mMinBitrate; //视频编码最小码率
config.degradationPreference = kNERtcDegradationDefault; ;//带宽受限时的视频编码降级偏好

[coreEngine setLocalVideoConfig:config,streamType];//设置本地视频参数

[coreEngine enableDualStreamMode:mVideoDual];//是否开启小流

相关参考

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

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

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

分辨率 帧率(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

常见问题

为什么我关闭摄像头后重新打开,原来设置的后置摄像头变成了前置?

此文档是否对你有帮助?
有帮助
去反馈
  • 功能描述
  • 前提条件
  • 注意事项
  • 设置视频编码分辨率、码率和帧率
  • 设置适应性偏好
  • 设置旋转方向模式
  • 设置镜像模式
  • 示例代码
  • 相关参考
  • 分辨率、帧率和码率推荐表
  • 常见问题