TS科普9 传输流包层

传输流


传输流包层


sync_byte — sync_byte 为固定的8 比特字段,其值为'0100 0111' (0x47)。在对于其他正式出现字段的赋值选择中,诸如PID,应避免sync_byte 仿真。

transport_error_indicator — transport_error_indicator 为1 比特标志。置于1 时,它指示在相关传输流包中至少存在1 个不可校正比特错。此比特可以由传输层以外的实体设置为‘1’。设置为‘1’时,此比特应不重新设置为‘0’,除非误差比特值已经校正。

payload_unit_start_indicator — payload_unit_start_indicator 为1 比特标志,对于承载PES 包(参阅2.4.3.6)或PSI 数据(参阅2.4.4)的传输流包,它具有标准含义。
当传输流包有效载荷包含PES 包数据时,payload_unit_start_indicator 具有以下意义:‘1’指示此传输流包的有效载荷应随着PES 包的首字节开始,‘0’指示在此传输流包中无任何PES 包将开始。若payload_unit_start_indicator 设置为‘1’,则一个且仅有一个PES 包在此传输流包中起始。这也适用于stream_type 6 的专用流(参阅表2-34)。
当传输流包有效载荷包含PSI 数据时,payload_unit_start_indicator 具有以下意义:若传输流包承载PSI分段的首字节,则payload_unit_start_indicator 值必为1,指示此传输流包的有效载荷的首字节承载pointer_field。若传输流包不承载PSI 分段的首字节,则payload_unit_start_indicator 值必为‘0’,指示在此有效载荷中不存在pointer_field。参阅2.4.4.1 和2.4.4.2。这也适用于stream_type 5 的专用流(参阅表2-34)。对空包而言,payload_unit_start_indicator 必须设置为‘0’。仅承载专用数据的传输流包的此比特含义在本规范中未定义。

transport_priority — transport_priority 为1 比特指示符。设置为‘1’时,它指示该相关包比具有相同PID 但不具有该比特设置为1 的其他包有更大的优先级。传输机制可以使用该字段优先考虑基本流内的该包数据。取决于应用,transport_priority 字段可以不管PID 或者此字段仅在一个PID 范围内编码。此字段可以由信道特定编码器或解码器来改变。

PID — PID 为13 比特字段,指示包有效载荷中存储的数据类型。PID 值0x0000 为节目相关表所保留
(见表2-30)。PID 值0x0001 为有条件访问表所保留(见表2-32)。PID 值 0x0002 为传输流描述表所保留(见表2-36),PID 值 0x0003 为IPMP 控制信息表(见ISO/IEC 13818-11),PID 值 0x0004-0x000F 为保留的值。PID 值0x1FFF 为空包所保留(见表2-3)。


transport_scrambling_control — 此2 比特字段指示传输流包有效载荷的加扰方式。传输流包头以及自适应字段若存在,应不加扰。在空包的情况中,transport_scrambling_control 字段的值应设置为“00”(见表2-4)。


adaptation_field_control — 此2 比特字段指示此传输流包头是否后随自适应字段和/或有效载荷(见表2-5)。


ITU-T H.222.0 建议书|ISO/IEC 13818-1 解码器应丢弃具有adaptation_field_control 字段设置为‘00’值的传输流包。在空包的情况中,adaptation_field_control 的赋值应为‘01’。

continuity_counter — continuity_counter 为4 比特字段,随着具有相同PID 的每个传输流包而增加。continuity_counter 在取其最大值之后循环返回到0 值。当包的adaptation_field_control 为‘00’或‘10’时,continuity_counter 不增加。

传输流中,复制包可以作为2 个并且仅只作为2 个具有相同PID 的连续传输流包。该复制包必须有与原始包相同的 continuity_counter 赋值并且 adaptation_field_control 字段必须等于‘01’或‘11’。复制包中,原始包的每个字节都必须复制,有一种情况除外,即节目时钟参考字段中的内容若存在,该有效值必须编码。

特定传输流包中continuity_counter 是连续的,只要它与具有相同PID 的先前的传输流包中的continuity_counter 赋值的差为正值1,或者任意一个非增量条件(adaptation_field_control 设置为‘00’或‘10’,或如上所述的复制包)被满足时。discontinuity_indicator 设置为‘1’时,连续性计数器可以中断(参阅2.4.3.4)。在空包的情况中,continuity_counter 值未确定。

data_byte — data_byte 必须是来自PES 包(参阅2.4.3.6)、PSI 分段(参阅2.4.4)以及PSI 分段后的包填充字节数据的相连贯的数据字节,或者不在这些结构中的专用数据,如PID 所指示的。在具有PID 值0x1FFF 的空包情况中,data_bytes 可以指派为任何值。data_bytes 数N 通过184 减去 adaptation_field() 中的字节数来确定,如以下2.4.3.4 中所述。

在 TCP 协议中,`foreach_tcp_flag` 通常是一个宏,用于遍历 TCP 头部中的各个标志位。下面来解析各个 TCP 标志位的含义: - **FIN(Finish)**:用于释放一个 TCP 连接。当设置为 1 时,表示发送方已经没有数据要发送了,请求释放连接。 - **SYN(Synchronize)**:用于建立 TCP 连接。在 TCP 三次握手的过程中,客户端向服务器发送的第一个数据包的 SYN 标志位会被设置为 1,用于同步初始序列号。 - **RST(Reset)**:用于重置一个 TCP 连接。当 RST 标志位被设置为 1 时,表示出现了异常情况,需要立即终止当前的 TCP 连接。 - **PSH(Push)**:表示要求接收方立即将数据递交给应用层,而不是等到缓冲区满。 - **ACK(Acknowledgment)**:用于确认收到的数据包。当 ACK 标志位被设置为 1 时,`ack` 字段的值才有效,它表示期望收到的下一个数据包的序列号。 - **URG(Urgent)**:表示紧急指针字段有效。当 URG 标志位被设置为 1 时,表明数据包中有紧急数据,需要尽快处理。 - **ECE(ECN-Echo)**:显式拥塞通告回显。用于在网络拥塞时向发送方发送拥塞通知。 - **CWR(Congestion Window Reduced)**:拥塞窗口减少。发送方收到 ECE 标志位为 1 的数据包后,会设置 CWR 标志位为 1,表示已经降低了发送速率。 以下是一个简单的 C 语言代码示例,展示了如何定义这些标志位: ```c #include <stdio.h> // 定义 TCP 标志位 #define TCP_FLAG_FIN 0x01 #define TCP_FLAG_SYN 0x02 #define TCP_FLAG_RST 0x04 #define TCP_FLAG_PSH 0x08 #define TCP_FLAG_ACK 0x10 #define TCP_FLAG_URG 0x20 #define TCP_FLAG_ECE 0x40 #define TCP_FLAG_CWR 0x80 int main() { // 打印各个标志位的值 printf("FIN: 0x%x\n", TCP_FLAG_FIN); printf("SYN: 0x%x\n", TCP_FLAG_SYN); printf("RST: 0x%x\n", TCP_FLAG_RST); printf("PSH: 0x%x\n", TCP_FLAG_PSH); printf("ACK: 0x%x\n", TCP_FLAG_ACK); printf("URG: 0x%x\n", TCP_FLAG_URG); printf("ECE: 0x%x\n", TCP_FLAG_ECE); printf("CWR: 0x%x\n", TCP_FLAG_CWR); return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值