本文共 2870 字,大约阅读时间需要 9 分钟。
传输流(Transport Stream, TS)是MPEG-2标准中的一种高效数据传输格式,广泛应用于数字电视、网络直播等领域。TS流以固定长度的TS包(Transport Packet)的形式进行编码传输,能够在信道环境较差时提供可靠的数据传输。
TS文件(Transport Stream File)是MPEG-2标准中的传输流文件,主要用于数字电视和网络直播。视频编码格式通常为H.264/MPEG-4,音频编码格式为AAC/MP3。TS文件分为三层:
PES(Packetized Elementary Stream)是将ES流根据需要分成长度不等的数据包,并加上包头后形成的打包基本码流。PES包由包头和载荷(payload)组成,通常视频帧被打包成一个PES包,其长度通常大于TS包的188字节,因此需要进行切分。
字段名称 | 类型 | 长度 | 说明 |
---|---|---|---|
pes_start_code | 8 bits | 3 bytes | 固定值 0x000001 |
stream_id | 8 bits | 1 byte | 音频或视频流的标识符(0xc0-0xdf或0xe0-0xef) |
pes_packet_length | 8 bits | 2 bytes | 后面pes数据的长度,0表示长度不限制 |
flag | 1 bit | 1 byte | 数据不加密标志(通常取0x80) |
flag | 1 bit | 1 byte | 包含PTS/DTS标志(通常取0xc0) |
pes_data_length | 1 bit | 1 byte | 后面数据的长度(通常取5或10 bytes) |
pts | 33 bits | 5 bytes | 显示时间标记(Presentation Time Stamp) |
dts | 33 bits | 5 bytes | 解码时间标记(Decoding Time Stamp) |
PS(Program Stream)节目流由PS包组成,一个PS包由若干PES包组成。PS包的包头包含了同步信息与时钟恢复信息,一个PS包最多可以包含具有同一时钟基准的16个视频PES包和32个音频PES包。
TS(Transport Stream)传输流由固定长度的TS包组成,TS包是对PES包的一种重新封装,PES包的包头信息仍存在于TS包中。TS流的主要特点是:
TS包头字段及其长度及说明如下:
字段名称 | 类型 | 长度 | 说明 |
---|---|---|---|
Sync-byte | 8 bits | 1 byte | 固定值 0x47 |
Transport-error-indicator | 1 bit | 1 byte | 出错标志 |
Payload-unit-start-indicator(PUSI) | 1 bit | 1 byte | 载荷单元起始指示标志 |
Transport-priority | 1 bit | 1 byte | 传输优先级规定 |
PID | 13 bits | 1.5 bytes | 包识别标志,用于区分不同类型的载荷 |
Transport-scrambling-control | 2 bits | 1 byte | 加扰标志 |
Adaptation-field-control | 2 bits | 1 byte | 适配域标志 |
Continuity-counter | 4 bits | 1 byte | 连续递增计数器 |
Adaptation Field字段包含以下信息:
字段名称 | 类型 | 长度 | 说明 |
---|---|---|---|
adaptation_field_length | 1 bit | 1 byte | 自适应域长度 |
flag | 1 bit | 1 byte | 取值0x50(包含PCR)或0x40(不包含PCR) |
PCR | 5 bits | 5 bytes | 节目时钟参考(Program Clock Reference) |
stuffing_bytes | 1 byte | 1 byte | 填充字节(通常取0xFF) |
ES(Elementary Stream)是音视频数据的基本码流,不分段的音频、视频或其他信息的连续码流。ES流通过PES打包器进行打包,加入PTS/DTS时间戳标记后形成PES流。
H.264视频数据打包时必须加上NALU(Network Abstraction Layer Unit)头,NALU包含NALU类型和NALU头。NALU类型决定了后续数据的内容,常见类型包括:
NALU类型 | 说明 |
---|---|
0 | 帧开始(Nalu header固定为0x00000001) |
1 | 帧中(Nalu header固定为0x000001) |
2~6 | slice组成的其他类型(如P-slice、B-slice) |
AAC音频数据打包时必须加上ADTS(Audio Data Transport Stream)头,共7字节,包括固定头和可变头。ADTS头的格式如下:
字段名称 | 类型 | 长度 | 说明 |
---|---|---|---|
Frame Header | 12 bits | 3 bytes | 帧头,包含ADTS版本号和编码器ID |
Audio ID | 3 bits | 1 byte | 音频流ID |
Stream ID | 3 bits | 1 byte | 音频流ID |
Fragment Count | 2 bits | 1 byte | fragment计数 |
More Fragments | 1 bit | 1 byte | 是否有更多fragment |
Timestamp | 33 bits | 5 bytes | 音频解码时间戳 |
以上是MPEG-2 TS流的主要结构和格式描述,理解这些内容有助于更好地进行音视频流的编码、传输和解码。
转载地址:http://yomr.baihongyu.com/