设置视频编码属性

最近更新时间:2022-09-20 05:17:40

功能描述

根据终端用户的设备、浏览器、网络状况和实际应用场景设置视频属性,调整视频的清晰度和流畅度,给用户带来最好的体验。

视频属性配置包含了对分辨率、帧率和码率等设置。

  • 分辨率是图像的高/宽像素值
  • 帧率影响画面流畅度
  • 码率是视频文件在单位时间内使用的数据流量。码率越大,数据流精度就越高,视频画面更清晰画质更高

码率并不是越高越好的。在实时互动中,码率过高可能挤占带宽产生网络拥塞,从而引发丢包,反过来破坏了用户体验。因此,选择合适的分辨率、帧率和码率设置视频很关键。

功能实现

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

widthheightframeRate 都支持指定一个范围和参考值,具体配置参考 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 参考

常用分辨率、帧率和码率

视频属性的选择要根据产品实际情况来确定。比如,如果是 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 设备上动态修改视频属性可能会导致视频出现黑边。