H264 结构 https://blog.csdn.net/andywang201001/article/details/80274886

H264 源码  https://www.cnblogs.com/TaigaCon/p/5215448.html

一、视频编码标准化组织

H.264标准是属于MPEG-4家族的一部分,即MPEG-4系列文档ISO-14496的第10部分,因此又称作MPEG-4/AVC。

二、视频压缩编码的基本技术

预测编码

  帧间预测编码,前后两帧之间有数据冗余,差分之后数据量非常小,可以进行帧间预测编码

  帧内预测编码,帧内有数据冗余,可以进行帧内预测编码,帧内编码后可以进行独立解码,不用参考其他帧

变换编码:(变换到另一个数据域上)

  编码方式:DCT(离散余弦变换), DST(离散正弦变换),K-L变换

熵编码:

  由于一个数据块的符号出现的概率并不一样, 这就导致使用同样长度的码字表示所有的符号会造成浪费。通过熵编码,针对不同的语法元素分配不同长度的码元,可以有效消除视频信息中由于符号概率导致的冗余。

三、VCL NAL

视频编码中采用的如预测编码、变化量化、熵编码等编码工具主要工作在slice层或以下,这一层通常被称为“视频编码层”(Video Coding Layer, VCL)。

相对的,在slice以上所进行的数据和算法通常称之为“网络抽象层”(Network Abstraction Layer, NAL)。设计定义NAL层的主要意义在于提升H.264格式的视频对网络传输和数据存储的亲和性。

四、档次与级别

为了适应不同的应用场景,H.264也定义了三种不同的档次:

  • 基准档次(Baseline Profile):主要用于视频会议、可视电话等低延时实时通信领域;支持I条带和P条带,熵编码支持CAVLC算法, 实时通信领域不使用B帧(双向预测帧)
  • 主要档次(Main Profile):主要用于数字电视广播、数字视频数据存储等;支持视频场编码、B条带双向预测和加权预测,熵编码支持CAVLC和CABAC算法。
  • 扩展档次(Extended Profile):主要用于网络视频直播与点播等;支持基准档次的所有特性,并支持SI和SP条带,支持数据分割以改进误码性能,支持B条带和加权预测,但不支持CABAC和场编码。

CAVLC支援所有的H.264 profiles,CABAC则不支援Baseline以及Extended profiles。

名词解释:

VCL :Video Coding Layer   视频编码层

NAL: Network Abstraction Layer  网络抽象层

RBSP   : Raw Byte Sequence Payload,原始字节序列载荷

MB:   宏块

GOP: 画面组,

OP一般有两个数字,如M=3,N=12.M制定I帧与P帧之间的距离,N指定两个I帧之间的距离。那么现在的GOP结构是

I BBP BBP BBP BB I

NALU 分析

NALU =   NAL Header  |  RBSP

RBSP = Slice Header | SliceData

SliceData = flags | MB MB MB...

帧      :有1个或多个片组,如果不采用FMO(灵活宏块排序)机制,则一帧只有一个片组

片组  :包含1个片(slice)或多个片

片      :slice,由宏块组成,如果不采用DP(数据分割)机制,1个片只包含1个NALU,

否则1个片由3个NALU组成,nal_unit_type值等于2、3、4的NALU属于同一个片

分片的目的是限制误码的扩撒和传输,使片间保持独立,[ [slice header] [slice data] ]

[slice header] 说明了片类型、属于哪个帧、参考帧等

[slice data] 里是整数个宏块

宏块   :编码处理的基本单元,由多个块组成,通常宏块大小为16X16像素,分为I、B、P宏块

块       :一个编码图像要划分成多个块才能进行处理,一个块是4X4像素

图像解码过程是按照slice进行解码,然后按照片组将解码宏块重组成图像

如何理解H264 编码的更多相关文章

  1. H264 编码详解

    H264 编码详解(收集转载) (1)       x264_param_default( x264_param_t *param ) 作用: 对编码器进行参数设定 cqm:量化表相关信息 csp: ...

  2. H264编码原理以及I帧、B和P帧详解, H264码流结构分析

    H264码流结构分析 http://blog.csdn.net/chenchong_219/article/details/37990541 1.码流总体结构: h264的功能分为两层,视频编码层(V ...

  3. 树莓派摄像头模块转成H264编码通过RTMP实现Html输出

    官方原帖 http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=45368&sid=b81f6551e478f0f6e172aa ...

  4. iOS音频AAC视频H264编码 推流最佳方案

    iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成 ...

  5. H264编码 封装成MP4格式 视频流 RTP封包

    H264编码 封装成MP4格式 视频流 RTP封包         分类:             多媒体编程              2013-02-20 21:31     3067人阅读    ...

  6. FFmpeg的H264编码有内存泄漏吗??!!!

    靠,内存泄漏好严重.开始怀疑是自己代码问题,调试了半天,又反复改写和优化代码,还是泄漏严重. 拿网上现成的FFMPEG H264编码的范例来测试,同样泄漏很严重. 百度了一下,有很多人遇到同样的问题, ...

  7. 音视频处理之H264编码标准20170906

    一. H264基础概念 1.名词解释 场和帧 :    视频的一场或一帧可用来产生一个编码图像.在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场. 片:             每个图象中,若干 ...

  8. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  9. 采集音频和摄像头视频并实时H264编码及AAC编码

    转自:http://www.cnblogs.com/haibindev/archive/2011/11/10/2244442.html 0. 前言 我在前两篇文章中写了DirectShow捕获音视频然 ...

随机推荐

  1. mongodb批量update更新数据

    需要先查找出相关的记录,然后循环处理更新数据.如下案例,更新所有status=1的数据的gender值为2 db.getCollection('test').find({"status&qu ...

  2. shell编程系列16--文本处理三剑客之awk模式匹配的两种方法

    shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...

  3. 关于xadmin的网址收集

    https://blog.csdn.net/yambo1992/article/details/80918250 https://www.colabug.com/4728510.html django ...

  4. 004-行为型-07-备忘录模式(Memento)

    一.概述 又叫做快照模式(Snapshot Pattern)或Token模式 保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态. 意图:在不破坏封装性的前提下,捕获一 ...

  5. 008-MySQL报错-Access denied for user 'root'@'localhost' (using password: NO)

    1.新安装的mysql报错 MySQL报错-Access denied for user 'root'@'localhost' (using password: NO) 解决方案 1.先停掉原来的服务 ...

  6. linux非root用户安装jdk1.8

    如题,先到 Oracle 官方网站 下载1.8版本的 JDK 压缩包(jdk-8u221-linux-x64.tar.gz)到本地(如D盘的soft目录),然后开始进入linux的非root用户(如w ...

  7. Hello log4net——做一个实用好用的log4net的demo(转)

    log4net使用指南  (对配置解释比较全面细致,建议做完demo后多看) Log4Net使用详解(周公)——点击打开链接 Log4Net使用详解(续)周公——点击打开链接 点击打开链接 点击打开链 ...

  8. Selenium登录126邮箱,chrome定位不到账号输入框解决办法

    使用id定位Message: no such element: Unable to locate element: {"method":"id","s ...

  9. Fiddler抓取Android手机网络数据包

    也许你也有疑问,如果开发没有完备的接口文档,我如何知道他API的信息? 这时我们就得通过一些抓包工具抓取这些API信息. 常见抓包工具 HTTP抓包工具:Fiddler.Charles.Firebug ...

  10. SpringBoot里自定义banner

    国外有一个专门用来生成banner的网址:http://patorjk.com/software/taag ,打开这个网址,生成你想要的字儿. 生成时,我们可以选择自己喜欢的字体等信息. 完成后,选择 ...