文档反馈
文档反馈

设置视频属性

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

Android

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

注意事项

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

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

设置 Profile 模式

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

视频 Profile 模式 分辨率 帧率(fps) 通信场景码率(Kbps) 直播场景码率(Kbps)
NERtcConstants.VideoProfile#LOW 320 x 180 15 141 212
NERtcConstants.VideoProfile#STANDARD 640x360 30 606 909
NERtcConstants.VideoProfile#HD720P 1280x720 30 1714 2572
NERtcConstants.VideoProfile#HD1080p 1920x1080 30 3150 4725

注意videoProfile 属性支持设置摄像头采集数据和自定义视频输入的 Profile 模式,如果是自定义的外部数据源,会根据选择的 videoProfile 进行分辨率缩放,例如设置为 NERtcConstants.VideoProfile#STANDARD,自定义输入的视频数据分辨率为 720 x 720,则会缩放到 360 x 360。

自定义设置

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

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

设置适应性偏好

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

示例代码

   // 配置一个 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 设置视频属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。

注意事项

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

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

设置 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
kNERtcVideoProfileMAX 使用 kNERtcVideoProfileHD1080P 的值。

注意maxProfile 属性支持设置摄像头采集数据和自定义视频输入的 Profile 模式,如果是自定义的外部数据源,会 根据选择的 maxProfile 进行分辨率缩放,例如设置为 kNERtcVideoProfileStandard ,自定义输入的视频数据分辨率为 720 x 720,则会被缩放为 360 x 360。

自定义设置

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

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

设置适应性偏好

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

示例代码

请确保已在项目中实现了基本的音视频通信或直播功能。 使用 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 设置视频属性,包括视频编码的分辨率、码率、帧率、适应性偏好等。

注意事项

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

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

设置 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。

自定义设置

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

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

设置适应性偏好

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

示例代码

请确保已在项目中实现了基本的音视频通信或直播功能。 使用 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 参数设置视频分辨率,支持设置的模式如下:

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
})

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

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

注意:下表中的视频参数推荐仅适用于 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
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。