PS(MPG)文件格式分析
来源:互联网 发布:解数独的软件 编辑:程序博客网 时间:2024/06/06 20:10
ps文件分析
PS文件有三种类型的: vob dat mpg
PS_DAT_PACK_SIZE 2352
PS_VOB_PACK_SIZE 2048
PS_MPG_PACK_SIZE 2324
与TS文件类似,是固定包长的。
打开文件,可以看到文件以0x0000 01B9结束,即 MPEG_Program_end_code,
之前有很多个0x0000 00BA字段,即为program pack的开始标志,代表每个packet的开始。
program packet 的结构如下所示:
可以看出program pack由3部分组成:pack_header+system_header+PES_packets,其中system_header当且仅当pack是第一个数据包时才存在。
1 system_header
2 packet header
第 5 个byte的 前两个比特 reserved中,左边为 01 ,右边为 00, 分别表示左边为 MPEG2,右边为MPEG1,所以上边packet header结构图是mpeg2的。
3 PES packet
第一个packet的 PES packet:起始地址:0x0000 0020
packet_start_code_prefix(3B):0x 00 00 01
stream_id(1B):0xBE(BE为Padding stream)
PES_packet_length(2B):0x07 DA,跳过该长度的填充字节,刚好为下一个pack的起始标志:0x000001BA 。 从0x0800地址开始为第二个pack包, 该包的构造格式为pack_header+PES。
4
分析下个包。 由 pack_header + pes packet 构成。 pack_header 整体结构同前面一样,这里就不叙述。唯一变的就是system_clock_reference_base_14_0 和 system_clock_reference_extension 这两数据在改变。
stream_id = 0xeo - oxef为video。 0xc0 - 0xCF为audio
PTS全称为presentation time stamp。 DTS全称为dedoding time stamp。 因为除了PTS_DTS_flag为11外,其余6个标志都为0,所以直接进入视频序列:Video Sequence,其结构定义如下:
4.1 Sequence Header
sequence header:起始地址:0x0000 0824
sequence_header_code(4B):0x 0000 01B3
4.2 Sequence extension
sequence extension:起始地址:0x0000 082d;如果有这一项说明是MPEG-2文件,否则为MPEG-1文件
extension_start_code(4B):0x0000 01B5
4.3 extension&user data
接下来如果为 extension&user data[i](extension data的开始符为0x0000 01B5,user data的开始符为0x0000 01B2),Group of pictures header 是0x0000 01B8。
extension data 0x 000001B5
4.4 Group of pictures header
start_code 0x000001B8
picture_coding_type = 1 表示I帧 2 3 表示B P帧, 第一个grooup 为I帧 其他可以为 B P帧
picture data
picture data: 起始地址:0x0000 0850,picture data分为多个slice片,而每个slice又分为多个Microblock,Microblock继续分为Block块。
13818-2中定义的picture_data()如下:
picture_data() {
do {
slice()
} while ( nextbits() == slice_start_code )
next_start_code()
}
Slice
slice() {
slice_start_code 32
if (vertical_size > 2800)
slice_vertical_position_extension 3
if (<sequence_scalable_extension() is present in the bitstream>) {
if (scalable_mode == “data partitioning” )
priority_breakpoint 7
}
quantiser_scale_code 5
if ( nextbits() == ‘1’ ) {
intra_slice_flag 1
intra_slice 1
reserved_bits 7
while ( nextbits() == ‘1’ ) {
extra_bit_slice /* with the value ‘1*/ 1
extra_information_slice 8
}
}
extra_bit_slice /* with the value ‘0’ */ 1
do {
macroblock()
} while ( nextbits() != ‘000 0000 0000 0000 0000 0000’ )
next_start_code()
}
从文件内容分析,从0x0000 0850单元为第一个slice(0000 0101),共有7个slice,第7个slice的起始单元为0x0000 fe04,紧接着开始下一个packe,直到0x0000 3000才开始第一个音频pack包,后面的数据视频pack和音频数据成交叉状态。文件结尾标志为0x0000 01B9。
- PS(MPG)文件格式分析
- MPG
- 《PNG文件格式》(二)PNG文件格式分析
- live555源码分析----mpg文件的处理
- live555源码分析----mpg文件的处理
- live555源码分析----mpg文件的处理
- BMP文件格式分析(zz)
- (转载)bin文件格式分析
- OBJ文件格式分析(一)
- BMP文件格式分析(zz)
- MP3文件格式分析详解(实例分析)
- live555源码分析----mpg文件的处理(续)
- mpg文件切片之后,不能播放问题分析
- live555源码分析----mpg文件的处理(续)
- Gif 文件格式分析 —— (转)
- (转)wav文件格式分析详解
- wav文件格式分析详解(网络转载)
- FLV文件格式分析(附源码)
- spring security3.x学习(10)_自定义的登录页面
- spring security3.x学习(11)_退出
- hdu 4001
- 九度1014 排名 结构体排序
- spring security3.x学习(12)_remember me
- PS(MPG)文件格式分析
- C++ char,wchar_t, string, wstring之间的转换
- csshach
- 面向对象软件设计中的开闭原则
- ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS component
- Java学习总结之贪吃蛇项目程序编写(一)
- c++的单例模式
- ElasticSearch入门
- C++中 形如int x:1;int x:2;int x:32(冒号后为1-32,32为最大值)的意思解释