

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、關于 關于 TS 流的解析 流的解析 TS 即是“Transport Stream“的縮寫。他是分包發(fā)送的,每一個包長為 188 字節(jié)。在 TS 流里可以填入很多類型的數據, 如視頻、 音頻、 自定義信息等。 他的包的結構為, 包頭為 4 個字節(jié), 負載為 184 個字節(jié) (這184 個字節(jié)不一定都是有效數據,有一些可能為填充數據) 。 工作形式: 因為在 TS 流里可以填入很多種東西, 所以有必要有一種機制來確定怎么來標識這些數據。
2、 制定 TS 流標準的機構就規(guī)定了一些數據結構來定義。比如: PSI(Program Specific Information)表,所以解析起來就像這樣: 先接收一個負載里為 PAT 的數據包,在整個數據包里找到一個 PMT 包的 ID。然后再接收一個含有 PMT 的數據包,在這個數據包里找到有關填入數據類型的 ID。之后就在接收到的 TS 包里找含有這個 ID 的負載內容,這個內容就是填入的信息。根據填入的數據類型的 ID 的不同,在
3、 TS 流復合多種信息是可行的。關鍵就是找到標識的 ID 號。 現在以一個例子來說明具體的操作: 在開始之前先給出一片實際 TS 流例子: 0000f32ch: 47 40 00 17 00 00 B0 0D 00 01 C1 00 00 00 01 E0 ; G@....?..?...? 0000f33ch: 20 A2 C3 29 41 FF FF FF FF FF FF FF FF FF FF FF ; ⒚0000f34ch
4、: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f35ch: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f36ch: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f37ch: FF FF FF FF FF FF FF FF FF FF FF FF
5、 FF FF FF FF ; 0000f38ch: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f39ch: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f3ach: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f3bch: FF FF FF FF
6、 FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f3cch: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; 0000f3dch: FF FF FF FF FF FF FF FF FF FF FF FF 47 40 20 17 ; G@ . 0000f3ech: 00 02 B0 1B 00 01 C1 00 00 E0 21 F0 00 1B
7、E0 21 ; ..?..?.??.? 0000f3fch: F0 04 2A 02 7E 1F 03 E0 22 F0 00 5D 16 BD 48 ; ?*.~..??].紿 具體的分析就以這個例子來分析。 // Adjust TS packet header void adjust_TS_packet_header(TS_packet_header* pheader) { unsigned char buf[4]; mem
8、cpy(buf, pheader, 4); pheader->transport_error_indicator = buf[1] >> 7; pheader->payload_unit_start_indicator = buf[1] >> 6 pheader->transport_priority = buf[1] >> 5
9、pheader->PID = (buf[1] pheader->adaption_field_control = buf[3] >> 4 pheader->continuity_counter = buf[3] } 這是一個調整 TS 流數據包頭的函數, 這里牽扯到位段調整的問題。 現在看一下
10、TS 流數據包頭的結構的定義: 再給出 PAT 表字段調整函數: // Adjust PAT table void adjust_PAT_table ( TS_PAT * packet, char * buffer ) { int n = 0, i = 0; int len = 0; packet->table_id = buffer[0]; packet->section_syntax
11、_indicator = buffer[1] >> 7; packet->zero = buffer[1] >> 6 packet->reserved_1 = buffer[1] >> 4 packet->section_length = (buffer[1]
12、 packet->version_number = buffer[5] >> 1 packet->current_next_indicator = (buffer[5] > 7; packet->section_number = buffer[6]; packet->last_section_number
13、 = buffer[7]; // Get CRC_32 len = 3 + packet->section_length; packet->CRC_32 = (buffer[len-4] n ++ ) { packet->program_number = buffer[8] reserved_3 = buffer
14、[10] >> 5; if ( packet->program_number == 0x0 ) packet->network_PID = (buffer[10] program_map_PID = (buffer[10] << 3) << 5 | buffer[11]; } n += 5; } } 通過上面的分析,例子中的數據 00 B0 0D 00 01 C1 00 00 00
15、 01 E0 20 A2 C3 29 41 就是具體的PAT 表的內容,然后根據 PAT 結構體來具體分析 PAT 表。但是我們需要注意的是在 PAT 表里有program_number、network_PID 的元素不只有一個,這兩個元素是通過循環(huán)來確定的。循環(huán)的次數通過 section_length 元素的確定。在這個例子中 program_map_PID 為 20,所以下面來 PMT 分析時,就是查找 47 40 20 的開頭的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- TS流無縫拼接技術研究.pdf
- 基于TS流的數字電視信號切換.pdf
- 數字電視TS碼流監(jiān)測的研究分析.pdf
- MPEG-2 TS流監(jiān)控系統(tǒng)的設計與實現.pdf
- 多路MEPG2的PS流復用為一路TS流的研究與實現.pdf
- 基于MPEG-2傳送流TS的分析研究.pdf
- MPEG-2 TS流處理及其網絡傳輸技術的研究.pdf
- 基于TS流的數字電視播出系統(tǒng)的研究與實現.pdf
- 基于ASI接口的高清TS流收錄系統(tǒng)研究與實現.pdf
- MPEG-2 TS碼流檢測儀的設計與研究.pdf
- 基于MPEG_2 TS流的有線傳輸方式的研究與實現.pdf
- 基于NIOSⅡ系統(tǒng)的單片TS流復用器的研究與開發(fā).pdf
- 基于FPGA的TS流復用器及其接口的設計與實現.pdf
- IP封裝TS流DVB再復用服務器的設計與實現.pdf
- 基于usb2.0接口的數字電視ts流接收器設計
- 基于FPGA的MPEG-2預處理TS流復用設計及驗證.pdf
- 數字電視系統(tǒng)TS碼流檢測儀的設計與實現.pdf
- TS流復用解復用及DSM-CC特技播放研究.pdf
- 關于恒星外向流的研究.pdf
- QAM調制器前端TS流包處理器的設計與實現.pdf
評論
0/150
提交評論