一、前言
在视频通话或直播时,开发者可以根据需要指定推流和拉流视频相关配置,如视频采集分辨率、视频编码输出分辨率、视频帧率、码率、视图模式和镜像模式。
设置合适的视频分辨率、帧率和码率可以在音视频场景中提供用户更好的使用体验。选择合适镜像模式与视图模式则可以让开发者提供个性化的视频显示模式。
首先介绍一下常用术语:
1. 分辨率:
-
- 视频分辨率:用于度量图像内数据量多少的一个参数,通常表示成 ppi。
- 采集分辨率:指摄像头等采集设备提供的画面分辨率。
- 编码分辨率:指经过编码处理的画面的分辨率。
- 码率:指每秒传输的比特(bit)数,单位为 bps(bit per second)。
- 帧率:单位时间内视频显示帧数的量度单位,测量单位为“每秒显示帧数”(Frame Per Second,fps)。
二、示例源码下载
请参考 下载示例源码 获取源码。
相关源码请查看“/ZegoExpressExample/CommonFeatures/src/main/java/im/zego/commonvideoconfig” 目录下的文件。
三、前提条件
在设置视频配置之前,请确保:
- 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
- 已在 ZEGO 控制台 创建项目,并申请有效的 AppID,详情请参考 控制台 - 项目管理 中的“项目信息”。
四、使用步骤
4.1 修改视频配置
- 详细参数设置
注意:需要在推流(startPublishingStream)前或预览(startPreview)前设置好相关视频配置,在推流后仅支持编码分辨率和码率的修改。
调用 setVideoConfig 接口修改推流视频配置,可通过该接口设置视频帧率、码率、视频采集分辨率和视频编码输出分辨率。若不进行设置,则默认的视频配置如下:
如果拉流端需要拉取 60 帧的流,需要联系技术支持,详情可参考 FAQ ZEGO Express SDK 是否支持拉 60 帧的流。
以设置视频采集分辨率为 360p ,编码分辨率为 360p ,码率为 600 kbps,帧率为 15 fps 为例:
ZegoVideoConfig videoConfig = new ZegoVideoConfig();
videoConfig.captureHeight = 640;
videoConfig.captureWidth = 360;
videoConfig.encodeHeight = 640;
videoConfig.encodeWidth = 360;
videoConfig.fps = 15
videoConfig.bitrate = 600;
// 设置视频配置
ZegoExpressEngine.getEngine().setVideoConfig(videoConfig);
移动端的宽高分辨率与 PC 端的宽高分辨率是相反的,例如移动端 360p 的分辨率为 360x640,而 PC 端 360p 的分辨率为 640x360。
- 使用预设值设置
你也可以使用 ZEGO Express SDK 提供的预设组合值,ZegoVideoConfigPreset 的预设组合值如下:
使用预设值时示例代码如下:
ZegoVideoConfig videoConfig = new ZegoVideoConfig(ZegoVideoConfigPreset.PRESET_1080P);
ZegoExpressEngine.getEngine().setVideoConfig(videoConfig);
4.2 修改视频视图模式
设置视频视图模式前需先停止预览或停止拉流,否则无法生效。
通过修改视图对象 ZegoCanvas 的 “viewMode” 参数可以修改视频的视图模式。目前支持三种视频渲染填充模式:
三种视频渲染填充模式效果如图所示:
说明:
- 上图中展示的原视频分辨率为 300 x 300(宽 x 高),视图大小为 300 x 500(宽 x 高)。
- 上图中原视频尺寸高等于宽,视图尺寸高大于宽,故在 “ASPECT_FIT” 渲染模式下,视频上下出现黑边;若此时视图尺寸宽大于高,则在 “ASPECT_FIT” 渲染模式下,视频左右将会出现黑边。
以设置预览视图模式为 “ASPECT_FIT” 并开始预览为例:
// preview 为 UI 界面上的 SurfaceView/TextureView/SurfaceTexture 对象
previewCanvas = new ZegoCanvas(preview);
// 将视图模式设置为 ASPECT_FIT
previewCanvas.viewMode = ZegoViewMode.ASPECT_FIT;
// 开始预览
engine.startPreview(previewCanvas);
4.3 设置镜像模式
说明:支持在推流前后设置并即时生效。
你可以调用 setVideoMirrorMode 设置本地预览视频以及推送的视频是否开启镜像模式。目前支持如下四种镜像模式:
四种镜像模式的效果如下:
以设置拉流端镜像显示,设置本地预览非镜像显示为例:
engine.setVideoMirrorMode(ZegoVideoMirrorMode.ONLY_PUBLISH_MIRROR);
五、总结
以上就是关于常用视频的配置介绍,合理的配置视频参数可以给用户带来更好的使用体验。