【音视频开发】1. 音视频基础知识

198 阅读6分钟

音视频基础知识

1、音视频处理流程

音视频编辑
  • 第一步:输入的 容器文件 经过 解复用器(demuxer) 被拆分成编码格式的音频流和视频流 等(包队列)
  • 第二步:每个流经过对应的 解码器(decoder) 进行解压处理
    • 视频流(H.264等编码) 被还原成 像素数据(RGB/YUV)
    • 音频流(AAC等编码) 被还原成 样本数据(PCM)
  • 第三步:像素和样本数据经过对应的 过滤器(filters) 处理,如改分辨率、裁剪、改音量等
  • 第四步:像素和样本数据经过对应的 编码器(encoder) 压缩成 不同的编码格式
  • 第五步:编码格式的视频流和音频流经过 复用器(muxer) 被封装到需要的新的容器格式文件中
音视频播放
  • 第一步:视频文件通过 解复用 + 解码 放入 采样帧队列图像帧队列
  • 第二步:时钟同步
    • Audio Master:视频跟着音频(最常见)
    • Video Master:音频跟着视频
    • External Clock Master:同步音频和视频到外部时钟
  • 第三步: 通过硬件播放出来
录屏
  • 第一步:从硬件采集原始音频数据和视频数据,时钟同步
  • 第二步:进行 音视频降噪、格式转换 等处理后放入 采样帧队列 和 图像帧队列
  • 第三步:编码 + 复用

2、颜色空间

RGB
  • RGB 是描述一个像素颜色的三种基色通道,YUV 是描述一个像素颜色的亮度与色度的三个分量
  • RGB:常见的 8 bit 位深,红绿蓝各 256 个颜色
    • 排列顺序:一个像素一般是 RGB 的顺序,OpenCV 需转换成 BGR,AV_PIX_FMT_RGB24
    • 位深:每个颜色通道或每个像素的颜色信息的二进制位数
YUV
  • YUV:Y 亮度参量(黑白),U 色度参量蓝,V 色度参量红,每个分量 1B
  • 采样表示:每个像素必须有 Y 分量,U 和 V 可以减少(用于降低存储)
    • 444:1Y ----1UV,每一行的 1 个 Y 对应 1 对 UV,平均每个像素 3B
    • 422:2Y----1UV,每一行的 2 个 Y 对应 1 对 UV,平均每个像素 2B
    • 420:4Y----1UV,每两行的 2x2 的 4 个 Y 对应 1 对 UV,平均每个像素 1.5B
  • 存储结构
    • planar 平面格式:如 YUV420P,Y U V 分别连续存储
    • packed 打包格式:如 YUYV422,Y U Y V 交替存储
    • Semi-Planar 格式:如 NV12,Y 连续存储,U V 交替存储
  • 为什么解码出错会绿屏?YUV 转 RGB 时,R和B都是负数(置为0),G为正数
  • 对齐问题:假设 100×100 16对齐,Y 100 => 112,U 50 => 64,V 50 =>64

3、PCM

  • PCM 脉冲编码调制:将模拟信号转换为数字信号的技术
  • PCM 三要素:采样率、样本格式、声道数
  • 每帧的持续时间(秒) = 每帧采样点数 / 采样频率(Hz)
  • packed 打包格式:左右声道的样本交替存储, L1 R1 L2 R2 L3 R3 L4 R4
  • planar 平面格式:左右声道的样本分别连续存储,L1 L2 L3 L4 ......R1 R2 R3 R4

4、视频帧概念

  • I 帧(关键帧):只有帧内压缩,不考虑运动矢量,是 P 帧和 B 帧的参考帧。

  • P 帧(前向预测帧):记录本帧跟之前的一个关键帧(或P帧)的差别,解码时需要之前帧的解码结果

  • B 帧(双向预测帧):记录本帧与前后帧的差别,解码时需要前后帧的解码结果,压缩率最好

  • SPS(序列参数集):保存了一组编码视频序列的全局参数,I 帧前至少要发一次

  • PPS(图像参数集):序列中某几幅图像的参数

  • IDR 帧:特殊的 I 帧,图像的刷新点,会清空参考帧队列

  • GOP:一个 IDR 帧到下一个 IDR 帧之前一组连续的视频帧。

  • PTS(显示时间戳):显示的顺序,B 帧先于 P 帧 显示

  • DTS(解码时间戳):编解码顺序和推流顺序,P 帧先于 B 帧编解码

5、音视频格式

封装格式
  • MP4 .mp4:支持大部分的编码格式
  • MKV .mkv:支持大部分的编码格式
  • MPEG-TS .ts:支持常见的编码格式,流媒体
  • FLV .flv:主要用于 H.264 视频 + AAC 音频,流媒体
音频编码格式
  • MP3:有损压缩,压缩比低
  • AAC:有损压缩,压缩比高
  • Opus:有损压缩,压缩比高
  • PCM:原始音频数据
视频编码格式
  • AVC/H.264:有损压缩,压缩比低
  • HEVC:有损压缩,压缩比高
  • AV1:有损压缩,压缩比高
  • VP8/VP9:有损压缩,压缩比高

6、空间视频

  • Side-by-Side 格式:每个帧左半部分是左眼图像,右半部分是右眼图像
    • 1920 * 1080 => 960 * 1080 + 960 * 1080
  • Top-and-Bottom 格式:每个帧上半部分是左眼图像,下半部分是右眼图像
    • 1920 * 1080 => 1920 * 540 + 1920 * 540
  • Frame Packing 格式:左右眼都以其全分辨率组合为一个打包帧
    • 1920 * 1080 => 1920 * 2205
  • 空间视频的编码
    • HEVC 标准:由于没有帧内远距离搜索,同一帧的左右半间无法相互预测;除此之外,由于运动估计搜索范围的限制,帧间预测也不能利用不同视点间的信息;
    • MV-HEVC 标准:右视点帧间预测的运动矢量使用了大量的视点间参考模式,充分消除了视点间的冗余信息,同画质下减少带宽。Vision Pro 已支持 MV-HEVC 码流的硬解。原理:NALU header 中引入的 Layerld 表示该 NALU 封装的帧(或 Slice)所归属的视点号。通常用 Layerld 0 表示该帧属于左视点(主视点),Layerld 1 则表示属于右视点(辅视点)。我们称同属于一个 POC 但属于不同 Layerld 的帧为一个 AU (Acess Unit)。主视点图像编码的参考规则沿用基础 HEVC,辅视点每一帧图像编码在基础 HEVC 之上,又多了一个视点间参考帧。

7、音视频开发常用工具

  • FFmpeg 全家桶:最重要的音视频处理工具,命令行程序
  • MediaInfo:分析工具,查看音视频文件格式等详细信息
  • 海康 YUV Player:支持多种 YUV 格式的播放和处理
  • Adobe Audition:音频分析和处理应用
  • FLVParser:FLV 流分析和解析器
  • Beyond Compare:二进制文件对比工具