首頁>Club>
5
回覆列表
  • 1 # 君臨1982

    【方法一】

    這個方法適用於DVBS制式,沒有仔細研究過,只列出公式吧。

    公式:RateInBits = SymbolRate * FECRate * ModRate * (188/204)

     

    FEC:前向糾錯,取值為1(none), 1/2, 2/3, 3/4, 5/6, 6/7, 7/8, 8/9, 1/4, 1/3, 2/5, 5/11, 3/5, 4/5, 9/10。

    Mod:QPSK: 2; 8PSK: 3。

    188/204:RS(裡德-所羅門碼)的編碼效率,即傳送204個位元組,其中有用的資料為188個位元組。

     

    【方法二】

    這個方法適用於DVBT, DVBS, DVBS2制式,根據PCR來計算。參考【ISO/IEC 13818-1 Information technology——Generic coding of moving pictures and associated audio information: Systems.】

     

    Page10-11 給出了計算公式:

    TransportRateInBits = 2個PCR間隔的包個數 * 188 * 8 * 系統時鐘頻率27000000 / 2個PCR的差值。

    PCR=PCR_Base * 300 + PRC_Ext

    PCR_Base是以系統時鐘頻率的1/300為單位的。

     

    Page18:Transport packet結構。

    Page22:Adaptation field結構。

     

    步驟描述:

    1. 從ts檔案中每次讀取188位元組(TS包的長度)。

    找到開始位元組sync byte 0x47,如何確定這個0x47就是sync byte而不是資料中碰巧出現的呢?檢視下一個188位元組的開始是不是0x47,如果是,就可以認為第一次找到的sync byte是ts包的開始。

    在尋找PCR計算的過程中,每次都是讀取188個位元組。

    如果不是以sync byte開始,可能流資料corrupted了,要重新找sync byte,重複這個過程。

     

     

    2. 找Adaptation field,繼而檢視PCR flag是否為1,找到PCR_Base 和 PCR_Ext,記錄此包的PID值。找到第一個PCR0。

     

    UINT64 t = ((tsBuf[6] << 24) +(tsBuf[7] << 16) + (tsBuf[8] << 8) + tsBuf[9]) & 0xFFFFFFFF;

    UINT64 pcr_base = (t << 1) + ((tsBuf[10] & 0x80) >> 7);

    UINT64 pcr_ext = ((tsBuf[10] & 0x01) << 8) + tsBuf[11];

    UINT64 pcr = pcr_base * 300 + pcr_ext;

     

    3. 記錄兩個PCR之間的包的個數。找下一個具有相同PID值的TS包的PCR值,PCR1。

     

     

    4. 用公式計算。   

     

  • 中秋節和大豐收的關聯?
  • tcl空調掛機電源線長度?