视频基础知识——学习笔记

  • 泛娱乐:可以b帧
  • 实时互动,不能使用b帧,因为解码当前帧需要后面帧传输过来,如果网络不好,传输不过来,就卡顿了。

  • 解码一组帧之前,是先收到sps和pps,否则无法解码。一组GOF,一个关键帧。

  • 花屏是因为丢帧,导致p帧或b帧不能参考其他帧解码。
  • 卡顿:为了避免花屏,就丢一组GOP数据。这样就导致了卡顿。

  • x264使用最广泛,使用软编。
  • x265逐渐成熟,压缩比高,但cpu容易占满,不适合直播。
  • openH264较次于x264。支持svc技术,视频分层传输,一帧分为小中大,根据网络情况而定。每传输一层,就加一层,就清晰一些。很多硬件不支持svc。所以需要软编,导致消耗cpu,手机费电、发烫。
  • vp8/vp9,对应x264/x265,Google推出。

  • 空域数据:宽高这幅图,不明显的颜色值,可以去掉。
  • 一组数据:连续几幅画面,对于静止画面,删除重复数据。
  • 第三个不明白
  • 无损压缩,类似霍夫曼编码

帧间压缩

 ← 对整幅图进行宏块划分的效果

根据实际图像,划分不同大小的宏块。

由于背景都相同,所以仅记录球的运动轨迹+一副背景图。减少数据量。

相邻图,找到宏块,就在下一幅图的周围找,所有图,进行两两比较,就能找到红色标注,连续的运动估算。

帧内压缩

上面的都是针对帧间压缩。上图针对的 I 帧,就是关键帧。9种模式。

预测+残差=原图(解码过程)

DCT压缩

先量化,然后用DCT技术压缩

VLC压缩,类似霍夫曼编码。频率高的码编成短码,频率低的使用长码。

CABAC:上下文适应的无损压缩。

从视频序列中,取1帧H264的编码数据,一帧H264图像数据,由多个片组成,每个片由多个宏块组成,每个宏块由多个字块组成。

  • NAL层作用:H264在网络上传输,网络允许的最大传输单元为1500字节,但一帧往往大于1500字节,所以就需要把帧拆分多个包进行传输,所有拆包组包都是通过NAL层进行处理。
  • VCL层作用:对视频原始数据进行压缩。

RBSP主要标识流的结束位。

 

  • EBSP 区别于起始位:0x000001   0x00000001

H.264 的编码视频序列包括一系列的NAL 单元。在VCL 数据传输或存储之前,先被映射或封装进NAL 单元中。每个NAL 单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL 头信息。RBSP 的基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。

RBSP结构如下:每个单元都按独立的NAL 单元传送。单元的信息头(一个字节)定义了RBSP 单元的类型,NAL 单元的其余部分为RBSP 数据。

H264码流的分层:

  • Annexb 格式:0x0000001起始。
  • Slice Data(切片数据里)包含多个宏块。
  • 宏块里包含:宏块类型,宏块数据,宏块参数,残差数据等。
  • 残差数据:残差块。
  • RTP Packet分层同上,是从传输层面进行的分层。

1个H264帧包含1个或多个切片。

下图是切片和宏块的关系。

NALU单元详解

NALU单元的类型Type比较重要,主要有以下类型:

  • type:5 IDR图像的片,关键帧。
  • type:7 序列参数集,宽高
  • type:8 图像参数集,帧内预测模式
  • type:28 FU-A 分片的单元。一个包一个片,进行组装用的。
  • type:29 FU_B 分片的单元。一个包一个片,进行组装用的。

Cb = U, Cr = V

I420 格式PC端常用。

采集,复杂在各个端,win/mac/。。。

硬编码/硬解码,硬件模块编解码

FFMPEG,软编软解,转封装格式,将各种音频格式抽取出来,水印,倍速播放。。。

视频渲染与openGL

x264优化(调节参数),编码。ffmpeg解码。

交叉编译与优化

webRTC ,很多特别的方法和API

音视频处理架构

网络传输

整理自慕课网——移动端音视频入门

H264参考这里:https://blog.csdn.net/qq_36449541/article/details/81485022

发布了417 篇原创文章 · 获赞 156 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_34732729/article/details/104521786