TS流解析之TS包頭解析(轉)

helloxchen發表於2010-11-16

根據前一篇中各資料的定義及資料結構,對資料進行分別解析如下:

TS包頭定義:

typedef struct TS_packet_header
{
unsigned sync_byte : 8; //同步位元組, 固定為0x47,表示後面的是一個TS分組
unsigned transport_error_indicator : 1; //傳輸誤碼指示符
unsigned payload_unit_start_indicator : 1; //有效荷載單元起始指示符

unsigned transport_priority : 1; //傳輸優先, 1表示高優先順序,傳輸機制可能用到,解碼用不著
unsigned PID : 13; //PID
unsigned transport_scrambling_control : 2; //傳輸加擾控制
unsigned adaption_field_control : 2; //自適應控制 01僅含有效負載,10僅含調整欄位,11含有調整欄位和有效負載。為00解碼器不進行處理
unsigned continuity_counter : 4; //連續計數器 一個4bit的計數器,範圍0-15
} TS_packet_header;

TS包頭解析程式碼:

HRESULT CTS_Stream_Parse::adjust_TS_packet_header( TS_packet_header* TS_header )
{
unsigned char buf[4];

memcpy(buf, TS_header, 4);
TS_header->transport_error_indicator = buf[1] >> 7;
TS_header->payload_unit_start_indicator = buf[1] >> 6 & 0x01;
TS_header->transport_priority = buf[1] >> 5 & 0x01;
TS_header->PID = (buf[1] & 0x1F) << 8 | buf[2];
TS_header->transport_scrambling_control = buf[3] >> 6;
TS_header->adaption_field_control = buf[3] >> 4 & 0x03;
TS_header->continuity_counter = buf[3] & 0x0F; // 四位資料,應為0x0F xyy 09.03.18

return 0;
}

如下為一個TS包資料:

0x47 0x40 0x00 0x12 0x00 0x00 0xb0 0x0d 0x00 0x00 0xc1 0x00 0x00 0x00 0x01 0xe3 0xe8 0xf0 0x0b 0xd7 0x79 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff

分析知道前四位0x47 0x40 0x00 0x12TS頭部即為TS包頭資料,解析如下:

sync_byte :0x47
transport_error_indicator: 0x00
payload_unit_start_indicator: 0x01
transport_priority : 0x00

PID :0x0000
transport_scrambling_control :0x00
adaptation_field_control :0x01

continuity_counter :0x02

PID = 0x0000,表示此TS包的內容為PSI資訊表格的PAT表格資料,在4位元組的TS包頭之後的第一個位元組的Point_field = 0x00, 表示偏移量為0,即緊隨其後的即為PAT的資料資訊

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/a31898534/archive/2009/08/02/4399362.aspx

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24790158/viewspace-1041562/,如需轉載,請註明出處,否則將追究法律責任。

相關文章