视频推流质量配置
功能介绍
本节介绍如何配置本端视频推流质量相关参数(分辨率、帧率、码率等),主要包括:
- 全局配置:通过 CRVideo_SetVideoCfg 设置本端默认编码参数
- 单路私有配置(可选):通过 CRVideo_SetLocVideoAttributes 为指定
videoID单独设置浏览器采集约束
当某路摄像头未设置私有配置时,使用全局 CRVideo_VideoCfg。设备枚举与默认摄像头见 视频设备管理。
注意:
须在成功进入房间后,方可进行视频推流质量配置(CRVideo_SetVideoCfg、CRVideo_SetLocVideoAttributes 等)。
1. 全局视频配置(SetVideoCfg)
全局配置作用于本端视频的默认编码参数;调用 CRVideo_GetVideoCfg 获取当前配置,修改后通过 CRVideo_SetVideoCfg 生效。
CRVideo_VideoCfg 常用字段:
| 参数 | 类型 | 说明 |
|---|---|---|
| width | Number | 画面宽度,须与 height 同时设置或同时不传 |
| height | Number | 画面高度,须与 width 同时设置或同时不传 |
| fps | Number | 帧率,一般 5~30 |
| maxbps | Number | 上送最大码率(bps),可参考 CRVideo_VIDEO_BPS_DEF |
示例:将全局分辨率设为 1280×720、帧率 15,其它参数在现有配置基础上调整:
var cfg = CRVideo_GetVideoCfg();
cfg.width = 1280;
cfg.height = 720;
cfg.fps = 15;
cfg.maxbps = 1200000; // 单位:bps,示例约 1.2Mbps
CRVideo_SetVideoCfg(cfg);
某项传 null 或 0 表示使用 SDK 缺省值;也可传 null 使该项恢复缺省。
注意:
width、height必须同时存在,可两者都不传,但不能只传其中一个。- 建议选择常用分辨率,如 640×360、848×480、1280×720、1920×1080;移动端也按宽 ≥ 高设置,浏览器会自动处理竖屏显示。
- 参数为理想值,具体以浏览器能力为准;不被支持的项可能被调整为合适尺寸、比例或帧率(例如 Chrome 不支持 fps:35 时可能输出 30)。
- 浏览器会根据网络情况动态调整视频编码尺寸,对端收到的画面可能低于本端采集分辨率。
相关 API 请参考:
2. 单路摄像头私有配置(可选)
若希望对某一路摄像头(指定 videoID)单独设置采集参数,可使用 CRVideo_SetLocVideoAttributes。attrs 为 CRVideo_LocVideoAttributes,其中 constraints 参见 MediaTrackConstraints。
注意:
设置 constraints 后,该路设备的 CRVideo_VideoCfg 全局配置对此路不再生效。
var videoID = 1; // 来自 CRVideo_GetAllVideoInfo
var attrs = {
constraints: {
width: { ideal: 1280 },
height: { ideal: 720 },
frameRate: { ideal: 15 }
}
};
CRVideo_SetLocVideoAttributes(videoID, attrs);
var curAttrs = CRVideo_GetLocVideoAttributes(videoID);
videoID 须来自 CRVideo_GetAllVideoInfo。未设置私有配置时,该路使用全局 SetVideoCfg 参数。
相关 API 请参考:
3. 限制与注意
- 分辨率、码率等上限与账号授权及服务端策略有关,请按业务需要合理设置。
- 提高分辨率、帧率、码率会增加 CPU 与上行带宽消耗。
- 部分华为旧机型在高分辨率下打开后置摄像头可能默认启用长焦镜头,可先切换至较低分辨率再切换后置摄像头(参见类型定义说明)。
- 已知在某些低版本iOS设备上(<=18.0),使用1920x1080时,会出现编码异常的情况,请使用1280x720或更低分辨率。
- 推流、开摄像头等流程见 推送视频流。