美文网首页
(一)音视频基础

(一)音视频基础

作者: yanerly | 来源:发表于2018-11-12 17:50 被阅读52次

    一、什么是CDN网络?

    为了解决用户访问网络资源慢出现的一个技术

    网络慢的原因:

    ①访问的链路过长:比如在东北要访问一个在海南的网络
    ②认为因素:比如三大运营商要求,只能用自己的流量去访问网络

    二、音频相关:

    CDN构成:

    ①边缘结点:用户会先从边缘结点获取服务;
    ②二级结点(主干结点):主要是用于缓存,减轻源站的压力。如果边缘结点没有服务,会先从主干结点上拉取缓存的数据到边缘结点,然后用户再从边缘结点获取数据;
    ③源站:(会有多个源节点)内容提供商会将内容放在源站上。如果边缘结点和主干结点都没有获取到服务,则会访问源站。

    CDN网络.jpg

    常用工具:

    ①ffmpeg (爱芙爱慕派个)
    ②ffplay:也是基于ffmpeg
    ③flashplayer

    音频三要素:

    ①音调(音频)
    ②音量
    ③音色(根材质有关)

    听觉范围:

    ①<20HZ,次声波
    ②20HZ~20KHZ,可以听见的
    ③>20KHZ,超声波

    音频的量化与标准

    量化过程.jpg

    ①采样大小:也就是采样的纵坐标对应的值,表示一个采样用多少位存放。一般为16bit(2^16 = 65535),也可以是8位,但是8位对应的是256,比较小,一般采用16位。
    采样率:一般由8k,16k,32k,44.1k(AAC用这个),48k
    可以把它理解为,要采集的总量,拿44.1k举例,比如说,现在要采集20HZ的,就要采集(44100/20=)2000次,而要采集20KHZ的,就要采集(44100/20000=)2次;

    ③声道:单声道、双声道、多声道(上下左右等都有一个喇叭)

    码率:

    采样率 x 采样大小 x 声道数
    比如:
    采样率为:44.1k
    采用大小为:16bit
    双声道的PCM编码的WAV文件,它的码率为:
    44.1k x 16 x 2=1411.2kb/s--->除以8--->176.4kB/s

    音频的压缩技术:

    • 有损压缩(就是说还原回来的数据和原数据不一样):消除冗余的数据

      • 人耳听不到的声音:<20HZ或 >20kHZ的
      • 被遮蔽掉的声音(受频域和时域的影响)
    • 无损压缩:哈夫曼无损编码


      音频的编码.jpg

    常见的音视频编解码器:

    类型 特点 应用场景
    OPUS 最流行的,内部有两个核心模型:基于口和基于耳,内部自主进行选择 实时互动(口模型),声音乐器等高保真的(耳模型);不适用与泛娱乐化场景,因为泛娱乐化场景中是用的rtmp协议,这个协议可以支持AAC和Speex;
    AAC 泛娱乐化
    Vorbis
    Speex 除了音视频编解码之外,还可以进行回音消除,降噪
    iLBC
    AMR
    G.711 音视频会议会用到固话,固话用的就是G.711和G.712

    性能对比:OPUS>AAC>Vorbis

    AAC(Advanced Audio Coding):

    为什么这么重要?
    ①应用范围广,在泛娱乐化中大部分都是用的这个;
    ②协议的支持:在泛娱乐化中要用的是rtmp协议,而AAC支持这个协议
    ③它的高保真可以保证音频的质量

    目的:取代MP3
    原因:MP3的规范是MPEG-2,这个规范在音频方面的处理是有损压缩,也就是说还原回来的数据和原数据不能一模一样,对音质有损耗;而AAC的损耗更小,且压缩率更高,他是基于MPEG-4规范的;

    规则 全名 特点 码流
    AAC LC Low Complexity 低复杂度, 码流为 128k
    AAC HE V1 AAC LC + SBR(Spectral Band Replication 分频复用) 将一个音频的频带分成两部分:低频和高频,分别进行编码 码流为64k左右
    AAC HE V2 AAC LC + SBR + PS(Parametric Stereo ) 对于双声道来说,只完整保存其中一个声道的音频,另一个只保存差异性的数据就行了,因为两个声道关联性很强,可以通过一些公式,得到原始的数据 码流为32k左右
    格式 全名 特点 区别
    ADIF Audio Data Interchange Format 在一个音频文件的开始加一个头(如:采样大小/采样率/声道数等),之后取出的每一帧都套用这个头去编解码; 只能从头部开始解码,常用在磁盘文件中
    ADTS Audio Data Transport Stream 在音频文件的每一帧签名都加7~9个字节,表示它的采样大小等 可以从任意位置开始解码,类似于数据流格式

    AAC编码库哪个好?

    Libfdk_AAC > ffmpeg AAC > libfaac > libvo_aacenc

    三、视频:

    1.几种帧:
    • I帧:又叫关键帧,也就是一组帧中的第一帧;
    • P帧:向前参考帧,也就是说,他只参考它的前一帧,存的是和前一帧不同的地方,属于帧间压缩;
    • B帧:双向参考帧,它会参考它的前一帧和它的后一帧,存的是前后帧都没有的,不适合实时互动场景
    • GOF:一组帧,在一组帧的前面会有SPS(Sequence Parameter Set,序列参数集)和PPS(Picture Parameter Set,图像参数集)


      gof.jpg
    2.视频花屏和卡顿的原因

    花屏主要是有帧的丢失:比如P帧或者是I帧丢失了;
    卡顿主要是为因为为了解决避免花屏的情况,就把丢失的那一组帧全部扔掉,然后就会卡屏了;

    3.编码器分类:
    名字 特点
    x264/x265 x264的性能更好,x265的压缩比高,但是CPU占用也高,不适合直播
    openH264 是使用的svc,比如说把一帧分成3层(小中大),当网络较差的时候,只发送内核层,较好的时候,多发送异常,这样以此类推,多一层,画质就会更清晰一些
    vp8/vp9 是goole推出的,vp8是基于x264,vp9是基于x265的
    H264编码原理:
    • 压缩技术:

      • 帧内预测压缩,解决空域数据冗余问题,比如一张图片上人眼无法直接感官到的颜色值等;
      • 帧间预测压缩,解决时域上数据冗余的问题,比如在录制视频的时候,会有很大帧的图像是一样的;
      • 整数离散余弦变换(DCH),将空间上的相关性变成频域上的无关的数据然后进行量化;
      • CABAC:上下文适应的无损压缩
    • 宏块划分


      宏划分1.1.jpg
    宏划分2.jpg

    从上面的图中可以看出,整张图宏划分后就是这样的了;

    宏划分3.jpg
    • 分层:

      • NAL层:网络抽象层

      一个帧的拆包和组包都是在这里完成的;(为什么要拆包和组包呢?因为网络的最大传输单元是1500字节,而每一帧大于1500字节,所以得拆包)

      • VCL层:视频编码层
    • 码流:

    名字 特点
    SODB 原始数据比特流,由VCL层产生,不一定是8的倍数
    RBSP SODB + traling bits,在SODB的末尾加1,还不足8位的,补0
    EBSP 压缩流,在帧的开头加一个起始位,一般是16进制的0000 0001或者是00 00 01,因为压缩流中可能也会有连续的0,所以在压缩流中连续的0前面加 0x03;
    NALU NAL头(1个字节)+EBSP
    • NAL单元


      nal单元组成.jpg
    • 切片与宏的关系


      H264切片.jpg
    切片与宏的关系_备注.jpg
    • H264码流分层


      H264码流分层.jpg
    4.NAL(NAL header + body)
    • NAL Header(1个字节8位):
    +---------------+
    |0|1|2|3|4|5|6|7|
    +-+-+-+-+-+-+-+-+
    |F|NRI|   TYPE  |
    

    F:禁止位,在H264中规定必须为0
    NRI:指示重要性,暂时不用
    Type:表示NALU单元的类型,常用的类型有5(IDR图像的片,关键帧的一部分)
    、7(序列参数集 FPS)、8(图像参数集 PPS)、28/29(分片的单元-->分片之后再通过FU Header组合)

    • 单一类型:一个RTP包只包含一个NALU,也就是说一个H264帧中只包含一个片(P帧、B帧)


      单一类型.jpg
    • 组合类型:一个RTP包包含多个NALU(SPS、PPS)


      组合类型.jpg
    • 分片类型:一个NALU单元分成多个RTP包,类型是28,29


      分片类型.jpg
    • FU Header:

    +---------------+
    |0|1|2|3|4|5|6|7|
    +-+-+-+-+-+-+-+-+
    |S|E|R|   TYPE  |
    

    S:分片的开始
    E:分片的结束
    R:未使用,设置为0
    Type:分片NAL的类型

    5.YUV(YCbCr)

    Y:明亮度,又叫灰阶值
    U和V:表示色度,描述影像的色彩及饱和度,用于指定像素的颜色
    用途:还是为了节省存储空间

    常见格式:
    • YUV4:2:0(最常用) ????
    • YUV4:2:2
    • YUV4:4:4
    存储格式:
    • 平面(Planer)

      • I420:YYYYYYYY UU VV-->YUV420P
      • YV12:YYYYYYYY VV UU-->YUV420P
    • 打包(packed)

      • NV12:YYYYYYYY UVUV-->YUV420SP
      • NV21:YYYYYYYY VUVU-->YUV420SP

    后续还要学习的内容:
    ①音视频采集
    ②音视频硬件的编码解码
    ③FFMPEG
    ④视频渲染与opengl
    ⑤x264优化:用于编码,解码用FFMPEG,可以将x264作为一个插件放到FFMPEG中
    ⑥交叉编译与优化
    ⑦WebRTC:回音消除等
    ⑧音视频处理架构
    ⑨网络传输

    面试问题:
    ①视频秒开
    ②回音消除(打开外放后能听到自己的声音)
    ③音频降噪
    ④视频出现花屏/卡顿/绿边
    ⑤手机发烫(虽然是高概率事件)
    ⑥音视频同步

    相关文章

      网友评论

          本文标题:(一)音视频基础

          本文链接:https://www.haomeiwen.com/subject/ntuqfqtx.html