MPEG2视频编码定义在 ISO/IEC13818-2中,MPEG2 video sequence如下图所示

我们可以借助Elecard Stream Analyer工具来分析MPEG2视频码流

MPEG2编码码流的起始码的含义如下

1.Sequence Header

MPEG2视频裸流的每一个GOP以Sequence Header开头,Sequence Header的起始码为00 00 01 B3,它里面保存了如下信息

  • horizontal_size_value:视频帧宽度
  • vertical_size_value:视频帧高度
  • aspect_ratio_information:宽高比,各取值的含义如下

  • frame_rate_code:帧率,各取值含义如下

  • bit_rate_value:码率
  • marker_bit:This is one bit that shall be set to '1'. This bit prevents emulation of start codes
  • vbv_buffer_size:定义了VBV (Video Buffering Verifie)的大小

2.Sequence Extention

它的起始码为 00 00 01 B5,保存了如下信息

  • profile_and_level_indication:指明了profile和leve
  • progressive_sequence:When set to '1' the coded video sequence contains only progressive frame pictures. Whenprogressive_sequence is set to '0' the coded video sequence may contain both frame pictures and field pictures, and framepicture may be progressive or interlaced frames.
  • chroma_format:采样格式,各取值含义如下

3.Group of picture Header

起始码为00 00 01 B8,保存了如下信息

  • time_code:时码,占25个字节,包含drop_frame_flag, time_code_hours, time_code_minutes,marker_bit, time_code_seconds 以及 time_code_pictures,各标志取值范围如下

 drop_frame_flag 标志只有在帧率为 29.97 时才有可能被设置为1。如果被设置为0 每秒钟的帧数被近似到最近的整数,例如29.97的被近似为30. 如果被设置为1,除了 0, 10, 20, 30, 40, 50 分钟外每分钟开始的第0和第1帧将被忽略
  • closed_gop:指明紧挨着在group of picture header后的I帧的连续的B帧的编码方式,如果被设置为1,表示该B帧只采用backward prediction 或 intra coding (Close GOP是指帧间的预测都是在GOP中进行的。而使用open GOP,后一个GOP会参考前一个GOP的信息。使用这种方式就大大降低了码率)

4.Picture Header

Picture Header保存了图像相关信息,从该头部信息中可以判断该帧时IP或B帧。它的起始码为00 00 01 00

  • temporal_reference:指明该帧的参考属性,各取值含义如下

  • vbv_delay:当该值为 0xFFFF 表示VBR编码
当出现0x0000100,是就表示已经到了图象层,再越过10位(Temporal_reference占10位),就到了Picture_coding_type(3位),如果Picture_coding_type为001(二进制)就是I帧,为010是P帧,011则就是B帧。

5. Picture coding extension

  • f_code[s][t]:4bit的整数,用在解码时的运动向量中,s和t的取值含义如下图

  • intra_dc_precision: indicates the number of bits for quantized DC,coefficients of intra-coded blocks,The more bits are used, the more precise quantization is achieved,取之含义如下

  • picture_structure :图像扫面方式,各取值含义如下

  • frame_pred_frame_dct:If this flag is set to '1', then only frame-DCT and frame prediction are used. In a field picture it shall be '0'. frame_pred_frame_dct shall be '1' if progressive_sequence is '1'. This flag affects the syntax of the bitstream.
  • concealment_motion_vectors:This flag has the value '1' to indicate that motion vectors are coded in intra macroblocks. This flag has the value '0' to indicate that no motion vectors are coded in intra macroblocks
 
参考:ISOIEC13818-2-2013.pdf

MPEG-2码流结构分析的更多相关文章

  1. H264编码原理以及I帧、B和P帧详解, H264码流结构分析

    H264码流结构分析 http://blog.csdn.net/chenchong_219/article/details/37990541 1.码流总体结构: h264的功能分为两层,视频编码层(V ...

  2. H264码流结构分析和rtp打包结构详解

    网络抽象层单元类型 (NALU): NALU头由一个字节组成,它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+ ...

  3. (转载)H.264码流的RTP封包说明

    H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...

  4. H264码流打包分析

    转自:http://www.360doc.com/content/13/0124/08/9008018_262076786.shtml   SODB 数据比特串-->最原始的编码数据 RBSP ...

  5. H264码流打包分析(精华)

    H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若 ...

  6. H.264码流结构解析

    from:http://wenku.baidu.com/link?url=hYQHJcAWUIS-8C7nSBbf-8lGagYGXKb5msVwQKWyXFAcPLU5gR4BKOVLrFOw4bX ...

  7. 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我

    一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...

  8. aac adts & LATM封装码流分析

    本文继续上一篇文章的内容,介绍一个音频码流处理程序.音频码流在视频播放器中的位置如下所示. 本文中的程序是一个AAC码流解析程序.该程序可以从AAC码流中分析得到它的基本单元ADTS frame,并且 ...

  9. 从H264码流中获取视频宽高 (SPS帧) 升级篇

    之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...

随机推荐

  1. MySQL实战 | 04 为什么要使用索引?

    原文链接:MySQL实战 | 为什么要使用索引? 用过 MySQL 的应该都知道索引是干啥的吧,应该多少都设置过索引,但是若是问你索引是怎么实现的,你能说上来吗? 索引是什么? MySQL 官方对索引 ...

  2. PAT 1009 说反话 C语言

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区 ...

  3. 基于jquery 的ajax 文件下载

    ajax 文件下载,实际上就是模拟表单提交,代码如下: function download(url, data, method){ //url and data options required if ...

  4. 算法训练 安慰奶牛(节点有权值的MST)

    问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...

  5. Java的八种基本数据类型及其包装类

    Java有八种基本数据类型,所谓基本类型就是说存储时仅存在栈中,那么与之相对就是引用类型,引用类型既存在栈里又存在堆里,栈内存放堆内地址. 八种基本类型分别为byte short int long f ...

  6. 报错:Can't find a source file at "xxxxx“Locate the file or edit the source lookup path to include its location.

    调试问题: Can't find a source file at "/tmp/TI_MKLIB6sLCzz/SRC/exit.c" Locate the file or edit ...

  7. Log4j配置详解之log4j.xml

    Log4j配置详解之log4j.xml Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息. ...

  8. Java中 如何把Object类型强转成Map<String, String>类型

    首先你需要保证要转换的Object的实际类型是Map<String, String> 假设Object变量名为obj,强制转换(Map<String, String>)obj ...

  9. 【转】Hadoop学习路线图

    按照这个路线图来学习即可.    1.M. Tim Jones的三篇文章:    用Hadoop进行分布式数据处理第1部分(入门):http://www.ibm.com/developerworks/ ...

  10. 【UVA】673 Parentheses Balance(栈处理表达式)

    题目 题目     分析 写了个平淡无奇的栈处理表达式,在WA了5发后发现,我没处理空串,,,,(或者说鲁棒性差?     代码 #include <bits/stdc++.h> usin ...