一 、实验原理

1. H.264编码原理
H.264相比于之前讲过的MPEG-2来说,注重实用,采用更成熟的技术,要求更高的编码效率和简洁的表现形式。与此同时,在混合编码器的基本框架下,H.264对MPEG-2中的主要关键模块都进行了重大改进。但是,H.264标准的预测、变换、量化、熵编码等基本模块和MPEG-2并没有太大的区别,变化主要体现在功能模块的具体细节上。

H.264在视频编码层(VCL)和网络提取层(NAL)之间进行概念分割,以实现在不同的传输环境下的有效传输,便于与当前和将来的编码格式和不同类型的网络进行无缝连接。

2. H.264的特点
压缩比高:在同等图像质量的条件下,采用H.264技术压缩后的码流,数据量只有MPEG-2的1/2;
容错率高:H.264码流具有较强的抗误码特性,可适应丢包率高、干扰严重的信道,如IP和无线网络;
网络适应性强:H.264提供了网络适应层,使得H.264的文件能容易地在不同网络上传输;
计算复杂度高:H.264使用较高的计算复杂度,换取优越的性能,其复杂度相当于MPEG-2的2—3倍。

3. H.264和其他MPEG-2编码标准的差异
帧内预测
在空间域内进行帧内预测,提高帧内编码的精确度。不可以用下方或右方的像素来预测,原因是需要保证编解码端的一致性,解码端只能用解码以后的样本,不能用下方或右侧还未编码的像素。

基于运动估计和运动补偿的帧间预测:去除时间冗余
不同尺寸的块和形状,高分辨率的子像素运动估计,选择多个参考帧

DCT变换:去除空间冗余
使用整数的DCT变换,利用相关性,去除空间冗余

熵编码技术:去除统计冗余
通用变长编码(UVLC),基于上下文的自适应变长码编码(CAVLC),基于上下文的自适应二进制算术编码(CABAC)

二、实验步骤

一、 选择一个.mp4或者.264文件。

二、 在码流分析仪软件中打开该文件,从几个层次进行分析:

(1) 分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)

(2) 以一个GOP为例,分析如下信息:

每个图像帧的类型及所用的编码比特数、QP值;

以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;
以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。

以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

SPS和PPS
SPS:SPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。在H.264标准协议中规定了多种不同的NAL Unit类型,其中类型7表示该NAL Unit内保存的数据为Sequence Paramater Set。在H.264的各种语法元素中,SPS中的信息至关重要。如果其中的数据丢失或出现错误,那么解码过程很可能会失败。

PPS:除了序列参数集SPS之外,H.264中另一重要的参数集合为图像参数集Picture Paramater Set(PPS)。通常情况下,PPS类似于SPS,在H.264的裸码流中单独保存在一个NAL Unit中,只是PPS NAL Unit的nal_unit_type值为8;而在封装格式中,PPS通常与SPS一起,保存在视频文件的文件头中。

sps:

profile_idc:标识当前H.264码流的profilelevel_idc:标识当前码流的Levelseq_parameter_set_id:表示当前的序列参数集的idlog2_max_frame_num_minus4:用于计算MaxFrameNum的值pic_order_cnt_type:表示解码picture order count(POC)的方法
num_ref_frames:用于表示参考帧的数目
gaps_in_frame_num_value_allowed_flag:标识位,说明frame_num中是否允许不连续的值
pic_width_in_mbs_minus1:用于计算图像的宽度,单位为宏块个数
pic_height_in_map_units_minus1:使用PicHeightInMapUnits来度量视频中一帧图像的高度
frame_mbs_only_flag:标识位,说明宏块的编码方式
direct_8x8_inference_flag:标识位,用于B_Skip、B_Direct模式运动矢量的推导计算
frame_cropping_flag:标识位,说明是否需要对输出的图像帧进行裁剪
vui_parameters_present_flag:标识位,说明SPS中是否存在VUI信息

pps:

pic_parameter_set_id:表示当前PPS的idseq_parameter_set_id:表示当前PPS所引用的激活的SPS的identropy_coding_mode_flag:熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法pic_order_present_flag:POC的三种计算方法在片层还各需要用一些句法元素作为参数,本句法元素等于1时表示在片头会有句法元素指明这些参数num_slice_groups_minus1:表示某一帧中slice group的个数num_ref_idx_l0_default_active_minus1、num_ref_idx_l0_default_active_minus1:表示当Slice Header中的num_ref_idx_active_override_flag标识位为0时,P/SP/B slice的语法元素num_ref_idx_l0_active_minus1和num_ref_idx_l1_active_minus1的默认值weighted_pred_flag:标识位,表示在P/SP slice中是否开启加权预测weighted_bipred_idc:表示在B Slice中加权预测的方法,取值范围为[0,2]pic_init_qp_minus26和pic_init_qs_minus26:表示初始的量化参数chroma_qp_index_offset:用于计算色度分量的量化参数,取值范围为[-12,12]deblocking_filter_control_present_flag:标识位,用于表示Slice header中是否存在用于去块滤波器控制的信息constrained_intra_pred_flag:若该标识为1,表示I宏块在进行帧内预测时只能使用来自I和SI类型宏块的信息;若该标识位0,表示I宏块可以使用来自Inter类型宏块的信息redundant_pic_cnt_present_flag:标识位,用于表示Slice header中是否存在redundant_pic_cnt语法元素

I帧

B帧

比特分布

H.264码流的分析相关推荐

  1. H.264码流分析及编解码调试

    一.H.264码流分析 1. 选择一个.mp4或者.264文件. 2. 在码流分析仪软件中打开该文件,从几个层次进行分析: (1) 分析SPS和PPS里都包含哪些主要的信息,给出参数值.(例如分辨率. ...

  2. H.264 媒体流 AnnexB 和 AVCC 格式分析 及 FFmpeg 解析mp4的H.264码流方法

    H264码流分两种组织方式,一种是AnnexB格式,一种是AVCC格式. 作者:码农小明 来源:https://blog.csdn.net/shaosunrise/article/details/12 ...

  3. H.264码流结构解析

    大概前五六年之前写过的一个大体分析H.264格式,不是很详细,可以大致看看有哪些格式.  H.264码流结构解析 那个时候上传的百度文库,以前记得有多积分,现在都不能下载了,还要充钱才可以.真是~~~ ...

  4. 使用 ortp 发送原始 H.264 码流

    oRTP 是一个 RTP (Real-time Transport Protocol (RFC 3550)) 协议的库实现,它完全以 C 语言来实现,因此方便应用于各种不同的平台.本文分享用 oRTP ...

  5. H.264码流解析 一个SPS的nalu及获取视频的分辨率

    00 00 00 01 67 42 00 28 E9 00   A0 0B 77 FE 00 02 00 03 C4 80   00 00 03 00 80 00 00 1A 4D 88   10 9 ...

  6. H.264码流结构及JM8.6中码流的产生步骤

    整理自:http://www.cnblogs.com/xkfz007/archive/2012/08/12/2612931.html H.264中的码流结构 H.264码流结构示意图: NALU第一字 ...

  7. 【数据压缩作业9】H.264码流分析仪

    一.实验要求 选择一个.mp4或者.264文件. 在码流分析仪软件中打开该文件,从几个层次进行分析: 分析SPS和PPS里都包含哪些主要的信息,给出参数值.(例如分辨率.帧率.GOP结构等) 以一个G ...

  8. H.264码流分析仪

    目录 一.实验内容 二.实验结果 1. SPS profile_idc level_idc eq_parameter_set_id log2_max_frame_num_minus4 pic_orde ...

  9. linux h264分析器,H.264码流分析器

    H.264码流分析器是一款专业的H.264码流分析工具,可以分析每个NAL的信息,支持中英双语,支持H.264裸流作为输入,可以详细的列出H.264码流中NAL的信息,还可以工作在实时通信应用(如视频 ...

最新文章

  1. cdc工具 postgresql_零编码打造异构数据实时同步系统——异构数据源CDC之2
  2. ielts writing
  3. 昨天521表白失败,我想用Python分析一下...表白记录和聊天记录
  4. 馒头何瑫写作训练营的学习笔记总结
  5. Netscape Navigator 9 Beta 1 颁布
  6. Xshell和Xftp5配置连接阿里云服务器
  7. 【报告分享】2022金融科技趋势研究报告.pdf(附下载链接)
  8. 计算机基础类报刊,全国“xx杯”计算机应用基础类说课大赛优秀作品:图文表混排-制作感恩报刊说课课件...
  9. php登录界面模板美化,一款简单好看的登录界面——Typecho美化包 Sign-Page-For-Typecho...
  10. 设计模式经典书籍推荐
  11. Java个人博客项目
  12. echar图形使用双Y轴(散点+折线)
  13. 联想thinkpad E430c 重装系统之后无线连接显示红叉解决办法
  14. Java获取不到tfp目录内容_AndroidRuntime引起:java.lang.unsatisfiedLinkError:无法加载tfp_jni:findLibrary返回null...
  15. 【第九篇】商城系统-商城首页功能
  16. html qq消息弹窗提醒,能不能让QQ消息不再讨厌 QQ HD mini消息弹窗提醒的优化方案...
  17. 使用 K-means 算法进行客户分类
  18. CSS 开源资源大全收集
  19. opera 浏览器头 不是opera 打头
  20. 计算机技术翻译工作,中文翻译成英文- 学习及工作经历2004年4月 中国计算机函授学院计算机专业专科毕业;...

热门文章

  1. Google搜索时如何在新标签页打开搜索结果
  2. camera 成像原理
  3. FileInputStream与BufferedInputStream的区别
  4. Scrapy vs BeautifulSoup
  5. 如何检测家里的WIFI网络信号?
  6. Photoshop中的渐变工具
  7. 全缓存、行缓存和无缓存
  8. 《自来水哲学-松下幸之助自传》读后感
  9. IDV和VDI,桌面虚拟化对比
  10. 【编译原理】词法分析器语法分析器