1.YUV知识点

1.1 为什么要有YUV

  • YUV的亮度信号Y和色度信号U/V是分离的,假如只要Y信号重量而没有U/V重量,这样的图画便是对错灰度图画,从对错到彩色的兼容计划。
  • 相对RGB,YUV的最大优点是只占用较小的频宽,RGB需求至少三个独立的视频信号,而YUV需求两个视频信号(Y表明明亮度,UV表明色彩和饱和度)。
  • 编码时运用YUV能够去掉许多冗余信息,人眼对亮度更敏感,对色度敏感性不高,因此能够较多地紧缩UV数据。

1.2 YUV的品种

YUV是依照人眼规划出来的一套色彩计划,现在有三种格局:

  • YUV420,由 4 个 Y 重量共用一套 UV 重量
  • YUV422,由 2 个 Y 重量共用一套 UV 重量
  • YUV444,不共用,一个 Y 重量运用一套 UV 重量

依照YUV的摆放次序,也分为三品种型

  • Planar YUV:三个重量分隔寄存
  • Semi-Planar:Y重量独自寄存,UV重量交织寄存
  • Packed YUV:三个重量全部交织寄存

1.3 为什么受损的视频数据一般是绿色

视频的数据是YUV摆放的,终究显现要转化为RGB,转化的公式如下:

R=clip(Y+1.13983*(V-128), 0, 255)
G=clip(Y-0.39465*(U-128)-0.58060*(V-128), 0, 255)
B=clip(Y+2.03211*(U-128), 0, 255)

假如视频数据损坏,即Y=0 U=0 V=0,终究得到的是R和B为0, G=125,所以全体的画面显现为绿色。

1.3 NV21转化为YUV420

NV21是相机收集出来的YUV数据摆放,YUV420是正常视频编码器支持的摆放方法。

  • NV21:YUV 420 Semi-Planar,Y 重量独自寄存,UV 重量交织寄存,与 NV12 不同的是,UV 在摆放的时分,从 V 开始。总长度为 w * h * 1.5
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V U V U V U
V U V U V U
V U V U V U
  • I420:YUV 420 Planar,YUV重量分别寄存,先是 w * h 长度的Y,后边跟w * h * 0.25长度的U,最后是 w * h * 0.25长度的V,总长度是 w * h * 1.5
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U U U
U U U
U U U
V V V
V V V
V V V

了解清楚NV21和I420的区别,转化就比较简略了。

2.H264/H265知识点

2.1 H264编码流程

音视频面试涨知识(二)

  • 帧类型剖析
  • 猜测处理,I帧选用帧内猜测和块的区分,P帧和B帧选用帧间猜测和块的区分。帧内猜测处理的是空间冗余问题,帧间猜测处理是时刻冗余问题。
  • 改换+量化处理,把经过猜测后的残差数据经过DCT转化,低频的数据会集在左上,高频数据会集在右下,人眼对高频信息不敏感,能够紧缩地多一些。
  • 熵编码,经过CAVLC方法把像素值进一步紧缩为二进制流。

音视频面试涨知识(二)

简而言之:

  • 以宏块来细分图片,并终究以块来细分
  • 运用帧间紧缩技能来削减空间冗余
  • 运用帧内紧缩技能削减时刻冗余(运动估计和补偿)
  • 运用转化和量化来进行残留数据紧缩
  • 运用熵编码削减残留和运动矢量传输和信号发送中的最后冗余

同一帧相邻像素值相等、类似或许缓变的概率很大,编码器经过算法将图画区分为一块一块的,然后逐块进行后续的紧缩处理。 帧内猜测是同一帧内部处理。 帧间猜测是不同帧之间处理,相邻帧之间也会出现类似或许缓变的状况。 H264中将16×16巨细的块称为宏块,在做帧内和帧间猜测的时分,也会区分为8×8/4×4的字块

2.2 H264和H265比较

技能比照:

  • 可改变的尺寸转化(4×4到32×32),宏块不再固定
  • 四叉树结构的猜测区域(64×64到4×4)
  • 根据候选清单的运动向量猜测
  • 多种帧内猜测形式
  • 更精准的运动补偿滤波器
  • 优化的区块、采样点自适应偏移滤波器





成果比照:

  • 码率低,编码效率高:以编码单位来说, 最小的8×8到最大的64×64。信息量不多的区域(色彩改变不明显,比方车体的红色部分和地面的灰色部分)区分的宏块较大,编码后的码字较少,而细节多的当地(轮胎)区分的宏块就相应的小和多一些,编码后的码字较多,这样就相当于对图画进行了有重点的编码,从而降低了全体的码率,编码效率就相应提高了。
  • 存储空间少:重复的质量比较测验现已表明,在相同的图画质量下,相比于H.264,经过H.265编码的视频码流巨细比H.264削减大约39-44%。
  • 编码算法效率高:同时,H.265的帧内猜测形式支持33种方向(H.264只支持8种),并且提供了更好的运动补偿处理和矢量猜测方法。
  • 网络适应能力更强:在码率削减51-74%的状况下,H.265编码视频的质量还能与H.264编码视频近似乃至更好,其本质上说是比预期的信噪比(PSNR)要好。H.264能够在低于2Mbps的速度完成标清数字图画传送,而H.265/HEVC能够在低于1.5Mbps的传输带宽下,完成1080p全高清视频传输。

2.3 基本概念

  • SPS/PPS/VPS

    • SPS:Sequence Parameters Set(序列参数集),首要包括profile、profile_level、视频的宽和高等等,没有SPS无法正确解码。
    • PPS:Picture Parameters Set(图片参数集),包括熵编码的运用算法,slice group中的个数等编码相关的参数。
    • VPS:Video Parameters Set(视频参数集),H265才有,VPS首要用于传输视频分级信息,有利于兼容标准在可分级视频编码或多视点视频的扩展。
  • NALU开始码

    • H264格局有两种方法,Annex B格局和AVCC格局,其中Annex B格局比较常见,它是由开始码的。
    • Annex B格局用开始码来处理这个问题,即给每个NALU加上前缀码:2个或许3个0x00,后边再加一个0x01, 如:0x000001或许0x00000001。这是由向每个这品种型的序列刺进防竞赛字节0x03完成的,那么刺进防竞赛字节后,0x000001变成了0x00000301。
  • 一帧多Slice

    • 正常状况下,H264的一帧只要一个Slice,可是某些编码器吐出的数据会存在一帧有多个Slice的状况。这种需求特别兼容下,将Slice中数据取出来memcpy到一起,这样处理之后不会存在兼容性问题。
  • SEI

    • SEI 即补充增强信息(Supplemental Enhancement Information),属于码流范畴,它提供了向视频码流中加入额外信息的方法,是 H.264 标准的特性之一。
    • 在直播场景,咱们一般运用 SEI 来携带推流端的信息,一向跟着直播撒播输到播映端。由于 SEI 是绑定着视频帧,所以它能够支持诸如:
      • 计算直播推流端到播映端延时。
      • 支持和视频帧绑定的内容交互。比方,直播答题在播映端的弹窗等。

3.MP4和FLV知识点

3.1 FLV

FLV是一种流媒体格局,体积小、协议简略,首要用在直播领域,RTMP协议推流会封装成FLV格局的视频。

FLV = FLV header + FLV file body
FLV file body = PreviousTagSize0 + Tag1 + PreviousTagSize1 + Tag2 + ... + PreviousTagSizeN-1 + TagN

FLV tag分为三品种型:

  • Video Tag:寄存视频相关数据
  • Audio Tag:寄存音频相关数据
  • Script Tag:寄存音视频元数据

3.2 MP4

MP4是一种Box封装的格局,它和FLV有着根本的不同,所以FLV能够用作直播,可是MP4却不能。

  • MP4文件由多个Box组成,每个Box存储不同的信息,并且Box之间是树状的结构。
  • Box品种许多,首要有三种:
    • ftyp:File Type Box,描绘文件遵从的MP4规范与版本
    • moov:Movie Box,媒体的metadata信息
    • mdat:实际的媒体数据,可能有多个
  • moov能够坐落文件头部,也能够坐落文件尾部,必需要先解析moov,才能播映这个视频,假如moov在文件尾部,那就无法次序播映了。moov有两个重要的box:
    • mvhd:Movie Header Box,mp4文件的全体信息,比方创立时刻、文件时长等;
    • trak:Track Box,一个mp4能够包括一个或多个轨迹(比方视频轨迹、音频轨迹),轨迹相关的信息就在trak里。trak是container box,至少包括两个box,tkhd、mdia;
  • mvhd针对整个影片,tkhd针对单个track,mdhd针对媒体,vmhd针对视频,smhd针对音频,能够认为是从 宽泛 > 详细,前者一般是从后者推导出来的。

3.3 FLV能够seek吗?

FLV用作直播的时分,肯定是无法seek,可是用作点播时,它的keyframes中包括“filepositions”和“times”,分别指关键帧的文件位置和关键帧的PTS,经过keyframes能够建立自己的index,在seek过程中,能够快速地跳到你想要的关键帧的位置进行处理。

4.PCM和AAC知识点

PCM是Pulse Code Modulation 脉冲编码调制,对错紧缩的音频编码,便是原始的音频数据。 可是PCM只是原始数据,咱们播映原始数据的时分,不知道当前音频的声道、采样率等信息,不知道这些信息,是无法有效播映音频的。 AAC将PCM音频数据编码紧缩,并在头部添加了采样率、采样巨细、声道