音视频技术扫盲
简介
因本人目前从事音视频sdk的二次封装,因此为了弄清业务的大致流程,更好的与小伙伴们进行交流,迫不得已进行了一波概念上的扫盲……
概念
音视频引擎 视频引擎这一概念的核心是:把视频转码、存储、分发的计算工作迁移到云服务器 采集-处理-编码-推流-解码-渲染
处理
android-gpuimage 音频处理中具体包含混音、降噪和声音特效等处理,视频处理中包含美颜、水印、以及各种自定义滤镜等处理
转码
本质上是一个先解码,再编码的过程,因此转换前后的码流可能遵循相同的视频编码标准,也可能不遵循相同的视频编码标准。
原始视频数据存储空间大,一个 1080P 的 7 s 视频需要 817 MB 原始视频数据传输占用带宽大,10 Mbps 的带宽传输上述 7 s 视频需要 11 分钟 而经过 H.264 编码压缩之后,视频大小只有 708 k ,10 Mbps 的带宽仅仅需要 500 ms ,可以满足实时传输的需求,所以从视频采集传感器采集来的原始视频势必要经过视频编码。
帧内编码和帧间编码
https://blog.qiniu.com/archives/6816
H.265 和 VP9 为代表的新一代编码器
##CDN 推流: CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
最上面一级是中心节点,中间一级是区域节点,边缘节点地理位置分散,为用户提供就近的内容访问服务。
不过毕竟产生内容的推流端在少数,和消费内容端播放端不是一个量级,
推送协议:
下面就先介绍一下都有哪些推送协议,他们在直播领域的现状和优缺点。
- RTMP
- HLS
- WebRTC
- 基于 UDP 的私有协议
- RTMP: 基于 TCP ,传输成本高,在弱网环境丢包率高的情况下问题显著 不支持浏览器推送 Adobe 私有协议,Adobe 已经不再更新
在进行测试之前我们需要明确几个对视频的质量和大小影响最大的参数:帧率、码率和分辨率. 就是在 1 秒钟时间里传输的图片的数,也可以理解为图形处理器每秒钟能够刷新几次,fps。 GOP 组,目前主要是有 I,B,P 帧三种帧格式,I 帧是关键帧,而 B,P 帧是依靠 I 帧存在的。
检测sdk性能
Android:
GC :可以通过 GC 日志记录,Mirror GC 和 Full GC 的频次和时间,Full GC 会造成比较明显的卡顿,需要评估 UI Loop 就是 VSync Loop :反映 SDK 对 App 流畅度的影响,理论上 60 fps 是最流畅的值。
Memory :反映 SDK 占用内存的大小 CPU Usage :反映 SDK 占用计算资源的大小