音视频基础概念

190 阅读5分钟

封装与接封装

视频文件一般都是用一种封装格式封装起来的。视频文件里不光有视频,还有音频, 封装格式的作用就是把视频和音频打包起来。

封装格式

image.png

解封装过程

image.png

编码方式

所有编码方式的终极目的 压缩编码后数据总量的同时保持视频质量

视频编码

  • 将视频像素数据(RGB,YUV 等)压缩成视频码流,从而降低视频的数据量。
  • 目前主流的是h264/h265

image.png

视频编码格式的说明

  • .H26x系列 由国际电传视讯联盟远程通信标准化组织(ITU-T)主导,包括 H.261、H.262、H.263、H.264、H.265
    • .H261 用于老的视频会议或视频电话系统,之后的所有标准都基于它设计的。
    • .H262 等同于 MPEG-2 第二部分,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。
    • .H263 主要用于视频会议、视频电话和网络视频相关产品。比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端,它可以在保证一定质量的前提下大大的节约码率。
    • .H264 等同于 MPEG-4 第十部分,也被称为高级视频编码(Advanced Video Coding,简称 AVC),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。该标准引入了一系列新的能够大大提高压缩性能的技术,并能够同时在高码率端和低码率端大大超越以前的诸标准。
    • .H265 高效率视频编码(High Efficiency Video Coding,简称 HEVC)是一种视频压缩标准,是 H.264 的继任者。HEVC 被认为不仅提升图像质量,同时也能达到 H.264 两倍的压缩率(等同于同样画面质量下比特率减少了 50%),可支持 4K 分辨率甚至到超高画质电视,最高分辨率可达到 8192×4320(8K 分辨率),这是目前发展的趋势。
  • MPEG系列 由国际标准组织机构(ISO)下属的运动图象专家组(MPEG)开发。
    • MPEG-1 第二部分,主要使用在 VCD 上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的 VHS 录像带相当。
    • MPEG-2 第二部分,等同于H.262,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。
    • MPEG-4 第二部分,可以使用在网络传输、广播和媒体存储上。比起MPEG-2 第二部分和第一版的H.263,它的压缩性能有所提高。
    • MPEG-4 第十部分,等同于H.264,是这两个编码组织合作诞生的标准。

不选择H265的原因

  • iOS11.0之后才支持H265。
  • 相对于H264,H265对CPU造成的负荷更大,当然CPU发热更严重

音频编码

  • 将音频采样数据(PCM 等)压缩成音频码流,从而降低音频的数据量.
  • 目前主流的是mp3,aac

image.png

yuv与rgb

通常我们采用RGB模型来表示颜色,RGB模型中,每种颜色需要3个数字分别表示R、G、B,每个数字占用1个bit字节,这样总共需要24bits

为了压缩数据,结合人眼对于亮度敏感而对于色度不敏感的特性,提出了yuv颜色模型。在 YUV 中 Y 表示的是「亮度」,也就是灰阶值,U 和 V 则是表示「色度」

yuv与rgb转化公式

Cb、Cr的含义等同于U、V

Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)

R = Y + 1.402Cr
G = Y - 0.344Cb - 0.714Cr
B = Y + 1.772Cb
复制代码

yuv444/422/420

有了yuv颜色模型后,根据压缩原理,可以考虑将uv数据进行压缩。以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量

image.png

实际编码过程中,一般采用yuv420作为颜色模型

yuv420的存储格式 nv21/nv12

  • nv21和nv12都属于yuv420的颜色模型的实际存储格式
  • 21和12的含义代表了uv的顺序,1表示u,2表示v。 nv12表示 y + uv nv21表示 y + vu
  • android 平台上摄像头采集的数据默认为nv21,而ios和windows上采集数据默认为nv12

nv21

image.png

nv12

image.png

yuv420与rgb占用内存对比关系

设定宽高分别为 w, h ,

  • 对于rgb来说,占用内存大小为: 每个r,g,b分别用一个字节来表示,因此一个像素点需要的字节数为3
m = w * h * 3
  • 对于yuv420来说,y的个数为 w * h * 1 , u和v分别为 w * h * 1/4
m = w * h * 1 + w * h * 1/4 + w * h * 1/4 
= w * h * 3/2

soc

soc又称为片上系统 ,是手机的芯片的集合。包含cpu,gpu,wifi,dsp等。这里的重点在于dsp是一个独立的芯片,也是我们做硬解码的芯片。

image.png

h264码流结构

  • 码流结构是一系列NALU的序列单元,单元与单元之间用分隔符隔开,分隔符一般为0x00000001或者0x000001
  • 每个NALU 由NAL头和NAL体组成,NAL头能识别出后面的数据是I帧,p帧,B帧或者是sps,pps等,它是一个8位的标记位,NAL体是具体的帧的内容
  • NAL头由三部分组成:禁止位,优先级和帧类型。禁止位表示后面的编码数据是否可用,用于丢弃错误的数据,0表示可用,1表示不可用,用1位存储;优先级代表数据在解码器中的解码优先级,比如sps/pps和i帧的优先级是最高的,一共4种优先级,用2位存储;后5位用于识别帧类型

image.png