功能描述
根据终端用户的设备、浏览器、网络状况和实际应用场景设置视频属性,调整视频的清晰度和流畅度,给用户带来最好的体验。
视频属性配置包含了对分辨率、帧率和码率等设置。
- 分辨率是图像的高/宽像素值
- 帧率影响画面流畅度
- 码率是视频文件在单位时间内使用的数据流量。码率越大,数据流精度就越高,视频画面更清晰画质更高
码率并不是越高越好的。在实时互动中,码率过高可能挤占带宽产生网络拥塞,从而引发丢包,反过来破坏了用户体验。因此,选择合适的分辨率、帧率和码率设置视频很关键。
功能实现
Web SDK 提供了以下方法创建本地视频轨道 localVideoTrack
。
方法 | 描述 |
---|---|
createCameraVideoTrack | 通过摄像头创建视频轨道 |
createScreenVideoTrack | 通过屏幕共享创建视频轨道 |
createCustomVideoTrack | 创建自定义视频轨道 |
在创建视频轨道时配置 encoderConfig 参数来调整视频的属性配置,该参数支持两种设置。
- SDK 预设的视频属性配置
- 自定义视频属性配置
SDK 预设的视频属性配置
下方仅列举了一些常用配置,详见 VideoEncoderConfigurationPreset
预设视频属性 | 配置 |
---|---|
120p_1 | 分辨率 160 * 120 (宽 * 高),帧率 15 fps,码率约 65 Kbps |
180p_1 | 分辨率 320 * 180 (宽 * 高),帧率 15 fps,码率约 140 Kbps |
240p_1 | 分辨率 320 * 240 (宽 * 高),帧率 15 fps,码率约 200 Kbps |
360p_1 | 分辨率 640 * 360 (宽 * 高),帧率 15 fps,码率约 400 Kbps |
480p_1 | 分辨率 640 * 480 (宽 * 高),帧率 15 fps,码率约 500 Kbps |
720p_1 | 分辨率 1280 * 720 (宽 * 高),帧率 15 fps,码率约 1130 Kbps |
1080p_1 | 分辨率 1920 * 1080 (宽 * 高),帧率 15 fps,码率约 2080 Kbps |
1440p_1 | 分辨率 2560 * 1440 (宽 * 高),帧率 30 fps,码率约 4850 Kbps |
4K_1 | 分辨率 3840 * 2160 (宽 * 高),帧率 30 fps,码率约 8910 Kbps |
创建视频轨道时使用预设配置
示例
// 创建分辨率 1280 * 720 (宽 * 高),帧率 15 fps,码率约 1130 Kbps 的视频轨道
ArRTC.createCameraVideoTrack({
encoderConfig: "720p_1",
}).then(localVideoTrack => { /** ... **/ });
视频轨道创建后调整预设配置
通过视频轨道提供的 setEncoderConfiguration 方法传入相关配置来重置视频轨道属性
示例
// 视频轨道调整为分辨率 640 * 480 (宽 * 高),帧率 15 fps,码率约 500 Kbps
localVideoTrack.setEncoderConfiguration("480p_1").then(() => { /** ... **/ });
自定义视频属性配置
自定义视频属性配置包含以下参数,详见 videoEncoderConfiguration
自定义视频属性 | 描述 (支持传入 number ) |
---|---|
width | 视频的分辨率宽 |
height | 视频的分辨率高 |
frameRate | 视频帧率,单位为 fps |
bitrateMin | 传输过程中的最小码率,单位为 Kbps |
bitrateMax | 传输过程中的最大码率,单位为 Kbps |
width
、height
、frameRate
都支持指定一个范围和参考值,具体配置参考 ConstrainLong
创建视频轨道时使用自定义视频属性配置
示例
// 视频轨道调整为分辨率 640 * 480 (宽 * 高),帧率 15 fps,码率约 500 Kbps
ArRTC.createCameraVideoTrack({
encoderConfig: {
width: 640,
// 支持指定一个范围和参考值,具体配置参考相关 API 文档
height: { ideal: 480, min: 400, max: 500 },
frameRate: 15,
bitrateMin: 600, bitrateMax: 1000,
},
}).then(localVideoTrack => {/** ... **/ });
视频轨道创建后调整自定义视频属性配置
通过视频轨道提供的 setEncoderConfiguration 方法传入相关配置来重置视频轨道属性
示例
// 视频轨道调整为分辨率 1280 * 720 (宽 * 高)
localVideoTrack.setEncoderConfiguration({ width: 1280, height: 720 }).then(() => {
});
API 参考
- createCameraVideoTrack
- createScreenVideoTrack
- createCustomVideoTrack
- videoEncoderConfiguration
- setEncoderConfiguration
常用分辨率、帧率和码率
视频属性的选择要根据产品实际情况来确定。比如,如果是 1 对 1,老师和学生的窗口比较大,要求分辨率会高一点,随之帧率和码率也要高一点;如果是 1 对 4, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。
一般可按以下场景推荐值进行设置。
- 2 人视频通话场景:
- 分辨率 320 x 240、帧率 15 fps、码率约 200 Kbps
- 分辨率 640 x 360、帧率 15 fps、码率约 400 Kbps
- 多人视频通话场景:
- 分辨率 160 x 120、帧率 15 fps、码率约 65 Kbps
- 分辨率 320 x 180、帧率 15 fps、码率约 140 Kbps
- 分辨率 320 x 240、帧率 15 fps、码率约 200 Kbps
你可以参考预设的视频属性配置 videoencoderconfigurationpreset 进行自定义设置。
注意事项
- 调用 createCustomVideoTrack 创建自定义视频轨道时,只能设置发送码率,无法设置其他编码属性。
- 对于调用 createCameraVideoTrack 创建摄像头视频轨道时,可以调用 CameraVideoTrack.setEncoderConfiguration 方法动态调整视频属性。在已发布状态也可以调用。
- 如果不传
encoderConfig
参数 ,SDK 将默认使用预设视频属性 "480p_1"。 - 不同的浏览器对分辨率的支持可能不同,具体的支持情况详见 分辨率和浏览器对照表。
- 由于设备和浏览器的限制,部分浏览器对设置的分辨率不一定能全部适配。这种情况下浏览器会自动调整分辨率,计费也将按照实际分辨率计算。
- 采集或改变摄像头分辨率时,如果超出硬件可采集的分辨率范围,系统会自动设置一个推荐的分辨率。
- 视频能否达到 1080p 以上的分辨率取决于设备的性能,在性能配备较低的设备上有可能无法实现。如果采用 720p 分辨率而设备性能跟不上,则有可能出现帧率过低的情况。
- Safari 浏览器视频帧率为 30 fps,不支持自定义视频帧率。
- 动态修改视频属性仅支持 Chrome 63 及以上版本和 Safari 11 及以上版本。在部分 iOS 设备上动态修改视频属性可能会导致视频出现黑边。