MPEG-2 PS流
一个完整的MPEG-2文件就是一个PS流文件。
MPEG-2文件的构造格式如下图:
以一个实际的MPEG-2文件为例来分析一下PS流,MPEG-2文件:
http://download.csdn.net/source/212077
打开文件,可以看到文件以0x0000 01B9结束,即MPEG_Program_end_code,之前有很多个0x0000 00BA字段,即为program pack的开始标志,program pack包的构造如下:
可以看出program pack由3部分组成:pack_header+system_header+PES_packets,其中system_header当且仅当pack是第一个数据包时才存在。system_header和PES_packets构造如下:
对照文件内容,各字段值如下:
pack_header: 起始地址:0x0000 0000
Packet_start_code(4B):0x0000 01BA
'01'
SCR_base[32...30](3b):000
marker:1
SCR_base[29...15](15b):00 0000 0000 0010 1
marker:1
SCR_base[14...0](15b):00 0100 1000 0101 1
marker:1
SCR_externsion(9b):00 1111 101
marker:1
mutiplex_rate(22b):0000 0000 0101 0101 0001 01
marker:1
marker:1
reserved(5b):1111 1
stuffing_length(3b):000
system_header: 起始地址:0x0000 000e
system_head_start_code(4B):0x0000 01BB
head_length(2B):0x000C
marker:1
rate_bound(22b):000 0000 0010 1010 1000 101
marker:1
audio_bound(6b):0000 01
fixed_flag(1b):0
CSPS_flag(1b):0
system_audio_local_flag(1b):0
system_video_local_flag(1b):0
marker:1
video_bound(5b):0 0001
packet_rate_restriction_flag(1b):0
reserved(7b):111 1111
stream_id(1B):0xE0(E0~EF为视频ID)
'11'
P-STD_buffer_bound_scale(1b):1
P-STD_buffer_size_bound(13b):0 0000 0000 0001
stream_id(1B):0xC0(C0~DF为音频ID)
'11'
P-STD_buffer_bound_scale(1b):0
P-STD_buffer_size_bound(13b):0 0000 0100 1000
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,分析如下:
pack_header: 起始地址:0x0000 0800
Packet_start_code(4B):0x0000 01BA
'01'
program_clock_reference_base(3b):000
marker:1
SCR_base(15b):00 0000 0000 0000 0
marker:1
SCR_base(15b):00 0001 1001 1001 1
marker:1
SCR_externsion(9b):00 0111 100
marker:1
mutiplex_rate(22b):0000 0000 0100 0110 0101 00
marker:1
marker:1
reserved(5b):1111 1
stuffing_length(3b):000
PES packet:起始地址:0x0000 080e
packet_start_code_prefix(3B):0x 00 00 01
stream_id(1B):0xE0(视频)
PES_packet_length(2B):0x07 EC,跳过该长度,到达0x1000地址单元,为下一个pack的起始标志:0x000001BA
'10'
scrambling_control(2b):00
priority(1b):0
alignment(1b):0
copyright(1b):0
original(1b):0
PTS_DTS_flag(2b):11,该标志不能为01
ESCR_flag(1b):0
ES_rate_flag(1b):0
DSM_trick_mode_flag(1b):0
additional_copy_info_flag(1b):0
CRC_flag(1b):0
extension_flag(1b):0
PES_header_data_length(1B):0x0A
'0011'
PTS[32...30](3b):000,PTS全称为presentation time stamp
marker:1
PTS[29...15](15b):0000 0000 0000 000
marker:1
PTS[14...0](15b):1010 1001 1111 001
marker:1
'0001'
DTS[32...30](3b):000,DTS全称为dedoding time stamp
marker:1
DTS[29...15](15b):0000 0000 0000 000
marker:1
DTS[14...0](15b):1000 1100 1010 000
marker:1
因为除了PTS_DTS_flag为11外,其余6个标志都为0,所以直接进入视频序列:Video Sequence,其结构定义如下:
图中sequence_header,sequence entension等子内容定义如下:
对各字段分析如下:
sequence header:起始地址:0x0000 0821
sequence_header_code(4B):0x 0000 01B3
horizontal_size(12b):0010 0100 0000
vertical_size(12b):0001 1110 0000
aspect_ratio_info(4b):0010
frame_rate(4b):0001
bit_rate(18b):0001 0110 1111 0011 00
marker:1
VBV_buffer_size(10b):0 0011 1000 0
constrained(1b):0
load_intra_Q_matrix(1b):0
sequence extension:起始地址:0x0000 082d;如果有这一项说明是MPEG-2文件,否则为MPEG-1文件
extension_start_code(4B):0x0000 01B5
start_code_identifer(4b):0001
profile_level_escape(1b):0
profile_level(7b):100 1000
progressive(1b):1
chroma(2b):01
horiz_extension(2b):00
vertical_extension(2b):00
接下来的数据是0x0000 01B8,说明该序列中没有extension&user data[i](extension data的开始符为0x0000 01B5,user data的开始符为0x0000 01B2),接下来的内容为Group of pictures header。
Group_of_pictures_header:起始地址:0x0000 0837
group_start_code(4B):0x0000 01B8
time_code(25b):0000 0000 0000 1000 0000 0000 0
closed_gop(1b):0
broken_link(1b):0
extension & user data[1]:无
picture header: 起始地址:0x0000 083F
picture_start_code(4B):0x0000 0100
temporal_reference(10b):0000 0000 0000 00
picture_coding_type(3b):00 1
vbv_delay(16b):111 1111 1111 1111 1
extra_bit_picture(1b):0
picture coding extension:起始地址:0x0000 0847
extension_start_code(4B):0x0000 01B5
extension_start_code_identifier(4b):1000
f_code[0][0](4b):1111,forward horizontal
f_code[0][1](4b):1111,forward vertical
f_code[1][0](4b):1111,backward horizontal
f_code[1][1](4b):1111,backward vertical
intra_dc_presison(2b):00
picture_structure(2b):11
top_field_first(1b):0
frame_pred_frame_dct(1b):1
concealment_motion_vectors(1b):0
q_scale_type(1b):0
intra_vlc_format(1b):0
alternate_scan(1b):0
repeat_first_field(1b):0
chroma_420_type(1b):1
progressive_frame(1b):1
composite_display_flag(1b):0
extension & user data[2]:无
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。
MPEG-2 PS流相关推荐
- MPEG PS流格式
MPEG PS流格式 1. PS包头 图1 1) Pack start code:包起始码字段,值为0x000001BA的位串,用来标志一个包的开始 2) SCR base,SCR extenstio ...
- ffmpeg添加mpeg ps流的pcm的解码支持
ffmpeg原本不支持mpeg ps流,原因有两个.首先在编码时,ffmpeg没有在流中写入psm头:其次,在解码时,只在读文件头的时候判断了流的类型,而ps流中,流类型是在psm头中的,这样ffmp ...
- RTP协议全解(H264码流和PS流)
1 视频编码的原理 1.1 一个图像或者一个视频序列进行压缩,产生码流. 对图像的处理即是:帧内预测编码 其预测值P,是由已编码的图像做参考,经运动补偿得到的.预测图像P和当前帧Fn相减,得到两图像的 ...
- 视频知识基础:什么是TS、PS流?
在MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流(TS:TransportStream). 据传输媒 ...
- PS流详解(载荷H264)
目录 PS简介 标准结构 标准H264流结构 定长音频帧和其他流式私有数据的结构 PS流封装标准 PSH结构 PES包结构 PSM包结构体 元素流 PS 封装规则 H264元素流封装规则 音频元素流封 ...
- H264和音频流打包成PS流 (MPEG2-PS)
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80736848 [本系列相关文章] H26 ...
- 视频知识基础:什么是TS、PS流? .
在MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流(TS:TransportStream). 据传输媒 ...
- 音视频学习(十)——ps流
1. 简介 PS的封装格式需要支持MPEG2/MPEG4/H.264等视频和MPEG系列的音频,支持在多个层次加入私有数据,方便解码.拖动和加入延时,同时考虑到标准的PS.TS 和 RTP 封装方式间 ...
- TS流概述(ES流-基本流,PES流-打包基本码流,PS流-节目流,TS流-传输流)
一.TS流概述 ES流(Elementary Stream,基本流):数字电视各组成部分编码后所形成的直接表示基本元素内容的流,包含视频.音频或数据的连续码流. PES流(Paketized Elem ...
- RTP协议全解(H264码流和PS流)——看完这篇可以毕业
http://blog.csdn.net/bytxl/article/details/50395427 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1 视频编码的原理 1. ...
最新文章
- [Win] 利用Memory DC抽取EXE的图标并保存为BMP文件
- spring事务配置
- AB1601编译优化参数引发的问题
- 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字
- pytorch中的pre-train函数模型引用及修改(增减网络层,修改某层参数等)
- 初等数论及其应用——中国剩余定理
- UILabel 的属性设置
- 【Matplotlib】【Python】如何使用matplotlib绘制散点图
- SAP License:FI中的表连接与应用
- php文件流播放拖动,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器...
- pdf做成翻页电子书_软网推荐:文档秒变3D翻页电子书
- 浅谈A*算法如何演变为rrt算法
- 人际网络营销与网站运营、策划、推广一体化结合
- 重要的GMaps对象与接口
- Windows安全设置-当前的安全设置不允许从该位置下载文件
- android pppd流程,一种基于PPPD实现PPP‑Server功能的通信模块及其实现方法与流程...
- 鸿蒙生态箐英班,华为联合西北工业大学开设 “鸿蒙生态菁英班”: 50 人左右,锁定终端软件领域...
- MQ集群(rabbitMQ)
- 解决安装VS2022时,出现未能安装包“Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86
- MEncoder 转码 psp 视频
热门文章
- 方便实用的串口调试工具/串口调试助手/串口精灵 (工具一)
- 实战项目一、安居客(北京) 二手房抓取房源信息
- Securing Wireless LANs with PEAP and Passwords
- 复选框判断是否选中及获取值
- 数据分析师的任职要求——阿里巴巴
- [再寄小读者之数学篇](2014-05-30 对数不等式)
- windows环境下 ipfs的搭建与使用
- 中国象棋局面识别 -3. 棋谱字符串生成
- 【自主无人机】无人机领域中知名课题组介绍 - 转自阿木实验室
- 注销consul节点