TS檔案解析流程

2021-07-11 19:02:37 字數 1126 閱讀 6597

1、查詢pat表,從pat表裡面找到所有的pmt表的map_id。

- 注意2:記得檢測current_next_indicator這個flag,如果這個flag被置1,則忽略本次讀到的這個pat包,繼續往下搜尋pat包;

- 注意3:如果pat包因為容納的pmt的map_id很多,乙個ts packet的188個位元組或許放不完,則last_section_number不是0了,你得根據當前的section_number(第乙個是0),然後不斷的搜尋下去,把ts packet去掉頭後的資料組合成乙個完整的pat表;

2、查詢pmt表,建立流id表。

在通過pat表找到所有的pmt表的id後,則需要開始繼續跑檔案,查詢pmt表了,一般情況下,pmt表在ts檔案中的位置跟在pat表的後面,但是也有不同,所以我推薦在查詢pat表完成後,把指標seek到檔案的0位置,從頭開始查詢pmt表。這樣可能能更快的找到pmt表也說不定,當然你用當前的位置繼續向下找pmt表也是沒問題的。

- 注意1:pmt表也有跟pat表一樣的分段特性,一樣檢查last_section_number這個是不是有情況。也有current_next_indicator的特性,都得檢查;

3、通過流id,查詢檔案中的ts packet。

這裡有乙個需要注意的,在找到乙個包表明它是payload_unit_start_indicator後,往下查詢可能會查詢到其他流id的payload_unit_start_indicator的pes包。。。要分別組合。

4、如何計算ts流的pts\dts。

pes\pcr中的pts(dts) / 90000即可。

5、如何計算ts檔案的時間長度。

(最後乙個pcr的time - 第乙個pcr的time) / 90000。

計算出時間後,再計算rate,然後對io進行seek,seek後,查詢流的pes包,確定這個包是起始包(payload_unit_start_indicator),然後最重要的,確定這個包是i幀,不是的話繼續查詢下乙個pes包。

音訊:解析aac的adts,解析lpcm的hdmv header等。

也就是說,要想知道這些流的資訊,最好的辦法就是把他們的第一幀扔給解碼器,但是這樣是乙個浪費時間的活,而我們只需要解析他們的頭就能知道資訊,所以自己加乙個輕量的parser即可,或者從解碼器的**裡面摳。

ts 申明檔案

在專案開發過程中,我們可能回在ts中使用到一些js全域性,如jquery。以jquery舉例,假設js版本的jquery作為乙個全域性庫,而非使用import或require引入。那麼如何在ts中像js一樣直接使用 變數呢?ts的語法檢測不會允許我們使用乙個未經定義的變數,即便它已經同夥jquery...

TS科普26 SDT解析

sdt,service description section,服務描述段 sdt可以提供的資訊包括 2 該節目是否被加密 3 該節目的名稱 sdt定義如下 各欄位定義如下 table id 8bits的id,可以是0x42,表示描述的是當前流的資訊,也可以是0x46,表示是其他流的資訊 epg使用...

Springmvc檔案上傳實現流程解析

springmvc 中對檔案上傳做了封裝,我們可以更加方便的實現檔案上傳。從 spring3.1 開始,對於檔案上傳,提供了兩個處理器 commonsmultipartresolver standardservletmultipartresolver 第乙個處理器相容性較好,可以相容 servlet...