视音频技术基础概念

视音频技术主要包含:封装技术,视频压缩编码技术,音频压缩编码技术,如果考虑到网络传输还包括流媒体协议技术。

视频播放器原理

以播放网络视频为例,需要经过解协议 —解封装—解码视音频—视音频同步(如果播放本地文件则不需要解协议)

视频播放流程


视频编码

视频压缩编码标准:

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。比如MPEG,H.264。

主要视频编码一览(图片有些过时)

主要视频编码一览

MPEG:

采用帧间压缩,仅存储连续帧之间有差别的地方。从而从而达到较大压缩比。

H.264/AVC:

采用事先预测和与MPEG中的P-B帧一样的帧预测方法压缩。它可以根据需要产生适合网络情况传输的视频流,还有更高的压缩比,有更好的图像质量;

两者区别:

1.如果从单个画面清晰度比较,MPEG4有优势;从动作连贯性上的清晰度,H.264有优势。
2.H264算法更加复杂,运行它需要更多的处理器和内存资源,因此对系统要求较高。
3.H264更加灵活,它把一些实现留给了厂商自己去实现。但不同产品之间沟通便成了很大问题(例如通过A公司的编码器,也必须通过A公司的解码器解码)。

H265/HEVC:

基于H.264基础上,对相关技术加以改进,以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。H.265是一种更为高效的编码标准,能够在同等画质效果下将内容的体积压缩得更小,传输时更快更省带宽。

I帧:

关键帧 保留一副完整的画面,解码时只需要本帧数据就可以完成(因为包含完整画面)

P帧:

差别帧 保留这一帧跟之前帧的差别,解码时需要用之前缓存的画面叠加本帧定义的差别,生成最终画面。(P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧:

双向差别帧 保留的是本帧与前后帧的差别,解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面与本帧数据的叠加取得最终的画面。B帧压缩率高,但解码时CPU会比较累。

帧内压缩:

intraframe,当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,帧内一般采用有损压缩算法。

帧间压缩:

interframe,时间压缩(Temporal compression),它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩一般是无损的。

muxing(合成):

将视频流、音频流甚至是字幕流封装到一个文件中(容器格式(FLV,TS))。作为一个信号传输。

码率控制:

多码率:根据当前网络环境自定义码率:


音频编码技术

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。

主要音频编码技术


视频封装格式

TS:一种流媒体封装格式,流媒体封装的好处是不需要加载索引再播放,大大减少了首次载入的延迟,如果片子较长,MP4文件的索引相当大,影响用户体验。

主要封装格式一览
主要封装格式一览

为什么要用TS:

这是因为两个TS片段可以无缝拼接,播放器能够连续播放。

FLV:一种流媒体封装格式,由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,因此FLV成为了当今主流视频格式。

流媒体协议

RTMP:

实时消息传输协议,RTMP协议用于对象、视频、音频的传输,这个协议建立在TCP协议或者轮询HTTP协议之上。
RTMP协议就像一个用来装数据包的容器,这些数据可以是FLV中的视音频数据。一个单个的链接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小传输的。

HLS:
HTTP Live Streaming (HLS) 协议科普扫盲

主要流媒体协议一览

这里写图片描述


流媒体服务器

常用服务器:

SRS:国人开发的优秀开源流媒体服务器系统
BMS:SRS的的商业版
Nginx:免费开源web服务器,常用来配置流媒体服务器。

数据分发:

CDN:内容分发网络,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决internet网络拥挤的状况,提高用户访问网站的响应速度。作用相当于中介。

CDN工作原理:

以请求流媒体数据为例

  1. 上传流媒体到源服务器
  2. 源服务器储存流媒体数据
  3. 客户端播放流媒体,向CDN请求编码后的流媒体数据
  4. CDN响应请求,若节点上没有该流媒体数据存在,则向源服务器继续请求流媒体数据;若节点上已经缓存了该视频文件,则跳到第6步。
  5. 源服务器响应CDN的请求,将流媒体分发到相应的CDN节点上。
  6. CDN将流媒体发送到客户端。

带宽:

在固定的时间可传输的数据总量,比如64位、800MHz的前端总线,它的数据传输率就等64bit×800MHz÷8(Byte)=6.4GB/s

回源:

当有用户访问某一个URL的时候,如果被解析到的那个CDN节点没有缓存相应的内容,或者是缓存已经到期,就会到源服务器获取搜索,如果没有人访问,那么CDN节点不会主动去源站拿。

负载均衡:

由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助,通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立的地回应客户的请求。
均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。
这种集群技术可以用最少的投资获得接近于大型主机的性能。

Qos(带宽管理):

限制每一个组群的带宽,让有限的带宽发挥最大的效用。


[总结]视音频编解码技术零基础学习方法
开发直播app中要了解的原理