大概前五六年之前写过的一个大体分析H.264格式,不是很详细,可以大致看看有哪些格式。 
H.264码流结构解析

那个时候上传的百度文库,以前记得有多积分,现在都不能下载了,还要充钱才可以。真是~~~

1. H.264简介

MPEG(Moving Picture Experts Group)和VCEG(Video Coding Experts Group)已经联合开发了一个比早期研发的MPEG 和H.263性能更好的视频压缩编码标准,这就是被命名为AVC(Advanced Video Coding),也被称为ITU-T H.264建议和MPEG-4的第10 部分的标准,简称为H.264/AVC或H.264。这个国际标准已经与2003年3月正式被ITU-T所通过并在国际上正式颁布。为适应高清视频压缩的需求,2004年又增加了FRExt部分;为适应不同码率及质量的需求,2006年又增加了可伸缩编码 SVC。

2. H.264编码格式

H.263定义的码流结构是分级结构,共四层。自上而下分别为:图像层(picturelayer)、块组层(GOB layer)、宏块层(macroblock layer)和块层(block layer)。而与H.263相比,H.264的码流结构和H.263的有很大的区别,它采用的不再是严格的分级结构。

H.264支持4:2:0的连续或隔行视频的编码和解码。H.264压缩与H.263、MPEG-4相比,视频压缩比提高了一倍。

H.264的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL, Network Abstraction Layer)。VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。每个NAL单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL头信息。RBSP的基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。

 
图1 NAL单元序列

3. H.264传输

H.264的编码视频序列包括一系列的NAL单元,每个NAL单元包含一个RBSP,见表1。编码片(包括数据分割片IDR片)和序列RBSP结束符被定义为VCL NAL单元,其余为NAL单元。典型的RBSP单元序列如图2所示。每个单元都按独立的NAL单元传送。单元的信息头(一个字节)定义了RBSP单元的类型,NAL单元的其余部分为RBSP数据。

 
图2 RBSP序列举例


表1 RBSP描述

4. H.264码流结构图

 
图3 H.264码流分层结构

起始码:如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001。 
NAL Header:forbidden_bit,nal_reference_bit(优先级),nal_unit_type(类型)。 
脱壳操作:为了使NALU主体不包括起始码,在编码时每遇到两个字节(连续)的0,就插入一字节0x03,以和起始码相区别。解码时,则将相应的0x03删除掉。 
NALU类型:


表2 nal_unit_type语义

5. H.264解码

NAL头信息的nal_referrence_idc(NRI)用于在重建过程中标记一个NAL单元的重要性,值为0表示这个NAL单元没有用预测,因此可以被解码器抛弃而不会有错误扩散;值高于0表示NAL单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大。 
NAL头信息的隐藏比特位,在H.264编码器中默认为0,当网络识别到单元中存在比特错误时,可将其置为1。隐藏比特位主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。

 
图4 NAL单元解码

NAL单元解码的流程为:首先从NAL单元中提取出RBSP语法结构,然后按照如图4所示的流程处理RBSP语法结构。输入的是NAL单元,输出结果是经过解码的当前图像的样值点。 
NAL单元中分别包含了序列参数集和图像参数集。图像参数集和序列参数集在其他NAL单元传输过程中作为参考使用,在这些数据NAL单元的片头中,通过语法元素pic_parameter_set_id设置它们所使用的图像参数集编号;而相应的每个图像参数集中,通过语法元素seq_paramter_set_id设置他们使用的序列参数集编号。

6. 各分层结构的语法元素参考G50标准。

H.264码流结构解析相关推荐

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

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

  2. 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 ...

  3. 我的开源项目:H.264码流分析器

    本文介绍一个自己的开源小项目:H.264码流分析器.在学习过程中,从开源社区获得了很多的资源,在此也算是对开源社区的回馈了. 我这个项目规模不大,主要可以用来学习H.264码流结构.使用VC 2010 ...

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

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

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

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

  6. H.264码流的分析

    一 .实验原理 1. H.264编码原理 H.264相比于之前讲过的MPEG-2来说,注重实用,采用更成熟的技术,要求更高的编码效率和简洁的表现形式.与此同时,在混合编码器的基本框架下,H.264对M ...

  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. 七夕|情人节情书指南
  2. QQ音乐vkey获取,更新播放url
  3. vlc android 移植版编译
  4. vue 出现Elements in iteration expect to have 'v-bind:key' directives
  5. Linux centos 使用yum安装MySQL
  6. DevExrepss的Grid属性设置及常用方法总结
  7. 给超链接A添加按钮样式
  8. Chrome 35个开发者工具的小技巧
  9. 网站html静态化 教程,新云CMS网站内容管理系统生成HTML静态化教程
  10. oracle完全删除表空间
  11. 40. 若一个类是函数子,则应该使它可配接
  12. matlab提取汉字拼音,中文转拼音工具
  13. SPSS实现两变量相关分析
  14. 输入1-365 的一个数字判断它是几月几日
  15. MATLAB实现语音信号的读取
  16. syntax error:unterminated quoted string
  17. 吐血推荐:“四无男”泡良 妞 实战攻略
  18. 腾讯云安装配置数据库MySQL并且使用SQLyog连接
  19. 卖油条年入三十万,大学还有必要去上吗?
  20. cml sml区别_CAL.CML.SML的关系

热门文章

  1. RocketMQ的核心概念讲解
  2. 私有属性和方法-伪私有属性和方法
  3. 部署eureka和config
  4. 书生阅读器打开gd文件出错_CAJ论文怎么打开?
  5. HID报表描述符(目前最全的解析,也是USB最复杂的描述符)
  6. MySQL 复制 - 性能与扩展性的基石:概述及其原理
  7. springMVC---处理模型数据方法 *
  8. ansible 下lineinfile详细使用
  9. 一个产品经理的自述:我在腾讯工作的这一年(转)
  10. 超级组合:用户中心+云平台