如何学习H264协议

如何学习h.264协议

首先,我假定你已经具有如下基础:

1 了解基本的视频知识,知道什么是YCbCr/YUV;

2 知道基本的视频压缩原理;

如果这两条还不具备,那么,停一下,补一下课。这方面的相关文章在网上一找一大把。

now,你为什么要学习H.264呢?可能你是个在校学生,要写论文,拿着复杂的JM代码无从下手。可能你是个开发人员要往已有的代码里添加一个码率控制算法,但是拿着前人开发的代码又感到一头雾水。无论你具体做什么,对264协议有个比较深的理解还是有必要的。

那先准备好以下几样东西:

1 H.264_MPEG-4 Part 10 White Paper;

2 H.264 Visa 和StreamEye;

这是两个码流分析软件,前者有免费版本,后者有个免费版,屏蔽了一些功能,但是对初学者,足够了。

3 码流。你可以随便去下两个,很多地方都可以下到的。

4 matlab

你可能注意到,我提供的清单里没有H.264协议,没有JM代码,为什么?因为这两样东西,太复杂,不合适初学者。即使现在,我看到H.264协议原本都还觉得复杂,JM代码更是没有怎么看过。 这两样东西,不到做具体开发的时候没有必要去详细地研究。

那么,如何理解H.264协议呢。 容易,我们可以手工完成一个264码流的解码过程,相信我,你如果专心,最多花30小时,就能基本完成这个过程。

264协议,其实也使用了与以前的协议类似的方法,但在各个环节中,都加入了不少的改进而已。

下面先简要说明一下各个模块的要点。

1 帧内预测。

这是个新概念,但其实就是使用相邻的块来预测当前块。我们先只考虑4x4亮度块的例子。

使用H.264 Visa打开一个码流文件。从第一帧第一块开始(无疑,是个I块)。然后一个小块一个小块地做预测。需要注意的是,预测一个小块,就重建一个小块。重建你只需要把预测值加上残差就可以了。你可以使用matlab来帮你完成这个过程。残差值,现在先直接使用就可以,不必残差是如何来的。重建后的小块就可以作为进一步预测的参考块了。注意,要使用pre-loopfilter的数据。

2 帧间预测。

请先用264Visa 和StreamEye打开码流,查看第一个P帧(通常是第2帧)。

树状的块结构层次。你可以用StreamEye查看一下,能很容易地看到各个宏块的结构类型。

Mv。你可以在H.264 Visa中查看一下,看看每个part的Mv是多少,注意,因为运动矢量是以1/4像素为单位的,所以(4,8),实际代表偏移了(1,2)个像素。然后可以根据Mv到上一帧找一下参考块的位置,然后比较一下参考块和预测块,看看两者是否近似(非整点情况)或相同(整点情况,比如Mv= (4,4))。

Mv的预测。找到当前块的A、B、C块,然后预测一下Mv,再看实际的Mv是多少。

自己根据Mv,找到参考块。再在matlab中写个插值程序,应该可以插出正确的值。

注意,做这个练习,应该在第一个P帧中来做,如果到第二个P帧中做,因为涉及多参考帧的问题,找参考帧会比较麻烦。

3 变换量化。264中变换量化已经合在一起了,白皮书上已经有详细说明。可以自己用matlab来算一下白皮书上的题目,再在码流中找一个块,做下反量化反变换,最后看看结果,和H.264 Visa的结果比一下。

4 CAVLC。

没什么可说的,理解一下CA,然后知道其实就是个改进了的Run-level编码就可以。

5 Deblocking

理解一下Bs,理解一下阈值。注意,当梯度小于阈值时才做加权,为什么?

在H.264 Visa中比较一下pre-loop filter和final的数据。

6 码流结构和语法。

用StreamEye可以查看码流及其分析结果。

有了这两个码流分析工具,再结合白皮书,应该很快能掌握I块,P块的重建方法,并能熟悉码流结构。

JM代码太复杂,没必要在这个阶段看。协议,更烦琐,不做完整开发的话也没必要看了。可以看看市面上的相关的参考书。

转自:http://www.cnblogs.com/shakin/archive/2012/08/03/3714865.html

时间: 2024-10-23 16:52:37

如何学习H264协议的相关文章

30天轻松学习javaweb_https协议的密码学

https通过非对称加密实现数据安全1.CA机构提供数字证书,其中数字证书包含公钥.2.浏览器自带功能验证数字证书是否是CA机构颁发的.3.根据数字证书包含的公钥对表单数据进行加密.4.公钥提供方再根据自己的私钥对数据进行解密. 30天轻松学习javaweb_https协议的密码学,布布扣,bubuko.com

vlc源码分析(七) 调试学习HLS协议

HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Video on demand, VOD) 点播模式是指当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址.这种模式允许客户端访问全部内容.上面的例子中就是一个点播模式下的m3u8的结构. (2) 直播模式(Live) 直播模式是指实时生成M3u8和ts文件.它的

quagga源码学习--BGP协议创建对等体

现有的路由协议都是通过分布式协议逐个配置协商运行的,协议协议,一个就不需要协议咯,至少2个才能够协议着做事情嘛,不过呢,这样就出现网元过多配置困难的问题,对网管软件要求也越来越高, SDN或许可能改变这个局面,但不管软件如何定义,报文还是在一个一个网络节点传输的,所以我们看到quagga这样多的传统网络配置命令不要觉得繁琐,不配置的话,协议不会工作哦. 嗯,这章的主题是创建对等体,就是通过配置命令来完成的. "neighbor peer remote-as asn" router bg

学习Swift -- 协议(上)

协议(上) 协议是Swift非常重要的部分,协议规定了用来实现某一特定工作或者功能所必需的方法和属性.类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能.任意能够满足协议要求的类型被称为遵循这个协议. protocol SomeProtocol { // 协议内容 } struct SomeStruct: SomeProtocol { // 结构体和枚举都可以遵循协议,写法以 ": 协议名"为准 多个协议名以逗号分隔 } class SomeClass { }

25-黑马程序员------OC 语言学习笔记--- 协议

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 协议用于定义多个类应该遵守的规范,协议不提供任何实现.协议体现的是规范和实现分离的设计哲学.协议用来用来声明一大堆方法,不能声明成员变量. 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明.只要某个类遵守了这个协议

[转]单点登录SSO学习——CAS协议内容

作者:anmaler 本文转自:http://blog.zhaojunling.me/p/24 CAS中文文档甚少,这篇文章对CAS接口参数有比较清楚的说明,排版也不错查阅舒适 在当前互联网产品中使用单点登录的情况非常的常见,比如Google.百度.阿里云.京东.淘宝等.在用户中心登陆后再访问其他子系统时系统自动检测已登录状态,而不用重新登录. 说起单点登录就不得不说CAS,这个已经成为了单点登录的代名词. 什么是CAS? CAS是为了解决单点登录问题所设计的一套协议.协议地址http://ja

swift 学习- 24 -- 协议 01

// 协议 定义了一个蓝图, 规定了用来实现某一特定任务或者功能的方法, 属性, 以及其他需要的东西. // 类, 结构体, 或 枚举都可以遵循协议, 并且为协议定义的这些要求 提供具体的实现, 某个类型能够满足某个协议的要求, 就可以说该类型 遵循了这个协议 // 除了遵循协议的类型必须实现的要求外, 还可以对协议进行扩展, 通过扩展来实现一部分或者实现一些附加功能, 这样遵循的协议的类型能够使用这些功能 // 协议的语法 // 协议的定义方式 与 类, 结构体 和 枚举的定义非常相似 //

Swift学习笔记-协议(Protocols)

  1.0 翻译:geek5nan 校对:dabing1022 2.0 翻译:futantan 校对:小铁匠Linus 定稿:shanksyang 本页包含内容: 协议的语法(Protocol Syntax) 对属性的规定(Property Requirements) 对方法的规定(Method Requirements) 对Mutating方法的规定(Mutating Method Requirements) 对构造器的规定(Initializer Requirements) 协议类型(Pro

javaweb学习--http协议

一.什么事http协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,他是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与web服务器之间交换数据的过程.客户端连上WEB服务器后,若想获得web服务器中的某个web资源,需遵循一定的通讯格式,HTTP协议用于定义客户端与WEB服务器通讯的格式. 二.HTTP协议的版本 HTTP协议的版本:HTTP/1.0 .HTTP/1.1 三.HTTP 1.0和HTT P1.1的区别 在HTTP1.0协议中,