音视频 SDK |合理配置视频参数,提升使用质量
一、前言
在视频通话或直播时,开发者可以根据需要指定推流和拉流视频相关配置,如视频采集分辨率、视频编码输出分辨率、视频帧率、码率、视图模式和镜像模式。
设置合适的视频分辨率、帧率和码率可以在音视频场景中提供用户更好的使用体验。选择合适镜像模式与视图模式则可以让开发者提供个性化的视频显示模式。
首先介绍一下常用术语:
1、分辨率:
- 视频分辨率:用于度量图像内数据量多少的一个参数,通常表示成 ppi。
- 采集分辨率:指摄像头等采集设备提供的画面分辨率。
- 编码分辨率:指经过编码处理的画面的分辨率。
2、码率:指每秒传输的比特(bit)数,单位为 bps(bit per second)。
3、帧率:单位时间内视频显示帧数的量度单位,测量单位为“每秒显示帧数”(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
三种视频渲染填充模式效果如图所示:
说明:
- 上图中展示的原视频分辨率为 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);
五、总结
以上就是关于常用视频的配置介绍,合理的配置视频参数可以给用户带来更好的使用体验。
下期预告:如何让视频画面进行旋转?
音视频 SDK |合理配置视频参数,提升使用质量的更多相关文章
- 干货|浅谈iOS端短视频SDK技术实现
短视频SDK主要包含"视频录制"和"视频编辑"这两个核心功能. 视频录制包括:视频采集.美颜.滤镜.摄像头切换.视音频采集参数设置等功能: 视频编辑包括:视频导 ...
- 史上最全的音视频SDK包分享给大家
史上最全的音视频SDK包分享给大家 概述一下SDK功能: 项目 详情视频通信 支持多种分辨率的视频通信语音通信 提供语音通信,可支持高清宽带语音动态创建房间 可以根据需要,随时创建房间H5 支持 ...
- 快手、抖音、微视类短视频SDK接入教程,7步就能搞定
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 终端部分 按照如下三步操作,可以用 XCode 或者 Android Studio 编译和调试小视频 Ap ...
- 短视频 SDK 架构设计实践
作者简介 孔维乐,七牛云客户端团队 Android 平台高级开发工程师,专注音视频,图形图像领域.OpenGL 专家,先后参与直播推流及连麦 SDK 的开发,主导短视频 SDK 的架构设计与实现, 对 ...
- 如何设计一款优秀的短视频 SDK
2017 年,短视频成为了创业的新风口,各种短视频 App 如雨后春笋般先后上线,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 1. 包体一定要尽可能小 如何做到尽可能的减小 S ...
- 短视频sdk:选择一个靠谱的短视频SDK 你需要了解这些
2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线.随着互联网内容消费升级,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 为了能够更好地聚焦于业 ...
- Android短视频SDK转码实践
一. 前言 一些涉及的基本概念: 转码:一般指多媒体文件格式的转换,比如分辨率.码率.封装格式等: 解复用(demux):从某种封装中分离出视频track和音频track,然后交给后续模块进行处理: ...
- 开发者选择短视频SDK,为何青睐七牛云?
从文字到图片再到视频的互联网内容媒介发展途径,随着 5g 技术的逐渐落地愈发清晰.短视频市场中的角力也随着诸多资本和创业者的涌入,进入到白热化阶段.这样的情况下,选择合适的短视频SDK产品就显得尤为重 ...
- 短视频SDK超级简单易用
超级简单易用的短视频SDK来自RDSDK.COM.锐动天地为开发者提供短视频编辑.视频直播.特效.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨 ...
- 杭州蓝松科技---短视频SDK介绍
蓝松短视频的口号和 更新周期: 我们的口号是: 蓝松短视频 任意个性化. 我们是杭州蓝松科技, 专业做视频短视频SDK的技术团队. 我们提供 Android/IOS平台上的 短视频编辑SDK, ...
随机推荐
- 基于Java网络书店商城设计实现(源码+lw+部署文档+讲解等)
系统介绍: 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势:对于网络书店商城当然也不能排除在外,随着网络技术的不断成熟,带动了网络书店商城,它彻底改变了过去传统 ...
- 渐变边框文字效果?CSS 轻松拿捏!
今天,有个群友问了我这么一个问题,如果不想切图,是否有办法实现带渐变边框的字体效果?如下所示: 本文,就将尝试一下,在 CSS 中,我们可以如何尽可能的实现这种渐变边框字体效果. 元素叠加 首先,比较 ...
- char字符_C
字符的表示 字符类型由单引号' '包围,字符串由双引号" "包围. //正确的写法 char a = '1'; char b = '$'; char c = 'X'; char ...
- Vue 给mapState中定义的属性赋值报错的解决方案
Vue 给mapState中定义的属性赋值报错的解决方案 by:授客 QQ:1033553122 1. 实践环境 Vue 2.9.6 2. 问题描述 <script> import ...
- SpringBoot实战:Spring Boot接入Security权限认证服务
引言 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制的框架,提供了完善的认证机制和方法级的授权功能,是一个非常优秀的权限管理框架.其核心是一组过滤器链,不同的功能经由不 ...
- SSH Exporter:基于Prometheus的远程系统性能监控神器
SSH Exporter English | 中文 介绍 SSH Exporter 是一个基于 Prometheus 规范的监控工具,通过 SSH 协议远程收集目标服务器的系统性能数据,如 CPU 使 ...
- 【MySQL】 批量更改库,表,字段的字符集
库一级的更改: -- 单个库字符集更改 ALTER DATABASE `ymcd_aisw` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; ALTER ...
- 虚拟硬盘系统 —— Windows系统 磁盘加速软件 —— 优缺点以及与真实物理磁盘访问文件的区别
在家里的局域网搞了一个NAS,但是由于磁盘读存速率问题导致远程copy的速度只有15MB/s,而如果NAS中的文件已在内存中有缓存则远程copy的速度为50MB/s. 于是考虑利用内存建立虚拟硬盘: ...
- Google的Jax框架的JAX-Triton目前只能成功运行在TPU设备上(使用Pallas为jax编写kernel扩展)—— GPU上目前无法正常运行,目前正处于 experimental 阶段
使用Pallas为jax编写kernel扩展,需要使用JAX-Triton扩展包.由于Google的深度学习框架Jax主要是面向自己的TPU进行开发的,虽然也同时支持NVIDIA的GPU,但是支持力度 ...
- 树莓派命令行配置wifi密码时如何实现密码加密(密文,非明文)
首先需要知道,树莓派系统(原生系统)的wifi配置文件为: /etc/wpa_supplicant/wpa_supplicant.conf 配置该文件时,psk属性为密码,往往我们都是使用明文来进行配 ...