最近一直在做乙個關於ts流解析和打包的工作,這裡是做一次總結,也是第一次總結,以後將陸續嘗試些更多的總結。
首先,網上其實能找到很多關於ts流的資訊,其實總結出來就是很簡單的幾點。乙個ts流,我們能使用的通常是這樣的格式,這裡可以參考
1. 在ts的前面四個位元組中,如果pid==0,表明這裡是pat表,這個時候需要解析pat資訊,得到pmt表的pid。然後尋找下乙個ts包。
只要這幾個因素都滿足後,基本就可以將壓縮好的h264碼流編碼或者解碼成功了。
下面講講pcr中的資訊如何和pts和dts對應。如乙個pcr是00 c9 29 8b 7e,乙個pts是31 06 49 ab 2d,如此,對應的二進位制就是0000 0000 1100 1001 0010 1001 1000 1011 0111 1110和0001 00010000 0110 0100 1001 1010 0110 0010 1101
這就是對應關係。而pts和時間的轉換關係,就是如下:
pcr(i) = pcr_base(i)*300 + pcr_ext(i)
pcr_base 33 位,最大值:0x1ffffffff
pcr_ext 9 位,根據定義,取值 0-299
因此pcr最大值為:0x1ffffffff*300 + 299
可表示的小時數:(0x1ffffffff*300 + 299) / 27000000 / 3600 約為 26.5 小時
以前認為是兩天多,大概是這樣算的,pcr一共42位,把2的42次方作為pcr最大值,算出來大約是1.8天。
pcr分兩部分編碼:乙個以系統時鐘頻率的 1/300 為單位,稱為pcr_base,共33bit;另乙個以系統時鐘頻率為單位,稱為pcr_ext,共9bit,共42bit。
具體規定如下:
pcr_base(i) = ((系統時鐘頻率 x t(i)) div 300) % 2^33
pcr_ext(i) = ((系統時鐘頻率 x t(i)) div 1) % 300
pcr(i) = pcr_base(i) x 300 + pcr_ext(i)
例如:時間"03:02:29.012"的pcr計算如下:
03:02:29.012 = ((3 * 60) + 2) * 60 + 29.012 = 10949.012s
pcr_base = ((27 000 000 * 10949.012) / 300) % 2^33 = 98 541 080
pcr_ext = ((27 000 000 * 10949.012) / 1 ) % 300 = 0
pcr = 98 541 080 * 300 + 0 = 295 623 324 000
程式的計算,明天放進來。
然後pes的講解如下:
參考
學習總結1
1 執行測試 提交缺陷,回歸驗證 2 其他評估 效能測試評估,自動化測試覆蓋 3 測試總結 測試報告,驗收總結,風險評估 4 時間管理 工具調研,框架 平台 工具研發,資源協調 1 優點 包含了底層測試 單元測試 和高層測試 系統測試 清楚的標識了開發和測試的各個階段 自上而下逐步求精,每個階段分工...
學習總結 1
遞迴演算法 1.程式直接或間接呼叫自身的程式設計技巧稱為遞迴演算法 recursion 2.直接或間接呼叫自身的函式稱為遞迴函式 3.它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解。遞迴的作用 把乙個不能或不好解決的大問題轉化為乙個或幾個小問題,再把這些小問題進一步分解成...
Lucene和Solr學習總結 1
說的專業點就是全文檢索 實現全文檢索的流程的大致操作如下 這張圖表現的很清晰,網上扒下來的 索引庫中應該包含兩部分,一部分是索引,一部分是文件,索引包含對應文件的id,通過該id可以查詢到文件 來看看我的第乙個lucene入門程式 先整理步驟 建立索引 查詢索引 1,建立indexwriter物件,...