音视频开发基础概念

一. 编译器编译器也是一种程序,其作用是将一种语言翻译为另一种语言,通常是将高级语言翻译为低级语言,或者说是将源代码翻译成能被计算机或虚拟机执行的目标代码。编译器的主要工作流程是:源代码-预处理器-编译器-目标代码-链接器-可执行文件另一个角度的工作流程:词法分析-语法分析-语义分析-中间代码生成-代码优化-目标代码生成-目标代码优化编译器的种类“本地”编译器用来生成与编译器本身所在环境操作系统(平台)相同的环境运行的目标代码的编译器叫“本地”编译器。“交叉”编译器生成用来在其他平台上运行的
摘要由CSDN通过智能技术生成

对一个初学者来说,刚刚接触音视频的学习难免会遇到各种个样的术语,一开始我也是云里雾里的,到现在一点一点接触积累,形成一个基本的认识。本文并没有什么高深和详细的知识点,旨在记录一些音视频中涉及基本概念,以及它们的区别和联系。帮助初学者快速熟悉音视频开发。

一. 音视频处理流程

对音视频的处理流程可以简化为下图步骤:
image.png
图中流程在编码后有两种选择:

  • 1.是通过封装保存为文件,比如录一段视频保存为 mp4 文件。
  • 2.是直接将数据推给流媒体服务器,接收端可以从流媒体服务器拉取数据,比如直播。

图中的概念解释如下:

采集

采集就是通过麦克风、摄像头等途径采集音频数据和视频数据。

编码和解码

由于采集后的数据量大且冗余,因此需要进行编码,编码就是压缩。对应地,解码就是就解压缩。经常把编码和解码合在一起说为编解码。编码和解码经常涉及到的一个问题就是:软编解(软件编解码,软编/软解)和硬编解(硬件编解码,硬编/硬解)。

  • 软编解:通过软件程序进行编解码,由 CPU 执行程序,性能较低,编解码后质量较高
  • 硬编解:通过 GPU 等硬件进行编解码(GPU 适合做浮点等运算,不适合做逻辑处理),性能高,编解码后质量较低
封装和解封装,容器

封装又叫复用,解封装又叫解复用。一个视频文件中,通常包含着音频数据和视频数据,即一个视频文件包含两路数据流,一路视频流,一路音频流,有汉英切换的视频就有两路音频流。如何将已经编码压缩好的视频数据和音频数据按照一定的格式放到一个文件中的过程就叫做封装。而承载这些数据的封装格式,通常就叫做容器。例如 mp4 容器中有一路 H264 的视频流和一路 AAC 的音频流。相反地,从媒体文件或者媒体流中取出视频数据和音频数据的过程就叫做解封装或者解复用。

渲染

即将解码后的视频数据还原成图像,并显示的过程

二. 图像

其实音视频开发不只有音频和视频的处理,对图像的处理也是一个大的知识点。下面就会介绍一些入门级的图像相关的概念。

YUV 和 RGB

YUV 和 RGB 是一种色彩模型(color model),什么是色彩模型呢?就是用一组数值来描述颜色的抽象数学模型,常见就是 RGB (三原色), YUV (亮度色度),CMYK (印刷四原色)。它们的区别在于使用不同的规则来描述颜色 ,例如 RGB 模型用红、绿、蓝 3 个分量描述颜色,而 YUV 则使用的是亮度(Y)和色度(UV)。

有的地方也把 YUV 和 RGB 说成色彩空间 (color space) , 严格来说这种说法是不对的,颜色空间的定义的是颜色的范围,但是 YUV 和 RGB 表明的并不是一种颜色范围。对于开发来说我们只需要知道 YUV 和 RGB 的区别是对颜色的表示方式不同就足够了。

像素格式

像素格式描述了像素数据存储所用的格式,定义了像素在内存中的编码方式。
在图像的存储过程中,YUV 和 RGB 等通过不同的像素格式来存储图像。因此有时候我们说的 YUV , RGB 指的是一种像素格式。

通俗的讲,我们知道一张图像是由许多个像素点组成(像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值),每个像素都包含着颜色信息,以不同的方式来分离这些信息就产生不同的像素格式。例如将颜色信息分为亮度和色度的方式就是 YUV (YUV 也称 YCbCr , 或 YPbPr , 其中YUV通常用来描述电视的模拟信号,而 YCbCr 则是用来描述数字的影像信号,但是现在广泛使用的是 YUV 这种叫法),除此之外,将颜色信息分为红、绿、蓝三颜色的方式就是 RGB 。原本一个像素点的存储需要 3 个字节,即一个 YUV 分量 或 RGB 分量占一个字节,但在实际使用中为了减少图像数据的尺寸,YUV 和 RGB 有不同的方式来减少存储的数据量,从而产生了多种多样的 YUV 和 RGB 像素格式。

1. YUVxxx

YUV 通过采样的方式减少数据量。

人眼对色度的敏感程度低于对亮度的敏感程度。利用这个原理,可以把色度信息减少一点,人眼也无法查觉。

例如常见的 YUV444 , YUV422, YUV420 就是对 YUV 三个分量采样的不同而产生的不同的像素格式。

  • YUV444, 以 4 四个像素点为一组,每 4 个 Y 分量就取 4 个 UV 分量,即全采样,大小为 24bpp (bits per pixel),即 3 字节 * 4 个像素点 * 8bits / 4 个像素点 = 24 bps
  • YUV422, 以 4 四个像素点为一组,每 4 个 Y 分量就取 2 个 UV 分量,大小为 16bpp ,全采样的 2/3 ( ((U+V) * 2+ Y * 4) / ((U+V) * 4 + Y * 4) = 2/3)
  • YUV420, 以 4 四个像素点为一组,每 4 个 Y 分量就取 1 个 UV 分量, 大小为 12bpp ,全采样的 1/2 ( ((U+V) * 1+ Y * 4) / ((U+V) * 4 + Y * 4) = 1/2)
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值