音视频知识基础

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/goldfish3/article/details/97021252

一:音频

在这里插入图片描述
音频压缩技术:

1:消除冗余数据
2: 哈夫曼无损编码

消除冗余数据(心理声学模型)

音频冗余信息包括:

  1. 人耳听觉范围之外的音频信号
  2. 被掩蔽掉的音频信号
掩蔽效应:
  1. 频域掩蔽
    下面的纵轴是分贝数,横轴是声音的频率,线 Threshold in Quiet 之下的部分,表示当前频率下不可听见的声音的范围。
    大音量如Masker会产生掩蔽效应,这里用线 Masking Threhold表示,掩蔽线之下的部分都是无法听见的。
    在这里插入图片描述
    关于掩蔽效应,可以想象这么一个场景,两个人吵架,如果是两女生,那么声音小的那个肯定会被声音大的那个的声音遮蔽掉,但是如果是一男一女,男声不容易被女声遮蔽,这是因为两者的音频差别较大,掩蔽效应不明显。

  2. 时域掩蔽
    在这里插入图片描述
    如上图,在一段持续时间内,小的声音会被大的声音掩蔽掉,大的声音在发声之前,大约有50ms的掩蔽范围,发声之后,大约有200ms的掩蔽范围。

音频编码器

常见的音频编码器:

  • OPUS(口/耳模型)
  • AAC(娱乐直播多用,rtmp协议支持)
  • Vorbis:
  • Speex(包括回音消除,降噪等模块)
  • iLBC:
  • AMR:
  • G.711:固话多使用

一般来说,性能:OPUS > AAC > Vorbis
在这里插入图片描述

AAC:

目前使用最广的音视频解码器,一方面因为音质好,一方面也因为cdn所使用的rtmp协议支持AAC,MPEG-4标准出现后,AAC加入了SBR技术和PS技术,编码损耗进一步降低,逐渐成为了主流。

目前常用的规格有:
AAC LC:低复杂度,码流128k
AAC HE V1:AAC LC + SBR ,其中SBR叫做分频复用,将音频分为低频和高频,分别采样,总体采样频率较原先低。
AAC HE V2: AAC LC + SBR + PS,由于声音的各个声道之间存在相关性,PS技术只保存一个声道,其他声道只保存参数,后续解码的过程中,使用保存的声道加参数恢复其他声道。在这里插入图片描述

AAC的格式:
ADIF:这种格式只能从头开始解码,常用在磁盘文件中。
ADTS:这种格式每一帧都有一个同步字,可以在音频流的任何位置开始解码,它似于数据流格式。

AAC编码库Libfdk_AAC > FFmpeg AAC > libbfaac > libvo_aacenc

二:视频

H264基本概念:

1: I P B帧
  1. I帧:关键帧,采用帧内压缩技术。
  2. P帧:向前参考帧,压缩时只参考前一个帧,属于帧间压缩技术。
  3. B帧:双向参考帧,压缩时既参考前一帧也参考后一帧,帧间压缩技术。

如果我们想让压缩后的视频尽可能的小,那么就应该多食用B帧,但是在实时互动直播中,由于对视频的实时性要求较高,而B帧必须参考后面的帧,会降低实时性,因此实时互动直播中,不使用B帧。

2:GOF

前一个I帧与后一个I帧之间的部分:
在这里插入图片描述
每一组帧之前,首先会收到 SPS 和 PPS
SPS(Sequence Parameter Set):序列参数集,存放帧数、参考帧数目、解码图像尺寸、帧场编码模式选标识等。
PPS(Picture Parameter Set):图像参数集,存放熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。
那么视频花屏、卡顿是为什么呢?

花屏:如果GOP分组中的P帧丢失会造成解码端的图像发生错误,因此会造成花屏。
卡顿:因此,当P帧丢失,我们就将这一 GOF 的数据全部丢弃,因此就会造成卡顿。

都有哪些视频编码器呢?
x264、x265(由于占用cpu比较高,直播用的少)、openH264、vp8/vp9

3: H264压缩技术

帧内预测压缩:解决的是空域数据冗余问题-其中空域指的图中人眼不敏感的冗余数据。
帧间预测压缩:解决的是时域数据冗余问题。
整数离散余弦变换(DCT):将空间上的相关性变为频域上无关的数据然后进行量化。
CABAC压缩。
宏块: 将每一帧划分为 16 * 16 的小块,一块一块依次压缩,而不是对整张图片一起压缩。其中一个宏块又可以分为 1616 1618 816 88 等大小不等的块。一般来说,运动多,细节多的部分,划分为小块来编码,大的平坦无变化的,划分为大块,举个例子;
在这里插入图片描述
具体h264的压缩过程比较复杂,后续看理论基础的时候再看,这里大致讲一下H264的结构与码流。

H264的结构:
在这里插入图片描述
H264编码分层:
NAL层(Network Abstraction Layer):视频数据网络抽象层
VCL层(Video Coding Layer):视频数据编码层

每一个gop就是一个NALU单元,其中NALU单元经过逐层剥离,又可以提取出 EBSP -> RBSP -> SODB,拿到SODB就可以对照各类型的NALU,去解析它们的语法元素,进而再根据语法元素,重建图像。
整体结构图如下:

在这里插入图片描述

NAL结构:
NAL单元的第一个字节 —— NAL Header:
在这里插入图片描述
Type一共有31种,其中主要使用的类型有如下几种:

  • 5表示IDR图像的片,也就是这组片是关键帧(I帧)的一部分。
  • 7表示sps(序列参数集)
  • 8表示pps(图像参数集)
  • 28、29 为分片的单元。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
展开阅读全文

没有更多推荐了,返回首页