###音视频直播分成两种架构:
- 泛娱乐化直播架构
- 实时互动直播架构
###泛娱乐化直播架构:
主播端发送信令到信令服务器,申请创建房间,信令服务器创建房间后返回一个流媒体地址给主播,主播将采集的音视频数据形成rtmp流,推送到CDN流媒体云。客户端也要发送信令到信令服务器申请加入房间,信令服务器接收到信令后,将该客户加入主播房间并返回一个流媒体地址给客户端,然后客户通过接收到的流媒体地址从CDN拉取相应的主播的音视频。
###CDN网络介绍
为了解决用户访问网络资源慢问题。
###CDN构成
- 边缘节点:用户从边缘节点上获取数据。
- 二级节点:主干节点,主要用于缓存,减轻源站压力。
- 源站:CP(内容提供方)将内容放到源站。
用户开始从边缘节点获取数据,如果有就直接返回给用户,如果没有就在去从主干节点获取,主干节点如果有,先将数据返给边缘节点,边缘节点缓存数据,然后主干节点将数据返回给用户,主干节点如果没有就从源站获取,实现思路与主干节点一样。
###声音三要素:
- 音调:就是音频,男生->女生->儿童->
- 音量:振动的幅度。
- 音色:它与材质有很大关系,本质是谐波。
###音频量化过程:
###量化基本概念:
- 采样大小:一个采样用多少bit存放。常用的是16bit;
- 采样率:采样率8K、16K、32K、44.1K、48K。
- 声道数:单声道、双声道、多声道。
###码率计算:
采样率采样大小声道数
###音频压缩技术:
- 消除冗余数据
1.压缩的主要方法是去除采集到的音频冗余信息,所谓冗余信息包括人耳听觉范围外的音频信号以及被掩蔽掉的音频信号。
2.信号的掩蔽可以分为频域掩蔽和时域掩蔽。
- 哈夫曼无损编码: 用短码代替长码,实现压缩效果。
###音频的编码过程:
###常见的音频编码器:
- 常见的音频编码器包括OPUS、AAC、Vorbis、Speex、iLBC、AMR、G.711等。
- 网上测评结果:OPUS>AAC>Vorbis
###AAC介绍:
- AAC(Advanced Audio Coding)目的是取代MP3格式。
- MPEG-4标准出现后,AAC加入了SBR技术和PS技术。
- 目前常用的规格有AAC LC、AAC HE V1、AAC HE V2。
###AAC规格:
###AAC规格描述:
- AAC LC:(Low Complexity)低复杂度,码流128k;
- AAC HE:AAC LC + SBR(Spectral Band Replication)
- AAC HE V2:AAC LC + SBR + 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帧:双向参考帧,压缩时既参考前一帧也参考后一帧,帧间压缩技术。
###SPS与PPS:
- SPS(Sequence Parameter Set):序列参数集,存放帧数、参考帧数目、解码图像尺寸、帧场编码模式选择标识等。
- PPS(Picture Parameter Set):图像参数集,存放熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。
###视频花屏/卡顿原因:
- 如果GOP分组中的P帧丢失会造成解码端的图像发生错误。
- 为了避免花屏问题的发生,一般如果发现P帧或者I帧丢失,就不显示本GOP内的所有帧,直到下一个I帧来后重新刷新图像。
###视频编码器:
- x264/x265(使用软编码):x265的压缩比更好,导致占cpu更高,所以在直播应用中还是不是很适用,如果在点播中可以尝试使用。
- openH264(软编码):性能低于x系列,但是支持svc视频技术。svc技术是值将一帧数据分为小中大三层,网络差时,只发送小的一层(内核的帧),网络好时,将中层也发出去,网络非常好时,将一帧数据都发送出去,三层叠加,就形成了一帧视频。svc在移动端,很多硬件不支持,所以只能使用软编码,这样会导致很耗CPU和电池。
- vp8/vp9:相对应的x系列。
###H264压缩技术
- 帧内预测压缩,解决的是空域数据冗余问题。
- 帧间预测压缩,解决的是时域数据冗余问题。
- 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。
- CABAC压缩(无损压缩)。
###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(1B) + EBSP;
###NAL Unit:
NALU头部 + 一个切片(切片头+切片数据);
###NAL Header:由|F|NRI|Type|组成:
- F:forbidden_zero_bit,在hH.264规范中规定了这一位必须为0。
- NRI:指示重要性,00表示最不重要,11表示最重要,暂没有用。
- Type:这个NALU单元的类型。
###NAL Type:
- 5:IDR图像的片。是关键帧I帧。
- 7:序列参数集(SPS)。
- 8:图像参数集(PPS)。
- 28/29:分片单元:一个H264的帧,通过网络传输,一个网络包最大以太网1500byte,所以需要将帧切换成片,每个包一个片,最后进行组装。
###NAL类型分类:
- 单一类型:一个RTP包只包含一个NALU。
- 组合类型:一个RTP包含多个NALU,类型是24-27。
- 分片类型:一个NALU单元分成多个RTP包,类型是28和29。
###FU Header: - S:start bit,用于指明分片的开始。
- E:end bit,用于指明分片的结束。
- R:未使用,设置为0。
- Type:指明分片的类型。
###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
- YUV4:2:0并不意味着只有个Y、Cb两个分量,而没有Cr分量。它实际指的是对每行扫描线来说,只有一种色度分量,它以2:1的抽样率存储。
- 相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0…一次类推。
###YUV存储格式:
- plannar(平面)
I420:YYYYYYYY UU VV =>YUV420P(主要用于PC)
YV12:YYYYYYYY VV UU =>YUV420P
- packed(打包)
NV12:YYYYYYYY UVUV =>YUV420SP
NV21:YYYYYYYY VUVU =>YUV420SP
###音视频知识
- 音/视频采集
- 音/视频硬件编/解码
- FFMPEG(解码)
- OpenGL
- x264优化(编码)
- 交叉编译与优化
- WebRTC
- 音视频处理架构
- 网络传输
###行业痛点
- 视频秒开
- 回音消除
- 音频降噪
- 视频出现花屏/卡顿/绿边
- 手机发烫
- 音视频同步