引言
標準文檔給自己的定義是:論述了將音頻和視頻的一個或多個基本流以及其他數(shù)據(jù)組合成為一個單獨的流或多個流塑猖,以適于存儲或傳輸饭寺。系統(tǒng)編碼遵循本規(guī)范中提出的句法和語義規(guī)則拟杉,并且提供信息使得解碼器緩沖區(qū)可以在各種檢索或接收條件下進行同步解碼脑又。
節(jié)目流:它是由一個或多個具有共同時間基的PES 包的流組合成一個單獨的流而形成的庆聘。
傳輸流:是將具有一個或多個獨立時間基的一個或多個節(jié)目組合成為一個單獨的流貌虾。由組成一個節(jié)目的基本流所構成的PES包共享一個公共的時間基吞加。傳輸流被設計為在易于出錯的環(huán)境中使用,例如在有損的或嘈雜的媒體中進行存儲或傳輸。傳輸流的包長度為188 個字節(jié)衔憨。
引言1 傳輸流
傳輸流是一種流定義叶圃,適用于在一個可能發(fā)生較多錯誤的環(huán)境中傳輸或存儲由遵循ITU-T H.262 建議書 | ISO/IEC 13818-2 和ISO/IEC 13818-3 的編碼數(shù)據(jù)以及其他數(shù)據(jù)所形成的一個或多個節(jié)目。
傳輸流可能具有固定速率或可變速率践图;傳輸流的速率由節(jié)目時鐘基準(PCR)字段的取值和位置來定義掺冠,一般來說對于每種節(jié)目都有一個獨立的PCR 字段。
引言2 節(jié)目流
節(jié)目流是一種流定義码党,適用于在一個不太可能發(fā)生誤差的環(huán)境中傳輸或存儲由編碼數(shù)據(jù)或其他數(shù)據(jù)所形成的一個節(jié)目德崭,在這種情況下,對系統(tǒng)編碼的處理揖盘,如通過軟件進行處理眉厨,是一個主要的考慮方面。
節(jié)目流可能具有固定速率或可變速率,節(jié)目流的速率由系統(tǒng)時鐘基準(SCR)字段和復用速率(mux_rate)字段的取值和位置來定義兽狭。
引言4 PES
每個傳輸流和節(jié)目流在邏輯上都是由PES 包構造的
屬于一個基本流的憾股、具有同一個流ID 的、連續(xù)的PES 包序列可能被用于構造一個PES 流
當PES 包被用于構造一個PES 流時箕慧,它們必須包含基本流時鐘基(ESCR)字段和基本流速率(ES_Rate)字段
引言5 time mode
所有的時序都根據(jù)一種公共系統(tǒng)時鐘來定義服球,該時鐘被稱為一個系統(tǒng)時鐘。
在節(jié)目流中销钝,此時鐘可能與視頻或音頻采樣時鐘之間具有一個精確指定的比率有咨,或者其運行頻率可能與精確的比率之間有輕微的不同琐簇,但仍然能夠提供精確的端到端的時序和時鐘恢復蒸健。
在傳輸流中,系統(tǒng)時鐘頻率被限定為在任何時候都應與音頻和視頻采樣時鐘之間具有精確指定的比率婉商;此限定的目的是為了簡化解碼器處的采樣速率恢復似忧。
重要的定義
- Elementary Stream Clock Reference; ESCR (system) 基本流時鐘參考
- presentation time-stamp; PTS (system) 顯示時間標記;PTS(系統(tǒng)):PES 包頭中可以存在的丈秩、指示系統(tǒng)目標解碼器中顯示單元的顯示時間的一個字段盯捌。
- Program Clock Reference; PCR (system) 節(jié)目時鐘參考;PCR(系統(tǒng)):從傳輸流中時間標記推導而來的解碼器計時蘑秽。
- Program Specific Information; PSI (system) 節(jié)目特定信息饺著;PSI(系統(tǒng)):PSI 由對于傳輸流的多路分解以及節(jié)目成功再現(xiàn)所必要的標準數(shù)據(jù)組成,并在2.4.4 中描述肠牲。專門規(guī)定的PSI 數(shù)據(jù)實例是非必備網(wǎng)絡信息表幼衰。
- System Clock Reference; SCR (system) 系統(tǒng)時鐘參考;SCR(系統(tǒng)):從節(jié)目流中時間標記推導而來的解碼器計時缀雳。
- system target decoder; STD (system) 系統(tǒng)目標解碼器渡嚣;STD(系統(tǒng)):用于確定ITU-TH.222.0 建議書| ISO/IEC 13818-1 多路復用比特流語義的解碼過程的虛擬參考模型。
系統(tǒng)時鐘頻率
系統(tǒng)時鐘頻率值以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 的系統(tǒng)時鐘頻率周期為單位识椰,稱之為program_clock_reference_base
PCR-base的作用:
a. 與PTS和DTS作比較, 當二者相同時, 相應的單元被顯示或者解碼.
b. 在解碼器切換節(jié)目時,提供對解碼器PCR計數(shù)器的初始值,以讓該PCR值與PTS绝葡、DTS最大可能地達到相同的時間起點.
PCR_ext:以系統(tǒng)時鐘頻率為單位,稱之為program_clock_reference_extension
PCR-ext的作用:
通過解碼器端的鎖相環(huán)路修正解碼器的系統(tǒng)時鐘, 使其達到和編碼器一致的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數(shù)據(jù)包
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
包頭
//包頭數(shù)據(jù)
47 41 00 30
0100 0111 0100 0001 0000 0000 0011 0000
sync_byte - 8bit - 0x47
- sync_byte 為固定的8 比特字段腹鹉,其值為'0100 0111' (0x47)藏畅。在對于其他正式出現(xiàn)字段的賦值選擇中,諸如PID种蘸,應避免sync_byte 仿真
**transport_error_indicator - 1bit - 0 **
- 置于1 時墓赴,它指示在相關傳輸流包中至少存在1 個不可校正比特錯。此比特可以由傳輸層以外的實體設置為‘1’航瞭。設置為‘1’時诫硕,此比特應不重新設置為‘0’,除非誤差比特值已經(jīng)校正刊侯。
payload_unit_start_indicator - 1bit - 1
- 對于承載PES包或PSI數(shù)據(jù)的傳輸流包章办,它具有標準含義。
- 當傳輸流包有效載荷包含PES包數(shù)據(jù)時滨彻,payload_unit_start_indicator 具有以下意義:‘1’指示此傳輸流包的有效載荷應隨著PES 包的首字節(jié)開始藕届,‘0’指示在此傳輸流包中無任何PES包將開始。若payload_unit_start_indicator 設置為‘1’亭饵,則一個且僅有一個PES 包在此傳輸流包中起始休偶。這也適用于stream_type 6 的專用流;
- 當傳輸流包有效載荷包含PSI 數(shù)據(jù)時,payload_unit_start_indicator 具有以下意義:若傳輸流包承載PSI分段的首字節(jié)辜羊,則payload_unit_start_indicator 值必為1踏兜,指示此傳輸流包的有效載荷的首字節(jié)承載pointer_field。若傳輸流包不承載PSI 分段的首字節(jié)八秃,則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 的其他包有更大的優(yōu)先級纳本。傳輸機制可以使用該字段優(yōu)先考慮基本流內的該包數(shù)據(jù)。取決于應用腋颠,transport_priority 字段可以不管PID 或者此字段僅在一個PID 范圍內編碼繁成。此字段可以由信道特定編碼器或解碼器來改變。
PID - 13bit - 0 0001 0000 0000
-
PID 為13 比特字段秕豫,指示包有效載荷中存儲的數(shù)據(jù)類型朴艰。
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 - **