# README
PS结构介绍
Key Point
- 一帧原始数据只能包含一个
ps
,map
,sys
(关键帧需要)等结构.当一帧数据超过pes最大的负载时(0xFFFF
),则一帧数据可能有多个pes
结构 - rtp结构是包含在封装的最外层,所以 一帧数据或者一片pes结构,可能会被分成多个rtp包
- 各个结构中可能都有扩充字段,在解析的时候可以通过扩充字段来解析到表示的长度,从而得到真实的原始数据的长度
| ps | system header | psm | pesv | pesa |
pesv
为视频pes包,pesa
为音频pes包 非关键帧的ps包结构一般不包含系统头和PSM
针对PSM中流类型的取值如下:
流类型 | 十六进制值 |
---|---|
MPEG-4 | 0x10 |
H.264 | 0x1B |
SVAC | 0x80 |
G.711 | 0x90 |
G.722.1 | 0x92 |
G.723.1 | 0x93 |
G.729 | 0x99 |
SVAC 音频 | 0x9B |
具体可以参看ISO/IEC 13818-1:2000 |
各个结构的头字段的说明
PS
字段名 | 比特位长度 | 含义 |
---|---|---|
pack_start_code | 32 | 起始码字段0x000001BA 标志为一包的开始 |
marker_bit | 2 | 标记位字段2位字段,取值01 |
system_clock_reference_base (32..30) | 3 | 系统时钟参考字段 |
marker_bit | 1 | 标记位字段取值1 |
system_clock_reference_base(29..15) | 15 | 系统时钟参考字段 |
marker_bit | 1 | 标记位字段取值1 |
system_clock_reference_base(14..0) | 15 | 系统时钟参考字段 |
marker_bit | 1 | 标记位字段取值1 |
system_clock_reference_extension | 9 | 系统始终参考字段 |
marker_bit | 1 | 标记位字段取值1 |
program_mux_rate | 22 | 节目复合速率字段 |
marker_bit | 1 | 标记記位字段取值1 |
marker_bit | 1 | 标记位字段取值1 |
reserved | 5 | 填充字段 |
pack_stuffing_length | 3 | 包填充长度字段 |
System
字段名 | 比特位长度 | 含义 |
---|---|---|
system_header_start_code | 32 | 开始码 0x000001BB |
header_length | 16 | 該字段後的系統標題的字節長度 |
marker_bit | 1 | 标记位字段取值1 |
rate_bound | 22 | 速率界限字段 |
marker_bit | 1 | 标记位字段取值1 |
audio_bound | 6 | 音频界限字段 |
fixed_flag | 1 | 固定标志字段 |
CSPS_flag | 1 | CSPS标志字段 |
system_audio_lock_flag | 1 | 系統音频锁定标志字段 |
system_video_lock_flag | 1 | 系統视频锁定标志字段 |
marker_bit | 1 | 标记位字段取值1 |
vedio_bound | 5 | 视频界限字段 |
packet_rate_restriction_flag | 1 | 分组速率限制标记字段 |
reserved_bits | 7 | 保留位字段 |
stream_id | 8 | 流标志字段 一般0xe0 指视频,0xc0 音频 |
marker_bit | 2 | 取值11 |
P-STD_buffer_bound_scale | 1b | P-STD界限比例字段 |
P-STD_buffer_size_bound | 13 | P-STD大小界限字段 |
注:可能会有多个stream , 通过stream_id的第一个bit判断是否存在stream |
Map
字段名 | 比特位长度 | 含义 |
---|---|---|
packet start code | 32 | 映射流起始码标志字段 |
program stream map length | 16 | 节目流映射长度字段 |
current_next_indicator | 1 | 当前下一個指示符字段 |
reserved | 2 | 填充字段 |
program_stream_map_version | 5 | 节目流映射版本字段 |
reserved | 7 | 预留填充字段 |
marker_bit | 1 | 标记位字段取值1 |
program_stream_info_length | 16 | 节目流信息长度字段 |
elementary_stream_map_length | 16 | 基本流映射长度字段 |
stream_type | 8 | 流类型字段 0x1b H264 , 0x24 H265 |
elementary_stream_id | 8 | 视频取值0xe0-0xef ,通常为0xe0 ,音频取值0xc0-0xdf ,通常为0xc0 |
elementary_stream_info_length | 16 | 基本流信息长度字段 |
CRC_32 | 32 | CRC字段 |
PES
字段名 | 比特位长度 | 含义 |
---|---|---|
packet_start_code_prefix | 24 | 分组起码码0x000001 |
stream_id | 8 | 流标志字段stream_id,其中0x(C0 |
PES_packet_length | 16 | PES分组长度字段 |
marker_bit | 2 | 标志位,10 |
PES_scrambling_control | 2 | PES加扰控制字段 |
PES_priority | 1 | PES优先级字段 |
data_alignment_indicator | 1 | 数据对其指示符字段 |
copyright | 1 | 盘权字段 |
original_or_copy | 1 | 原始或拷贝字段 |
PTS_DTS_flags | 2 | PTS DTS 标志字段 |
ESCR_flag | 1 | ESCR标志字段 |
ES_rate_flag | 1 | ES速率标志字段 |
DSM_trick_mode_flag | 1 | DSM特技方式标志字段 |
additional_copy_info_flag | 1 | 附加版权信息标志字段 |
PES_CRC_flag | 1 | PES CRC标志字段 |
PES_extension_flag | 1 | PES扩张标志字段 |
PES_header_data_length | 8 | PES标题数据长度字段 |
注:后面会根据此长度来填写 pts, dts等
# Functions
No description provided by the author
No description provided by the author
# Constants
.
.
..
..
.
..
..
..
..
..
.
.
.
.
.
.
.
.
.
.
..
.
.
.
# Variables
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Structs
https://github.com/videolan/vlc/blob/master/modules/demux/mpeg
*/.
No description provided by the author
RtpTransfer ...