如何学习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. 协议源码的学习 ...
随机推荐
- WAMP学习日记之:Apache发布php网站
1.修改httpd.conf 文件,以便让Apache和php模块建立关联 2.配置php.ini文件 修改httpd.conf 文件,以便让Apache和php模块建立关联 如何让apache和ph ...
- Python自动化运维之28、Django(二)
一.FORM 1.概述 django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.for ...
- 编译内核出错:invalid option `abi=aapcs-linux' 解决办法
出现此问题的原因是由于kernel feature中选中了Use the ARM EABIto compile the kernel引起的,有两各解决办法: 1)换编译器为arm-linux-gcc ...
- HTML5 display:inline、block、inline-block的区别--备用
display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...
- 新建maven project遇到的问题
在m2e安装成功之后,开始创建maven project了,但是出现了如下错误: 结果在很偶然的情况下让我解决了,就是更新下m2.respository,点击下图中的Update Settings -
- 在Eclipse中安装m2e插件遇到的问题
最近自己想使用maven来搭建自动化测试框架,当中遇到了很多问题,其中之一就是安装m2e(Maven Integration for Eclipse). 其实原来的eclipse中已经安装好了m2e, ...
- getClassInstances --通过类的实例来得到数据
好东西,空了来研究 实例代码如下: for b in getClassInstances bitmaptex doformat "Name : %, Texture name : %, Af ...
- 【转】分享II→IV FPGA本人的几个版本电源模块设计的方案
很多人问我FPGA的电源怎么怎么着,当然也有人瞎忽悠乱设计,当然我的设计也不是很完美...这里把我当年第一次设计FPGA,到现在的电源方案,几个演变.分析的过程,给大家讲讲... (1)FPGA电源方 ...
- 转:2014 年 15 款新评定的最佳 PHP 框架
原文来自于:http://blog.jobbole.com/59999/ 原文出处: codegeekz 译文出处:oschina 欢迎分享原创到伯乐头条 通常,框架都会被认为是帮助开发者快速 ...
- ubuntu 解压rar
Ubuntu下解压rar文件的方法 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简单的,只需要两个步骤 ...