TS包頭語法結構-1

TS包由4B的包頭(header)、可變長度的調整頭和淨荷(payload)組成;



包頭結構定義如下:

struct ts_header{

    char     syn_byte:8;                                       // 包頭同步字節,0x47

    char     transport_error_indicator:1;         //傳送數據包差錯指示器

    char    payload_unit_start_indicator:1;    //有效淨荷單元開始指示器

    char    transport_priority:1;                         //傳送優先級

    int        PID:13;                                              //包ID

    char    transport_scrambling_control:2;                //傳送加擾控制

    char    adaptation_field_control:2;           //調整字段控制

    char    continuity_conunter:4;                    //連續計數器 0-15

};


syn_byte:值爲0x47,是MPEG-2TS的傳送包標識符;

transport_error_indicator:值爲1時,表示相關的傳送包中至少有一個不可糾正的錯誤位,只有錯誤位糾正後,該位才能置0;

payload_unit_start_indicator:表示TS包的有效淨荷帶有PES或PSI數據的情況;當TS包的有效淨荷帶有PES包數據時,

payload_unit_start_indicator爲1,表示TS包的有效淨荷以PES包的第一個字節開始;爲0,表示TS包的開始不是PES包;

當TS包帶有PSI數據時,payload_unit_start_indicator爲1,表示TS包帶有PSI部分的第一個字節,即第一個字節帶有指針pointer_field,爲0表示TS包不帶有一個PSI部分的第一個字節,即在有效淨荷中沒有指針pointer_field;對於空包的包,play_unit_start_indicator應該置爲0;

transport_priority:置1表示相關的包比其他具有相同PID但transport_priority爲0的包有更高的優先級;


PID:表示存儲於傳送包的有效淨荷中數據的類型。


transport_scrambling_control:指示TS包有效淨荷的加擾方式,如果首部包括調整字段,則不應該被加擾,對於空包,值要置“00”;


adaptation_field_control:傳送流包首部是否跟隨有調整字段和/或有效淨荷。


continuity_conunter:隨着具有相同PID TS包的增加而增加,當達到最大時,又恢復爲0,如果調整字段控制值adaptation_field_control爲“00”或“10”,則該連續計數器不增加;在TS中,當複用的包可能被作爲兩個連續的具有相同PID的TS包傳送出去時,則複用的傳送包與原傳送包具有相同的continuity_counter,而adaptation_field_control字段值應爲“01”或者"10"。在複用的包中,除了節目參考時鐘PCR有效字段的值被重新編碼外,原包中每個字節將被複制。

在特定的TS中具有相同PID包的continuity_counter是連續的,或與前一個具有相同PID的包相差1,但是遇到adaptation_field_control爲“00”或“10”等不增加條件,或在調整字段中discontinuity_indicator爲“1”時,continuity_counter將不連續。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章