如何学习H264协议
首先,我假定你已经具有如下基础:
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
如何学习H264协议的更多相关文章
- JavaWeb学习----http协议
一.什么是HTTP协议: 1.概念: 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式(规定客户端和服务器如何 ...
- 学习h264 的语法规则,如何才能看懂H264 的官方文档
1. 今天想查h264 的帧率,查找资料如下: 首先要解析sps,得到两个关键的数值: num_units_in_tick, time_scale fps=time_scale/num_units_i ...
- H264协议(转)
码率(Bitrate).帧率(FPS).分辨率和清晰度的联系与区别:https://blog.csdn.net/pc9319/article/details/79621352 H.264编码原理以及I ...
- 协议基础:SMTP:使用Telnet学习SMTP协议
协议基础:SMTP:使用Telnet学习SMTP协议 2018-07-30 20:05:50 liumiaocn 阅读数 7479更多 分类专栏: 工具 Unix/Linux 版权声明:本文为博主 ...
- TCP/IP协议学习(四) 协议概述
生活中有舒适区,借口成为懒惰的护身符,学习也有舒适区,逃避便是阻止进步的最大障碍. 经过半年多嵌入式方面的工作和学习,我提高了很多,但同时我也对自己所面临的问题逐渐清晰: 1. 偏于实践,理论基础不牢 ...
- 深入浅出学习HTTP协议
之前学习javaWeb只是大致了解了一下,今天重点介绍下http请求,当是复习吧! 一.http基础概念 1.什么是http协议? HTTP是Hyper Text Transfer Protocol( ...
- 第一讲 新手如何学习HTTP协议之实践项目多开微信机器人
上一篇做了一个smart qq机器人. 前几天,因为突然上不了 smart qq,以为TX 要抛弃了..所以就没有接着完善smart 机器人.应朋友要求,做一个多开微信. 做了几天已经做好了,理论上 ...
- vlc源码分析(七) 调试学习HLS协议
HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Vide ...
- quagga源码学习--BGP协议的初始化
quagga支持BGP-4,BGP-4+协议,支持多协议(mpls,isis,ospf等等)以及单播,组播路由的导入和分发. 具体的协议,这里就不附录了,网络上有很多资料,或者RFC. 协议源码的学习 ...
随机推荐
- 定制linux中的Gtk theme<一>如何设置窗口按钮的多态效果
GTK主题之个人理解: GTK 主题引擎(包含代码所需的图形元素) + 主题配置文件(gtkrc文件)+ 数据资源文件(如图片等) 三者所呈现给用户的视觉风格效果 GTK拥有一套大量的widg ...
- CodeForces 554B(扫房间)
CodeForces 554B Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- jquery升级换代
其实从去年开始1.9以上新版的jquery已不再支持toggle方法和live方法. live用on方法替代. 话说这个方法确实挺方便的,那么怎么交替点击呢,html的checked属性我觉得不是很好 ...
- JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义
最显著的应用当然是银行存款和取款,不要存在存取数字和实际发生不一样的情况. synchronized关键字. class BankAccount { private int balance = 100 ...
- vsphere 出现“在主机的当前连接状况下不允许执行该操作”
问题: 登录vsphere client启动虚拟机出现“在主机的当前连接状况下不允许执行该操作” 解决方法: 1.选择主机->右键->断开 2.选择主机->右键->连接 3.在 ...
- 设计模式之装饰者模式(Decorator Pattern)
一.什么是装饰者模式? 装饰者模式能够完美实现“对修改关闭,对扩展开放”的原则,也就是说我们可以在不修改被装饰者的前提下,扩展被装饰者的功能. 再来看看我们的文件操作代码: 1 InputStream ...
- Java中的移位操作符
记住所有的移动位数,针对的都是补码来讲的,所以要先将十进制整数转换成补码后,然后再来进行移位操作 移位操作 还要注意类型的约束条件,例如int,移动范围是0-31位,所以看补码只能看最后五位,这才是有 ...
- IntegerCache详解
IntegerCache是Integer的内部类,用来将-128——high之间的对象进行实例化 private static class IntegerCache { static f ...
- nginx 配置多个主机
<pre name="code" class="html"> server { listen 8001; server_name localhost ...
- 【转】Android4.3 蓝牙BLE初步
原文网址:http://www.cnblogs.com/savagemorgan/p/3722657.html 一.关键概念: Generic Attribute Profile (GATT) 通过B ...