【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装播放流程 )


本篇文件主要分析 音视频文件 是怎么产生的 , 以及 音视频文件是如何播放的 ;





一、视频采集处理流程



视频文件从录像到生成文件的全过程 :

采集图像帧 : 摄像头 硬件 负责 采集画面 , 采集的 初始画面 称为 " 图像帧 " , 一秒钟 采集 的 图像帧 数量 称为 " 帧率 " , 如 : 60 帧 就是 一秒钟采集 60 个画面的 图像帧 ;

  • 采样时需要一个 同步时钟信息 , 记录当前采样的时间 , 这是复用和解复用时进行时钟同步的重要依据 ;
  • 每帧图像帧数据都要打上一个时间戳 ;
  • 图像帧 和 音频采样帧 使用的是 相同的时钟源 , 这样借助该时钟可以进行 音视频同步 操作 ;

图像处理 : 如果想要 对视频画面进行修改 , 如 : 添加滤镜 , 调亮画面 , 增加字幕等 , 可以针对 " 图像帧 " 进行修改 , 修改的过程就是 " 图像处理 " ;

图像帧队列 : 将 处理完毕 的 图像帧 , 放到一个 " 图像帧队列 ( Frame Queue ) " 中 , 等待 视频编码 ;

视频编码 : 在 图像帧队列 ( Frame Queue ) 中的视频画面 , 体积非常大 , 1 分钟可能达到 1GB 大小 , 视频的画面必须要进行 压缩编码 ;

视频包队列 : 将 图像帧 编码 后 , 放到 视频包 中 , 然后 将若干 视频包 放到 " 视频包队列 ( Packet Queue ) " 中 , 等待封装 ;

复用封装 : 使用 复用器视频包队列 和 音频包队列 封装在一起 , 得到 一个 包含 音频 和 视频 的 文件 ;

  • 音频和视频 按照一定的规则 封装到 文件中 , 播放时再按照相同的规则反向解析 , 解析出原始的音视频数据进行播放 ;

视频采样编码封装 的过程 是下图 红色矩形框内的过程 :
在这里插入图片描述





二、音频采集处理流程



音频文件从录音到生成文件的全过程 :

采集音频帧 : 麦克风 硬件 负责 采集音频 , 采集的 初始音频 称为 " 采样 " , 一秒钟 采集 的 采样 数量 称为 " 采样率 " , 如 : 44100Hz 采样率 就是 一秒钟采集了 44100 个采样点 ; 采样帧 一般一帧封装若干采样点 , 如 10 毫秒的采样点 也就是 441 个采样 作为一帧数据 ;

  • 采样时需要一个 同步时钟信息 , 记录当前采样的时间 , 这是复用和解复用时进行时钟同步的重要依据 ;
  • 每帧 采样帧数据都要打上一个时间戳 ;
  • 图像帧 和 音频采样帧 使用的是相同的时钟源 , 这样借助该时钟可以进行 音视频同步 操作 ;

音频处理 : 如果想要 对音频声音进行修改 , 如 : 变声 , 增加混响音效 , 噪声处理 等 , 可以针对 " 音频帧 " 进行修改 , 修改的过程就是 " 音频处理 " ;

采样帧队列 : 将 处理完毕 的 采样帧 , 放到一个 " 采样帧队列 ( Frame Queue ) " 中 , 等待 音频编码 ;

视频编码 : 在 采样帧队列 ( Frame Queue ) 中的 PCM 原始音频数据 , 体积非常大 , PCM 就是 WAV 格式的音频 , 没有经过任何压缩 , 音频必须要进行编码 , 编码为 mp3 或 ogg 格式 , 能压缩 10 倍的大小 ;

  • 1 秒钟有 44100 个采样 , 双通道立体声 , 每个采样 16 位 , 则 1 分钟的音频有 1 × 60 × 44100 × 2 × 2 1 \times 60 \times 44100 \times 2 \times 2 1×60×44100×2×2 字节大小 ;

音频包队列 : 将 采样帧 编码 后 , 放到 音频包 中 , 然后将若干 音频包 放到 " 音频包队列 ( Packet Queue ) " 中 , 等待封装 ;

复用封装 : 使用 复用器视频包队列 和 音频包队列 封装在一起 , 得到 一个包含 音频 和 视频 的 文件 ;

  • 音频和视频 按照一定的规则 封装到 文件中 , 播放时再按照相同的规则反向解析 , 解析出原始的音视频数据进行播放 ;

音频采样编码封装 的过程 是下图 红色矩形框内的过程 :

在这里插入图片描述





三、音视频文件解封装播放流程



拿到 音视频 文件后 , 播放该文件 , 需要经过以下步骤才能播放出来 :


解复用 : 复用 是 将 音频包队列 ( Packet Queue ) 和 视频包队列 ( Packet Queue ) 封装为一个 音视频文件 , purple解复用是 复用 的 逆向过程 , 就是将 音视频文件 解封装为 音频包队列 ( Packet Queue ) 和 视频包队列 ( Packet Queue ) ;


解码操作 : 与上一个章节 编码 操作相对应 , 是 编码 的 逆向过程 ;

  • 音频解码 : 音频包队列 ( Packet Queue ) 通过 音频解码 , 解码为 采样帧队列 Frame Queue ;
  • 视频解码 : 视频包队列 ( Packet Queue ) 通过 视频解码 , 解码为 视频帧队列 Frame Queue ;

音视频同步 : 解码后的 采样帧队列 和 视频帧队列 , 需要 根据每一帧的 时钟信息 , 进行 音视频同步操作 ;


音视频处理 :

  • 音频处理 : 对 解码后的 采样帧 添加效果 , 如 : 混响 , 重低音 , 除噪音 , 变声 , 变调 , 变速 等效果 ;
  • 视频处理 : 对 解码后的 视频帧 添加效果 , 如 : 美颜 , 滤镜 , 亮度 , 字幕 等效果 ;

音视频播放 :

  • 处理后的音频 送到 扬声器 / 耳机 等设备中进行播放 ;
  • 处理后的视频 送到 显示器 设备中播放 ;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/132294812