ts碼流結構語法學習總結

引言

標準文檔給自己的定義是:論述了將音頻和視頻的一個或多個基本流以及其他數據組合成爲一個單獨的流或多個流,以適於存儲或傳輸。系統編碼遵循本規範中提出的句法和語義規則,並且提供信息使得解碼器緩衝區可以在各種檢索或接收條件下進行同步解碼。
這裏寫圖片描述
節目流:它是由一個或多個具有共同時間基的PES 包的流組合成一個單獨的流而形成的。
傳輸流:是將具有一個或多個獨立時間基的一個或多個節目組合成爲一個單獨的流。由組成一個節目的基本流所構成的PES包共享一個公共的時間基。傳輸流被設計爲在易於出錯的環境中使用,例如在有損的或嘈雜的媒體中進行存儲或傳輸。傳輸流的包長度爲188 個字節。

引言1 傳輸流

傳輸流是一種流定義,適用於在一個可能發生較多錯誤的環境中傳輸或存儲由遵循ITU-T H.262 建議書 | ISO/IEC 13818-2 和ISO/IEC 13818-3 的編碼數據以及其他數據所形成的一個或多個節目。
傳輸流可能具有固定速率或可變速率;傳輸流的速率由節目時鐘基準(PCR)字段的取值和位置來定義,一般來說對於每種節目都有一個獨立的PCR 字段。

引言2 節目流

節目流是一種流定義,適用於在一個不太可能發生誤差的環境中傳輸或存儲由編碼數據或其他數據所形成的一個節目,在這種情況下,對系統編碼的處理,如通過軟件進行處理,是一個主要的考慮方面。
節目流可能具有固定速率或可變速率,節目流的速率由系統時鐘基準(SCR)字段和複用速率(mux_rate)字段的取值和位置來定義。

引言4 PES

每個傳輸流和節目流在邏輯上都是由PES 包構造的
屬於一個基本流的、具有同一個流ID 的、連續的PES 包序列可能被用於構造一個PES 流
當PES 包被用於構造一個PES 流時,它們必須包含基本流時鐘基(ESCR)字段和基本流速率(ES_Rate)字段

引言5 time mode

所有的時序都根據一種公共系統時鐘來定義,該時鐘被稱爲一個系統時鐘。
在節目流中,此時鐘可能與視頻或音頻採樣時鐘之間具有一個精確指定的比率,或者其運行頻率可能與精確的比率之間有輕微的不同,但仍然能夠提供精確的端到端的時序和時鐘恢復。
在傳輸流中,系統時鐘頻率被限定爲在任何時候都應與音頻和視頻採樣時鐘之間具有精確指定的比率;此限定的目的是爲了簡化解碼器處的採樣速率恢復。

重要的定義

  • Elementary Stream Clock Reference; ESCR (system) 基本流時鐘參考
  • presentation time-stamp; PTS (system) 顯示時間標記;PTS(系統):PES 包頭中可以存在的、指示系統目標解碼器中顯示單元的顯示時間的一個字段。
  • Program Clock Reference; PCR (system) 節目時鐘參考;PCR(系統):從傳輸流中時間標記推導而來的解碼器計時。
  • Program Specific Information; PSI (system) 節目特定信息;PSI(系統):PSI 由對於傳輸流的多路分解以及節目成功再現所必要的標準數據組成,並在2.4.4 中描述。專門規定的PSI 數據實例是非必備網絡信息表。
  • System Clock Reference; SCR (system) 系統時鐘參考;SCR(系統):從節目流中時間標記推導而來的解碼器計時。
  • system target decoder; STD (system) 系統目標解碼器;STD(系統):用於確定ITU-TH.222.0 建議書| ISO/IEC 13818-1 多路複用比特流語義的解碼過程的虛擬參考模型。

系統時鐘頻率

系統時鐘頻率值以Hz 爲度量單位且必須滿足以下限制:

27 000 000 – 810 ≤ system_clock_frequency ≤ 27 000 000 + 810
system_clock_frequency 的速率變化,每次≤75×10−3 Hz/s

PCR計算

PCR(i) = PCR _ base(i)× 300 + PCR _ ext(i)
PCR_base(i) = ((system_clock_frequency × t(i)) / 300) %2^33
PCR_ext(i) = ((system_clock_frequency × t(i)) / 1)%300

PCR_base:以1/300 的系統時鐘頻率週期爲單位,稱之爲program_clock_reference_base
PCR-base的作用:
  a. 與PTS和DTS作比較, 當二者相同時, 相應的單元被顯示或者解碼.
  b. 在解碼器切換節目時,提供對解碼器PCR計數器的初始值,以讓該PCR值與PTS、DTS最大可能地達到相同的時間起點.

PCR_ext:以系統時鐘頻率爲單位,稱之爲program_clock_reference_extension
PCR-ext的作用:
  通過解碼器端的鎖相環路修正解碼器的系統時鐘, 使其達到和編碼器一致的27MHz.

例如:
時間"03:02:29.012"的PCR計算如下:
03:02:29.012=((3*60+2)*60)+29.012=10949.012s
PCR_base = ((27000000 × 10949.012) / 300) %2^33 = 98541080
PCR_ext = ((27000000 × 10949.012)/ 1) % 300 = 0
PCR = 98541080 * 300 + 0 = 295623324000

語法

首先看前輩們整理出來的一張圖:
這裏寫圖片描述

一個TS數據包

47 41 00 30 07 50 00 00 80 F7 7E 00 00 00 01 E0 00 00 80 80 05 21 00 07 F0 0D 00 00 00 01 09 10 00 00 00 01 67 4D 40 33 95 A0 0F 00 10 FB 01 40 80 00 01 F4 80 00 75 30 70 00 00 0F 42 40 00 00 F4 24 0D DE 5C 1F 1C 32 A0 00 00 00 01 68 EE 3C 80 00 00 00 01 06 00 07 81 19 40 00 46 50 40 80 00 00 00 01 06 01 04 00 00 08 10 80 00 00 00 01 65 B8 04 04 1F 02 EB 03 FE 13 F0 D4 6D 2C 00 D1 DF 2D C0 00 00 03 00 00 03 00 00 03 00 00 03 00 00 2F 3D 76 1F D0 53 29 EE 83 00 00 03 00 00 03 00 00 03 00 00 03 00 04 30 04 00 00 03 00 00 03 00 00 05 EC 00 00 03 00 00 03 00 00 

包頭

這裏寫圖片描述

//包頭數據
47 41 00 30

0100 0111 0100 0001 0000 0000 0011 0000

sync_byte - 8bit - 0x47

  • sync_byte 爲固定的8 比特字段,其值爲’0100 0111’ (0x47)。在對於其他正式出現字段的賦值選擇中,諸如PID,應避免sync_byte 仿真

transport_error_indicator - 1bit - 0

  • 置於1 時,它指示在相關傳輸流包中至少存在1 個不可校正比特錯。此比特可以由傳輸層以外的實體設置爲‘1’。設置爲‘1’時,此比特應不重新設置爲‘0’,除非誤差比特值已經校正。

payload_unit_start_indicator - 1bit - 1

  • 對於承載PES包或PSI數據的傳輸流包,它具有標準含義。
    • 當傳輸流包有效載荷包含PES包數據時,payload_unit_start_indicator 具有以下意義:‘1’指示此傳輸流包的有效載荷應隨着PES 包的首字節開始,‘0’指示在此傳輸流包中無任何PES包將開始。若payload_unit_start_indicator 設置爲‘1’,則一個且僅有一個PES 包在此傳輸流包中起始。這也適用於stream_type 6 的專用流;
    • 當傳輸流包有效載荷包含PSI 數據時,payload_unit_start_indicator 具有以下意義:若傳輸流包承載PSI分段的首字節,則payload_unit_start_indicator 值必爲1,指示此傳輸流包的有效載荷的首字節承載pointer_field。若傳輸流包不承載PSI 分段的首字節,則payload_unit_start_indicator 值必爲‘0’,指示在此有效載荷中不存在pointer_field。參閱2.4.4.1 和2.4.4.2。這也適用於stream_type 5 的專用流;
    • 對空包而言,payload_unit_start_indicator 必須設置爲‘0’。

transport_priority - 1bit - 0

  • 設置爲‘1’時,它指示該相關包比具有相同PID 但不具有該比特設置爲1 的其他包有更大的優先級。傳輸機制可以使用該字段優先考慮基本流內的該包數據。取決於應用,transport_priority 字段可以不管PID 或者此字段僅在一個PID 範圍內編碼。此字段可以由信道特定編碼器或解碼器來改變。

PID - 13bit - 0 0001 0000 0000

  • PID 爲13 比特字段,指示包有效載荷中存儲的數據類型。
    這裏寫圖片描述

transport_scrambling_control - 2bit - 00

  • 此2 比特字段指示傳輸流包有效載荷的加擾方式。
  • 傳輸流包頭以及自適應字段若存在,應不加擾。
  • 在空包的情況中,transport_scrambling_control 字段的值應設置爲“00”
    這裏寫圖片描述

adaptation_field_control - 2bit - 11

  • 此2 比特字段指示此傳輸流包頭是否後隨自適應字段和/或有效載荷
    這裏寫圖片描述
  • 解碼器應丟棄具有adaptation_field_control 字段設置爲‘00’值
    的傳輸流包。
  • 在空包的情況中,adaptation_field_control 的賦值應爲‘01’。

continuity_counter - 4bit - 0000

  • 隨着具有相同PID 的每個傳輸流包而增加
  • 當包的adaptation_field_control 爲‘00’或‘10’時,
    continuity_counter 不增加。

data_byte

//adaptation_field + body
07 50 00 00 80 F7 7E 00 00 00 01 E0 00 00 80 80 05 21 00 07 F0 0D 00 00 00 01 09 10 00 00 00 01 67 4D 40 33 95 A0 0F 00 10 FB 01 40 80 00 01 F4 80 00 75 30 70 00 00 0F 42 40 00 00 F4 24 0D DE 5C 1F 1C 32 A0 00 00 00 01 68 EE 3C 80 00 00 00 01 06 00 07 81 19 40 00 46 50 40 80 00 00 00 01 06 01 04 00 00 08 10 80 00 00 00 01 65 B8 04 04 1F 02 EB 03 FE 13 F0 D4 6D 2C 00 D1 DF 2D C0 00 00 03 00 00 03 00 00 03 00 00 03 00 00 2F 3D 76 1F D0 53 29 EE 83 00 00 03 00 00 03 00 00 03 00 00 03 00 04 30 04 00 00 03 00 00 03 00 00 05 EC 00 00 03 00 00 03 00 00

自適應字段

因爲上面包頭中adaptation_field_control - 2bit - 11,所以包頭之後應該有自適應字段,並且
這裏寫圖片描述
這裏寫圖片描述

adaptation_field_length - 8bit -

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章