音视频基础知识简介

177 阅读7分钟

编码是隐匿在计算机软硬件背后的语言,是计算机的灵魂。

1.引言

介绍完香农的信息论后,接下来笔者将介绍一些信息论的落地应用。接下来将对音视频的基础知识进行一些介绍,如音视频文件的编解码、解封装、渲染等。限于题主的时间,本节做简单介绍。后续将对音视频处理的知识进行详细介绍。

随着信息技术的快速发展,多媒体数据呈现出了爆炸性的增长。针对音频、视频文件的处理引起了广泛关注。本文将从介绍音频和视频文件的格式(即信源编码)出发,逐步深入介绍音视频处理的相关知识。

2.音频编码简介

数字音频一般通过采样量化编码生成,常见音频裸流为PCM(脉冲编码调制)格式。音频编码有一些基础概念:

  • 采样频率:每秒钟采样的点的个数。由于人耳可以接收的频率为20Hz~20KHz,根据奈奎斯特采样定理,许多文件的采样频率为44100Hz。
  • 采样精度(采样深度):每个样本点的大小,常见的有8比特、16比特和24比特。
  • 通道数:常见的有单声道、双声道、四声道等。
  • 比特率:每秒传输的比特数,间接衡量声音质量的一个标准。 没有压缩的音频数据的比特率 = 采样频率 * 采样精度 * 通道数。
  • 码率:压缩后的音频数据的比特率。码率越大,压缩效率越低,音质越好,压缩后数据越大。码率 = 音频文件大小/时长。
  • 帧:每次编码的采样单元数,音频的帧的概念没有视频帧那么清晰。
  • 帧长:可以指每帧采样数播放的时间,也可以指压缩后每帧的数据长度。

音频存储有两种模式:

  • 交错模式(Packed):数据以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录,即L|R|L|R|L|R|L|R|...
  • 非交错模式(Planar):首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道样本,即L|L|L|...|R|R|R|...

常用的音频编码方案有MP3AAC。后续将对AAC编码方案进行介绍。

3.视频编码简介

相比于音频编码,视频编码方案更加复杂。首先我们来介绍一帧图像的编码方案。

我们知道,对于数字图像的编码方案,最常见的为RGB格式。但是由于视频文件往往较大,人眼对图像没有那么敏感,出于压缩彩色转黑白的考虑,数字图像也常采用YUV格式。

其中,“Y”表示明亮度(Luminance或Luma), 也称灰阶值;“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

跟音频文件的存储类似,YUV格式也有两大类,即Planar和Packed。

  • 对于Planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
  • 对于Packed的YUV格式,每个像素点的Y,U,V是连续交错存储的。

YUV存在多种格式,比如YUV420P, YUV420SP等,不同的YUV格式的数据在存储时的排列顺序是不一样的,比如U分量和V分量是否交错排布。

  • YUV 4:4:4采样,每一个Y对应一组UV分量。
  • YUV 4:2:2采样,每两个Y共用一组UV分量。
  • YUV 4:2:0采样,每四个Y共用一组UV分量。

视频也有一些重要的概念:

  • 视频码率: kb/s, 是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。
  • 视频帧率: fps,通常说一个视频的25帧,指的就是这个视频帧率,即1秒钟会显示25帧。帧率越高,给人的视觉就越流畅。
  • 视频分辨率:分辨率就是我们常说的640x480分辨率、 1920x1080分辨率,分辨率影响视频图像的大小。

对于视频图像还有一个IPB帧的概念非常重要:

  • I 帧(Intra coded frames):I帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像;I帧图像采用帧内编码方式,信息量大,是P帧和B帧的参考帧。
  • P 帧(Predicted frames) : 根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据,同时利用了空间和时间上的相关性。
  • B 帧(Bi-directional predicted frames):B 帧图像采用双向时间预测,可以大大提高压缩倍数,注意B帧不能做参考帧,同时直播时为了流畅度一般不使用B帧。

常用的视频编码方案有:H264,H265,VP8,VP9,AV1等。有关H264编码的细节后续将做详细介绍。

4. 封装格式简介

封装格式(也叫容器) 就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放。
一般来说,视频文件的后缀名就是它的封装格式。

H264+AAC封装为FLV或MP4是最为流行的封装模式。

FLV 文件主要由两部分组成: Header 和 Body :

  • Header 部分记录了 flv 的类型、版本等信息, 是 flv 的开头,固定占 9 bytes ;
  • Body 部分由一个个Tag组成, 每个 Tag 的下面有一块4bytes的空间,用来记录这个tag 的长度,紧接 tag 的内容, 类型有 SCRIPTDATA, AUDIODATA , VIDEODATA。

MP4文件中的所有数据都装在 box 中, 一个 MP4 文件由若干个 box 组成, 每个 box 有类型和长度,可以将 box 理解为一个数据对象块, box 中可以包含另一个box:

  • 一个MP4文件首先会有且只有一个 ftyp 类型的 box,作为MP4格式的标志并包含关于文件的一些信息;
  • 有且只有一个 moov 类型的box( Movie Box),它是一种 container box,子box 包含了媒体的 metadata 信息,视频文件头 ;
  • MP4 文件的媒体数据包含在 mdat 类型的 box 中,可以有多个,也可以没有。

5.音视频同步基础

两个重要的时间戳概念:

  • DTS( Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
  • PTS( Presentation Time Stamp):即显示时间戳, 这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。 当视频流中没有 B 帧时, 通常 DTS 和 PTS 的顺序是一致的。 但存在B帧的时候两者的顺序就不一致了。

音视频同步方式有三种:

  • Audio Master: 同步视频到音频 (常见)
  • Video Master: 同步音频到视频
  • External Clock Master: 同步音频和视频到外部时 钟。

6.视频录制和播放框架

视频录制流程如下: 微信截图_20230530212623.png

视频播放流程如下: 1685452207529.jpg

其中,音频解码运算量小,可以不使用硬件解码,使用FFmpeg 软解兼容性更好;视频解码需要大量运算,一般使用 MediaCodec/VideoToolbox 硬解,使用FFmpeg软解兼容性好但是对手机性能要求较高。

7. 总结

音视频的基础知识非常庞杂,这里只做一些简单的介绍,音视频常见的开源项目有FFmpeg,SRS等,有尝试从事音视频相关工作的读者可以去阅读一些开源项目。