日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TS流解析之PAT表格解析

發布時間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TS流解析之PAT表格解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from: http://blog.csdn.net/xioahw/article/details/4093488

PAT表格定義如下:

typedef struct TS_PAT_Program
{
?unsigned program_number????:16;?//節目號
?unsigned program_map_PID???:13;?? //節目映射表的PID,節目號大于0時對應的PID,每個節目對應一個
}TS_PAT_Program;

//PAT表結構體
typedef struct TS_PAT
{
??? unsigned table_id??????????????????????? : 8; //固定為0x00 ,標志是該表是PAT
??? unsigned section_syntax_indicator??????? : 1; //段語法標志位,固定為1
??? unsigned zero??????????????????????????? : 1; //0
??? unsigned reserved_1??????????????????????? : 2; // 保留位
??? unsigned section_length??????????????????? : 12; //表示這個字節后面有用的字節數,包括CRC32
??? unsigned transport_stream_id??????????? : 16; //該傳輸流的ID,區別于一個網絡中其它多路復用的流
??? unsigned reserved_2??????????????????????? : 2;// 保留位
??? unsigned version_number??????????????????? : 5; //范圍0-31,表示PAT的版本號
??? unsigned current_next_indicator??????????? : 1; //發送的PAT是當前有效還是下一個PAT有效
??? unsigned section_number??????????????????? : 8; //分段的號碼。PAT可能分為多段傳輸,第一段為00,以后每個分段加1,最多可能有256個分段
??? unsigned last_section_number??????????? : 8;? //最后一個分段的號碼
?
?std::vector<TS_PAT_Program> program;
??? unsigned reserved_3??????????????????????? : 3; // 保留位
??? unsigned network_PID??????????????????? : 13; //網絡信息表(NIT)的PID,節目號為0時對應的PID為network_PID

??? unsigned CRC_32??????????????????????????? : 32;? //CRC32校驗碼
} TS_PAT;

?

解析代碼如下:

HRESULT CTS_Stream_Parse::adjust_PAT_table( TS_PAT * packet, unsigned char * buffer)
{
??? packet->table_id??????????????????? = buffer[0];
??? packet->section_syntax_indicator??? = buffer[1] >> 7;
??? packet->zero??????????????????????? = buffer[1] >> 6 & 0x1;
??? packet->reserved_1??????????????????? = buffer[1] >> 4 & 0x3;
??? packet->section_length??????????????? = (buffer[1] & 0x0F) << 8 | buffer[2];
?
??? packet->transport_stream_id??????????? = buffer[3] << 8 | buffer[4];
?
??? packet->reserved_2??????????????????? = buffer[5] >> 6;
??? packet->version_number??????????????? = buffer[5] >> 1 &? 0x1F;
??? packet->current_next_indicator??????? = (buffer[5] << 7) >> 7;
??? packet->section_number??????????????? = buffer[6];
??? packet->last_section_number??????????? = buffer[7];

??? int len = 0;
??? len = 3 + packet->section_length;
??? packet->CRC_32??????????????????????? = (buffer[len-4] & 0x000000FF) << 24
??| (buffer[len-3] & 0x000000FF) << 16
??| (buffer[len-2] & 0x000000FF) << 8
??| (buffer[len-1] & 0x000000FF);
?
??
?int n = 0;
??? for ( n = 0; n < packet->section_length - 12; n += 4 )
??? {
??unsigned? program_num = buffer[8 + n ] << 8 | buffer[9 + n ];??
??????? packet->reserved_3??????????????? = buffer[10 + n ] >> 5;
??
??packet->network_PID = 0x00;
??if ( program_num == 0x00)
??{??
??????????? packet->network_PID = (buffer[10 + n ] & 0x1F) << 8 | buffer[11 + n ];

???TS_network_Pid = packet->network_PID; //記錄該TS流的網絡PID

???TRACE(" packet->network_PID %0x /n/n", packet->network_PID );
??}
??????? else
??????? {
???TS_PAT_Program PAT_program;
???PAT_program.program_map_PID = (buffer[10 + n] & 0x1F) << 8 | buffer[11 + n];
???PAT_program.program_number = program_num;
???packet->program.push_back( PAT_program );
???
???TS_program.push_back( PAT_program );//向全局PAT節目數組中添加PAT節目信息?????
??????? } ???????
??? }
?return 0;
}

因此,PAT數據解析結果如下:

PAT數據

table_id????:0x00????????????????????????????//8 ?
section_syntax_indicator???:0x01???????????// 1
'0'??????????????:0x00?????????????????????? // 1
reserved?????????????0x03????????????????// 2
section_length??????:0x00d????????????????????// 12
transport_stream_id????:0x0000???????????????? // 16
reserved????????????????????????:0x03????????// 2
version_number????????????:0x00??????????????// 5
current_next_indicator???:0x01???????????????// 1
section_number??????????????:0x00????????????// 8
last_section_number?????????:0x00??????????? // 8
program_number?????:0x0001??????????????????? // 16
??reserved????????????????:0x07?????????????? // 3
program_map_PID??????:0x03e8???????????? // 13
CRC???????? :0x f0 0b d7 79

由解析結構可知,該PAT表格中沒有網絡信息包信息,只包含一個節目,其PID為0x03e8

總結

以上是生活随笔為你收集整理的TS流解析之PAT表格解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。