设置视频属性
在视频通话前,开发者可以根据不同场景下的用户喜好与需求,对视频属性进行设置,调整发送视频画面的清晰度以及流畅度,带给用户最优的通话体验。 视频属性通常包含分辨率、帧率、码率的档位,裁剪模式等参数。
Android
NERTC SDK 通过 setLocalVideoConfig 设置视频属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。
注意事项
- NERTC SDK 会根据实时网络环境,对设置的参数作自适应调整,通常会下调参数。
- 本文中各参数的设置可能会影响计费。
- 如果同时设置 Profile 模式和自定义分辨率、码率和帧率,将以自定义设置为准。
设置视频编码分辨率、码率和帧率
此处设置的数值均为理想情况下的最大值,实际场景中,如果视频引擎因网络环境或设备采集能力等原因无法达到设置的分辨率、帧率或码率的最大值时,会根据设备采集能力自动向下取值。
设置 Profile 模式
您可以直接使用 SDK 预设的 Profile 模式,NERTC SDK 会根据当前场景和网络状况为您调整各项参数的取值。通过 videoProfile 属性设置本地视频发送的最大 Profile 类型,默认为 NERtcConstants.VideoProfile#STANDARD。目前支持设置的模式如下:
视频 Profile 模式 | 默认分辨率 | 帧率(fps) | 通信场景码率(Kbps) | 直播场景码率(Kbps) |
NERtcConstants.VideoProfile#LOWEST | 160 x 120 | 15 | 62 | 93 |
NERtcConstants.VideoProfile#LOW | 320 x 240 | 15 | 175 | 263 |
NERtcConstants.VideoProfile#STANDARD | 640 x 480 | 30 | 752 | 1128 |
NERtcConstants.VideoProfile#HD720P | 1280 x 720 | 30 | 1714 | 2572 |
NERtcConstants.VideoProfile#HD1080p | 1920 x 1080 | 30 | 3150 | 4725 |
注意:
- videoProfile 属性支持设置摄像头采集数据和自定义视频输入的 Profile 模式,如果是自定义的外部数据源,会根据选择的 videoProfile 进行分辨率缩放,例如设置为 NERtcConstants.VideoProfile#STANDARD,自定义输入的视频数据分辨率为 720 x 720,则会缩放到 360 x 360。
- 不同裁剪模式下,Profile 档位的对应分辨率不同,其他裁剪模式的对应分辨率请参考Profile 档位对应分辨率。
自定义设置
如果预设模式无法满足您的需求,您还可以通过以下方式自定义视频编码的分辨率、码率或帧率。通过以下参数自定义设置后,videoProfile 属性设置将被覆盖。
分辨率
- 视频编码的分辨率可以用来衡量编码质量,通常情况下分辨率越高,视频越清晰。
通过 width 和 height 设置摄像头采集视频的编码分辨率(px)。默认为 640 x 360,取值范围为64x64 ~ 1920 x 1080,如果设置取值范围以外的数值,则保持默认设置,即 640 x 360。
注意:
- 只支持针对摄像头采集的数据设置视频编码分辨率,如果是自定义的外部数据源,请通过 videoProfile 选择 SDK 预设的 Profile 模式。
- 如果 width 和 height 任一参数设置为 0,则使用 videoProfile 设置的分辨率。
- 帧率
- 视频编码帧率(fps)指是每秒钟编码多少帧画面。
- 通过 frameRate 可以设置视频编码帧率。
- 码率
- 码率(Bitrate)指每秒钟编码器输出多少 Kbit 的编码后的二进制数据。
- 通过 bitrate 可以设置视频编码码率。
视频的分辨率、码率和帧率并不是越高越好,三者之间需要维持一个平衡的映射关系关系,您可以参考分辨率、帧率和码率推荐表设置分辨率和码率。
设置适应性偏好
在弱网环境下,视频的清晰度和流畅度可能无法兼顾,为保证音视频通话或互动直播场景下的视频体验,您可以通过 degradationPrefer 参数设置带宽受限时视频编码的适应性偏好。
参数 | 描述 |
DEGRADATION_BALANCED | 在编码帧率和视频质量之间保持平衡。 |
DEGRADATION_DEFAULT | 根据场景模式调整适应性偏好。
|
DEGRADATION_MAINTAIN_FRAMERATE | 流畅优先,降低视频质量以保证编码帧率。在弱网环境下,降低视频清晰度以保证视频流畅,此时画质降低,画面会变得模糊,但可以保持视频流畅。 |
DEGRADATION_MAINTAIN_QUALITY | 清晰优先,降低编码帧率以保证视频质量。在弱网环境下,降低视频帧率以保证视频清晰,此时可能会出现一定卡顿。 |
设置镜像模式
NERTC 支持设置本地视频画布的镜像模式,即画面是否左右翻转。通过 NERtcVideoView.setMirror 设置为 true 表示开启镜像模式,默认情况下镜像模式为关闭状态。
Android端的镜像模式仅影响本地用户所见。
示例代码
// 配置一个 NERtcVideoConfig 实例,参数可参考下文中的 API 参考链接
NERtcVideoConfig videoConfig = new NERtcVideoConfig();
videoConfig.frontCamera = mFrontCamera;
videoConfig.videoProfile = mVideoProfile;
videoConfig.width = mVideoWidth;
videoConfig.height = mVideoHeight;
videoConfig.videoCropMode = mVideoCropMode;
videoConfig.colorFormat = mVideoColorFormat;
videoConfig.frameRate = mVideoFps;
videoConfig.minFramerate = mVideoMinFps;
videoConfig.degradationPrefer = mVideoDegradation;
videoConfig.bitrate = mVideoEncodeBitrate;
videoConfig.minBitrate = mVideoEncodeMinBitrate;
NERtcEx.getInstance().setLocalVideoConfig(videoConfig); //设置本地视频参数
iOS
NERTC SDK 通过 setLocalVideoConfig 设置视频属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。
注意事项
- NERTC SDK 会根据实时网络环境,对设置的参数作自适应调整,通常会下调参数。
- 本文中各参数的设置可能会影响计费。
- 如果同时设置 Profile 模式和自定义分辨率、码率和帧率,将以自定义设置为准。
设置视频编码分辨率、码率和帧率
此处设置的数值均为理想情况下的最大值,实际场景中,如果频引擎因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,会自动向下取值。
设置 Profile 模式
您可以直接使用 SDK 预设的 Profile 模式,NERTC SDK 会根据当前场景和网络状况为您调整各项参数的取值。通过 maxProfile 属性设置本地视频发送的最大 Profile 类型,默认为 kNERtcVideoProfileStandard 。目前支持设置的模式及对应分辨率如下:
视频 Profile 模式 | 分辨率 | 帧率(fps) | 通信场景码率(Kbps) | 直播场景码率(Kbps) |
kNERtcVideoProfileLowest | 160 x 90 | 15 | 75 | 113 |
kNERtcVideoProfileLow | 320 x 180 | 15 | 141 | 212 |
kNERtcVideoProfileStandard | 640 x 360 | 30 | 606 | 909 |
kNERtcVideoProfileHD720P | 1280 x 720 | 30 | 1714 | 2572 |
kNERtcVideoProfileHD1080P | 1920 x 1080 | 30 | 3150 | 4725 |
注意:
- maxProfile 属性支持设置摄像头采集数据和自定义视频输入的 Profile 模式,如果是自定义的外部数据源,会 根据选择的 maxProfile 进行分辨率缩放,例如设置为 kNERtcVideoProfileStandard ,自定义输入的视频数据分辨率为 720 x 720,则会被缩放为 360 x 360。
- 不同裁剪模式下,Profile 档位的对应分辨率不同,其他裁剪模式的对应分辨率请参考Profile 档位对应分辨率。
自定义设置
如果预设模式无法满足您的需求,您还可以通过以下方式自定义视频编码的分辨率、码率或帧率。通过以下参数自定义设置后,maxProfile 属性设置将被覆盖。
分辨率
- 视频编码的分辨率可以用来衡量编码质量,通常情况下分辨率越高,视频越清晰。
通过 width 和 height 设置摄像头采集视频的编码分辨率(px)。默认为 640x360,取值范围为64x64 ~ 1920 x 1080,如果设置取值范围以外的数值,则保持默认设置,即640x360。
注意:
- 只支持针对摄像头采集的数据设置视频编码分辨率,如果是自定义的外部数据源,请通过 maxProfile 选择 SDK 预设的 Profile 模式。
- 如果 width 和 height 任一参数设置为 0,则使用 maxProfile 设置的分辨率。
- 帧率
- 视频编码帧率(fps)指是每秒钟编码多少帧画面。
- 通过 frameRate 可以设置视频编码帧率。
- 码率
- 码率(Bitrate)指每秒钟编码器输出多少 Kbit 的编码后的二进制数据。
- 通过 bitrate 可以设置视频编码码率。
视频的分辨率、码率和帧率并不是越高越好,三者之间需要维持一个平衡的映射关系关系,您可以参考分辨率、帧率和码率推荐表设置分辨率和码率。
设置适应性偏好
在弱网环境下,视频的清晰度和流畅度可能无法兼顾,为保证音视频通话或互动直播场景下的视频体验,您可以通过 degradationPrefer 参数设置带宽受限时视频编码的适应性偏好。
参数 | 描述 |
kNERtcDegradationBalanced | 在编码帧率和视频质量之间保持平衡。 |
kNERtcDegradationDefault | 根据场景模式调整适应性偏好。
|
kNERtcDegradationMaintainFramerate | 流畅优先,降低视频质量以保证编码帧率。在弱网环境下,降低视频清晰度以保证视频流畅,此时画质降低,画面会变得模糊,但可以保持视频流畅。 |
kNERtcDegradationMaintainQuality | 清晰优先,降低编码帧率以保证视频质量。在弱网环境下,降低视频帧率以保证视频清晰,此时可能会出现一定卡顿。 |
设置镜像模式
NERTC 支持设置本地视频画面和远端视频画面的镜像模式,即画面是否左右翻转。
设置本地视频画面的镜像模式:setupLocalVideoCanvas - NERtcVideoCanvas 中的 mirrorMode 设置为 kNERtcVideoMirrorModeEnabled 表示开启镜像模式。
默认情况下 SDK 根据视频采集设备自动选择是否开启镜像模式,视频采集设备为前置摄像头时,开启镜像模式,使用后置摄像头或外部视频采集设备时关闭镜像模式。
- 设置远端视频画面的镜像模式:setupRemoteVideoCanvas- NERtcVideoCanvas 中的 mirrorMode 设置为 kNERtcVideoMirrorModeEnabled 表示开启镜像模式,默认情况下镜像模式为关闭状态。
示例代码
请确保已在项目中实现了基本的音视频通信或直播功能。 使用 setLocalVideoConfig 方法来设置视频相关的属性,比如分辨率、码率、帧率等。配置中的具体含义请参考 NERtcVideoProfileType 定义。
NERtcEngine *coreEngine = [NERtcEngine sharedEngine];
NERtcVideoEncodeConfiguration *config = [[NERtcVideoEncodeConfiguration alloc] init];
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];//设置本地视频参数
[coreEngine enableDualStreamMode:mVideoDual];//是否开启小流
Windows/macOS
NERTC SDK 通过 setVideoConfig 设置视频属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。
注意事项
- NERTC SDK 会根据实时网络环境,对设置的参数作自适应调整,通常会下调参数。
- 本文中各参数的设置可能会影响计费。
- 如果同时设置 Profile 模式和自定义分辨率、码率和帧率,将以自定义设置为准。
设置视频编码分辨率、码率和帧率
此处设置的数值均为理想情况下的最大值,实际场景中,如果频引擎因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,会自动向下取值。
设置 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 |
CustomProfile | 可自定义设置分辨率的宽和高,仅适用于桌面端屏幕共享场景。 |
注意:
- max_profile 属性支持设置摄像头采集数据和自定义视频输入的 Profile 模式,如果是自定义的外部数据源,会根据选择的 max_profile 进行分辨率缩放,例如设置为 kNERtcVideoProfileStandard ,自定义输入的视频数据分辨率为 720 x 720,则会被缩放为 480 x 480。
- 不同裁剪模式下,Profile 档位的对应分辨率不同,其他裁剪模式的对应分辨率请参考Profile 档位对应分辨率。
自定义设置
如果预设模式无法满足您的需求,您还可以通过以下方式自定义视频编码的分辨率、码率或帧率。通过以下参数自定义设置后,max_profile 属性设置将被覆盖。
分辨率
- 视频编码的分辨率可以用来衡量编码质量,通常情况下分辨率越高,视频越清晰。
通过 width 和 height 设置摄像头采集视频的编码分辨率(px)。默认为 640 x 480,取值范围为64x64 ~ 1920 x 1080,如果设置取值范围以外的数值,则保持默认设置,即640 x 480。
注意:
- 只支持针对摄像头采集的数据设置视频编码分辨率,如果是自定义的外部数据源,请通过 max_profile 选择 SDK 预设的 Profile 模式。
- 如果 width 和 height 任一参数设置为 0,则使用 maxProfile 设置的分辨率。
- 帧率
- 视频编码帧率(fps)指是每秒钟编码多少帧画面。
- 通过 framerate 可以设置视频编码帧率。
- 码率
- 码率(Bitrate)指每秒钟编码器输出多少 Kbit 的编码后的二进制数据。
- 通过 bitrate 可以设置视频编码码率。
视频的分辨率、码率和帧率并不是越高越好,三者之间需要维持一个平衡的映射关系关系,您可以参考分辨率、帧率和码率推荐表设置分辨率和码率。
设置适应性偏好
在弱网环境下,视频的清晰度和流畅度可能无法兼顾,为保证音视频通话或互动直播场景下的视频体验,您可以通过 degradation_preference 参数设置带宽受限时视频编码的适应性偏好。
参数 | 描述 |
kNERtcDegradationBalanced | 在编码帧率和视频质量之间保持平衡。 |
kNERtcDegradationDefault | 根据场景模式调整适应性偏好。
|
kNERtcDegradationMaintainFramerate | 流畅优先,降低视频质量以保证编码帧率。在弱网环境下,降低视频清晰度以保证视频流畅,此时画质降低,画面会变得模糊,但可以保持视频流畅。 |
kNERtcDegradationMaintainQuality | 清晰优先,降低编码帧率以保证视频质量。在弱网环境下,降低视频帧率以保证视频清晰,此时可能会出现一定卡顿。 |
示例代码
请确保已在项目中实现了基本的音视频通信或直播功能。 使用 setVideoConfig 方法来设置视频相关的属性,比如分辨率、码率、帧率等。配置中的具体含义请参考 NERtcVideoConfig 定义。
// 场景一:设置使用预定义的配置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;
nrtc_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;
nrtc_engine_->setVideoConfig(config); //设置本地视频参数
nrtc_engine_->enableDualStreamMode(true); //设置是否支持小流
Web
云信 Web SDK 通过 setVideoProfile 接口支持设置视频属性。在 localStream.init() 或者 localStream.open() 接口之前调用生效。
- resolution:设置的视频分辨率。
- frameRate:设置的视频码率。
注意事项
- NERTC SDK 会根据实时网络环境,对设置的参数作自适应调整,通常会下调参数。
- 本文中各参数的设置可能会影响计费。
设置视频分辨率
视频分辨率可以用来衡量视频质量,通常情况下分辨率越高,视频越清晰。 通过 resolution 参数设置视频分辨率,支持设置的模式如下:
resolution可选值 | 类型 | 说明 |
---|---|---|
WebRTC2.VIDEO_QUALITY_180p | number | 视频默认分辨率 320x180 |
WebRTC2.VIDEO_QUALITY_480p | number | 视频低分辨率 640x480 |
WebRTC2.VIDEO_QUALITY_720p | number | 视频中分辨率 1280x720 |
WebRTC2.VIDEO_QUALITY_1080p | number | 视频高分辨率 1920x1080 |
设置视频帧率
视频编码帧率(fps)指是每秒钟编码多少帧画面。通过 frameRate 可以设置视频编码帧率。支持设置的值如下:
frameRate可选值 | 类型 | 说明 |
---|---|---|
WebRTC2.CHAT_VIDEO_FRAME_RATE_5 | number | 视频通话帧率,最大取每秒5帧 |
WebRTC2.CHAT_VIDEO_FRAME_RATE_10 | number | 视频通话帧率,最大取每秒10帧 |
WebRTC2.CHAT_VIDEO_FRAME_RATE_15 | number | 视频通话帧率,最大取每秒15帧 |
WebRTC2.CHAT_VIDEO_FRAME_RATE_20 | number | 视频通话帧率,最大取每秒20帧 |
WebRTC2.CHAT_VIDEO_FRAME_RATE_25 | number | 视频通话帧率,最大取每秒25帧 |
示例代码
rtc.localStream.setVideoProfile({
resolution: WebRTC2.VIDEO_QUALITY_480p,
frameRate: WebRTC2.CHAT_VIDEO_FRAME_RATE_5
})
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 平台。
分辨率 | 帧率(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 |


此文档对你是否有帮助

