TS流相關知識

2021-06-21 01:40:50 字數 1453 閱讀 6778

據傳輸**的質量不同,mpeg-2中定義了兩種復合資訊流:傳送流(ts:transportstream)和節目流(ps:programstream)

ts流與ps流的區別在於ts流的包結構是固定長度的,而ps流的包結構是可變長度的。

ps包與ts包在結構上的這種差異,導致了它們對傳輸誤碼具有不同的抵抗能力,因而應用的環境也有所不同。ts碼流由於採用了固定長度的包結構,當傳輸誤碼破壞了某一ts包的同步資訊時,接收機可在固定的位置檢測它後麵包中的同步資訊,從而恢復同步,避免了資訊丟失。而ps包由於長度是變化的,一旦某一ps包的同步資訊丟失,接收機無法確定下一包的同步位置,就會造成失步,導致嚴重的資訊丟失。因此,在通道環境較為惡劣,傳輸誤碼較高時,一般採用ts碼流;而在通道環境較好,傳輸誤碼較低時,一般採用ps碼流。

由於ts碼流具有較強的抵抗傳輸誤碼的能力,因此目前在傳輸**中進行傳輸的mpeg-2碼流基本上都採用了ts碼流的包格式。

ts包長度為188位元組,由包頭和包資料2部分組成,其中包頭還可以包括擴充套件的自適用區。包頭長度佔4bytes,自使用區和包資料共佔184bytes,這184個位元組不一定都是有效資料,有一些可能為填充資料。整個ts包長度相當於4個atm包長。ts包的包頭由如下圖摘錄所示的同步位元組、傳輸誤碼指示符、有效載荷單元起始指示符、傳輸優先、包識別(pid-packet identification)、傳輸加擾控制、自適應區控制和連續計數器8個部分組成。

ts包頭定義:

包頭4個byte

//transport stream header

typedef struct ts_header

ts_header;

//特殊引數說明:

//sync_byte:0x47

//payload_unit_start_indicator:0x01表示含有psi或者pes頭

//pid:0x0表示後面負載內容為pat,不同的pid表示不同的負載

//adaption_field_control:

// 0x0: // reserved for future use by iso/iec

// 0x1: // 無調整字段,僅含有效負載

// 0x2: // 僅含調整字段,無有效負載

// 0x3: // 調整欄位後含有效負載

第乙個包的開頭為47 40 00 x,此時pid為0,0x0表示後面負載內容為pat,不同的pid表示不同的負載。

payload_unit_start_indicator為1時,在前4個位元組之後會有乙個調整位元組,它的數值決定了負載內容的具體開始位置。現在看例子中的資料47 40 00 17 00第五個位元組是00,說明緊跟著00之後就是具體的負載內容。

從pat中根據program_map_pid找到對應的含有pmt(program map table)的包。

mpeg2 ps和ts流格式

ts流的解析(包頭定義)

ts格式解析 

Java IO流相關知識

一 io流的分類 reader inputstreamreader 節點流 bufferedreader 處理流 writer outputstreamwriter 節點流 bufferedwriter 處理流 printwriter inputstream fileinputstream 節點流 ...

TS 流解碼過程

ts 流解碼過程 1.獲取ts中的pat 2.獲取ts中的pmt 6.拼接好的pes包的包頭會有 pts,dts資訊,去掉pes的header就是 es。8.i,b,b,p 資訊是在es中的。eses流經過 pes打包器之後,被轉換成 pes包。pes包由包頭和 payload 組成.在pes 層,...

TS流格式詳解

一 背景介紹 之前我做了乙個專案,要求寫乙個ts流解析的模組,因此看了isoiec 13818 1文件,外加很多人的部落格來幫助理解,來了解ts流格式是個什麼東西,收貨頗多。因此我覺得是時候發點乾貨回饋社會了。二,ts流背景介紹 三,pat和pmt pat,pmt,data,data,pat,pmt...