音视频入门/音视频基础

直播产品的种类:

泛娱乐化直播:

       花椒,映客等娱乐直播, 斗鱼,熊猫,yy 等游戏直播

实时互动直播

音视频会议,教育直播等, 像思科,全时,声网

直播架构: todo

常用的工具: ffmpeg , ffplay, flashplayer,  

搭建流媒体服务:

准备流媒体服务器(Linux 或 Mac)

编译并安装Nginx 服务

配置RTMP 服务并启动 Nginx 服务

 

声音三要素

音调: 就是音频, 男生  >  女生  >  儿童

音量: 振动的幅度

音色: 它与材质有很大关系, 本质是谐波

音量与音调

图:v-9-声音三要素.jpeg 

音视频入门/音视频基础

 

音色(音品) : v-10-声音三要素.jpeg

 

音视频入门/音视频基础

 

人类的听觉范围: 20Hz —    20kHz

人类的发声范围: 85Hz ——  1100 Hz

 

听觉/发声范围: v-12-声音三要素.jpeg

 

音视频入门/音视频基础

音频量化过程:

模拟数据  —》  采样 —〉 量化 —》  编码 —〉 数字信号

 

量化基本概念:

采样大小: 一个采样用多少bit 存放。常用的是 16bit

采样率:    采样频率 8k, 16k, 32k, 44.1k   , 48k

声道数:   单声道, 双声道, 多声道

 

音频量化过程: v-13-音频量化.jpeg

音视频入门/音视频基础

 

 

码率计算:

要计算一个PCM音频流的 码率  公式如: 采样率 x 采样大小  x 声道数

例如: 采样率为44.KHz,  采样大小为 16bit, 双声道的PCM 编码的WAV 文件? 

它的码率为 44.1K x 16 x 2 = 1411.2 kb/s

音频压缩技术:

目的/手段是:消除冗余数据;

冗余数据包括: 人耳听觉范围外的音频信号,以及被掩蔽掉的音频 信号。

信号的掩蔽分为: 频域掩蔽  和 时域掩蔽

方法: 哈夫曼无损编码

频域掩蔽效应: v-18-音频压缩.jpeg

音视频入门/音视频基础

时域掩蔽效应: v-19-音频压缩.jpeg 

音视频入门/音视频基础

音频编码过程:

v-20-音频压缩.jpeg

音视频入门/音视频基础

 

常见的音频编码器

常见的音频编码器 包括 OPUS,   AAC,  Vorbis, Speex,  iLBC,  AMR, G.711 等。

网上评测结果:     OPUS   >  AAC   >  Vorbis

音频编码器性能对比:

v-22-音频编码器.jpeg

音视频入门/音视频基础

AAC介绍:

AAC( Advanced Audio Coding) 目的是取代MP3 格式;

 

目前常用的规格有:  

AAC  LC  (Low  Complexity) 

AAC   HE  V1  ( AAC  +  SBR 技术)

AAC   HE  V2( AAC + SBR技术 +  PS技术)

 

SBR (Spectral Band Replication)

PS( Parametric Stereo)

 

AAC 格式 有哪些?

ADIF ( Audio Data Interchange Format )   //这种格式只能从头开始解码,常用在磁盘文件中。

ADTS(Audio Data Transport Stream)        //这种格式每一帧都有一个同步字,可以在音频流的任何位置开始解码,它类似数据流格式

 

AAC 编码库那个好?

 

Libfdk_AAC  > ffmpeg AAC  > libfaac > libvo_aacenc

 

H264 基本概念

I 帧:  关键帧, 采用帧内压缩技术。

P 帧 :  向前参考帧, 压缩时只参考前一个帧, 属于帧间压缩技术。

B 帧 : 双向参考帧,压缩时既参考前一帧,也参考后一帧,帧间压缩技术。

GOF  : 一组帧的 结构 如图:v-29-视频.jpeg

音视频入门/音视频基础

SPS  与 PPS

SPS   Sequence Parameter Set , 序列参数集 ; 存放帧数,参考帧数目, 解码图像尺寸, 帧场编码模式选择标识等。

PPS   Picture Parameter Set, 图像参数集; 存放熵编码模式选择标识, 片组数组,初始量化参数,去方块滤波系数调整标识等。

 

视频花屏/卡顿 原因

如果 GOP分组中的P 帧 丢失会造成解码端的图像发生错误。

为了避免花屏问题的发生,一般如果发现P帧 或者I帧 丢失,就不显示本 GOP内的所有帧, 直到下一个 I 帧来后重新刷新图像。

 

视频都有哪些视频编码器?

x264/x265

openH264

vp8/vp9

 

H264压缩技术

帧内预测压缩,解决的是 空域数据冗余 问题 

帧间预测压缩, 解决的是  时域数据 冗余问题

整数离散余弦变换(DCT);

CABAC压缩。

运动矢量 与补偿压缩;  Motion Vector  + Residual Picture

 

预测模式与残差值压缩:

Prediction  Mode  Info  + Residual  Picture

图: v-40-视频.jpeg 

音视频入门/音视频基础

图 : v-41-视频.jpeg

 

 

音视频入门/音视频基础

DCT 压缩:

图: v-42-视频.jpeg

音视频入门/音视频基础

图: v-43-视频.jpeg

音视频入门/音视频基础

VLC压缩, 和 CABAC 压缩

 

H264结构图:

v-45-h264.jpeg

音视频入门/音视频基础

 

H264编码分层:

NAL层:

Network Abstraction Layer, 视频数据网络抽象层

VCL 层:

Video Coding  Layer, 视频数据编码层。

码流基本概念:

SODB  (String Of  Data  Bits;) 原始数据比特流,长度不一定是 8的倍数,它是由VCL层产生的。

RBSP ( Raw Byte Sequence Payload, SODB + trailing bits)  算法是在SODB最后一位补1, 不按字节对齐则补0

EBSP ( Encapsulate  Byte  Sequence Payload);  需要两个连续的0x00  就增加一个0x03

NALU   :  NAL  Header   + EBSP

 

NAL Unit  (简称 NALU): 

包括: NALU头部  + 一个切片

切片 包括  切片头(slice header) + 切片数据(slice data)

切片数据由 很多 MacroBlock (宏块) 组成 ;

MB (MacroBlock) 由 mb_type;  mb_pred;  coded residual  组成

一帧图片 使用 H. 264编码器编码 ,可能可以有多张切片 分出来。

H264码流分层  图 

音视频入门/音视频基础

NAL Header (NALU 头部)

F:  0  // 在 H.264规范中规定了这一位必须为0

NRI :  // 占2位, 指示重要性,暂无用。

Type :   //占5位,这个NALU 单元的类型。 

5   //I 帧,IDR 图像的片

7  //   序列参数集

8  //   图像参数集

 

24   // STAP-A   单一时间的组合包

25   //STAP-B 单一时间的组合包

26 //MTAP16   多个时间的组合包

27 //MTAP24   多个时间的组合包

 

28   //FU-A    ; 分片的单元

29   // FU-B   ; 分片的单元

NAL 类型介绍

单一类型   //一个RTP包  只包含  一个  NALU

组合类型   //一个RTP包   包含多个NALU,   类型是24-27

分片类型   //一个NALU 单元分成多个RTP包,类型是 28和 29

 

单一NALU的RTP包

图:v-57-nal.jpeg

音视频入门/音视频基础

组合NALU的RTP包

图:v-58-nal.jpeg

音视频入门/音视频基础

分片NALU 的  RTP包

图: v-59-nal.jpeg

音视频入门/音视频基础

FU Header  (占一个字节)

S   // start bit, 用于指明分片的开始

E   // end bit, 用于指明分片的结束

R   //0   ; 未使用

Type    //指明  NAL 类型

 

YUV

YUV  也称为  YCbCr :  是电视系统所采用的一种颜色编码方法

Y 表示明亮度/  灰阶值, 它是基础信号。

U 和 V 表示的则是 色度 ,UV的作用 是描述 影像色彩及饱和度,他们用于指定像素的颜色。

 

YUV 常见格式:

YUV4:2:0 (YCbCr  4:2:0)

YUV4:2:2 ( YCbCr  4:2:2)

YUV4:4:4 ( YCbCr  4:4:4)

 

YUV4:2:0

并不意味着只有  Y, Cb 两个分量,没有Cr分量。 它实际上指的是 对每行扫描线来说,只有一种色度分量,它以2:1 的抽样率存储

相邻的扫描行存储不同的色度分量,也就是说,如果一行是 4:2:0, 下一行就是4:0:2, 再下一行是4:2:0  。。。以此类推。

 

YUV存储格式

planar(平面)

I420  :  YYYYYYYY  UU  VV  => YUV420P

YV12 :  YYYYYYYY  VV   UU => YUV420P

 

Packed(打包)

NV12 :  YYYYYYYY   UVUV  => YUV420SP

NV21 :  YYYYYYYY   VUVU  => YUV420SP

称为专业的音频工程师还要学习啥?

音/视频采集;  音/视频硬件 编/解码;  FFMPEG;

视频渲染与 OpenGL  ;   x264 优化;  交叉编译与优化;

WebRTC;  

行业痛点?

视频秒开;  回音消除;  音频降噪; 视频出现花屏/卡顿/绿边;  手机发烫;  音视频同步;