IP數據報有首部和數據兩部分組成的,首部的前一部分是固定長度20字節,是所有IP數據報必須具有的。首部包括:總長度、標識、MF、DF、片偏移。
一. 基本概念
數字信號實際傳送的是數據流,一般數據流包括以下三種:
(1)ES流(Elementary Stream):
ES--Elementary Streams (原始流), 是直接從編碼器出來的數據流,可以是編碼過的視頻數據流(H.264,MJPEG等),音頻數據流(AAC),或其他編碼數據流的統稱。ES流經過PES打包器之后,被轉換成PES包。
ES是只包含一種內容的數據流,如只含視頻或只含音頻等,打包之后的PES也是只含一種性質的ES,如只含視頻ES的PES,只含音頻ES的PES等。每個ES都由若干個存取單元(AU)組成,每個視頻AU或音頻AU都是由頭部和編碼數據兩部分組成,1個AU相當於編碼的1幅視頻圖像或1個音頻幀,也可以說,每個AU實際上是編碼數據流的顯示單元,即相當於解碼的1幅視頻圖像或1個音頻幀的取樣。
(2)PES流(Packet Elementary Stream):
PES--Packetized Elementary Streams (分組的ES), 也叫打包的基本碼流,是將基本的碼流ES流根據需要分成長度不等的數據包,並加上包頭就形成了打包的基本碼流PES流。ES形成的分組稱為PES分組,是用來傳遞ES的一種數據結構。PES流是ES流經過PES打包器處理后形成的數據流,在這個過程中完成了將ES流分組、打包、加入包頭信息等操作(對ES流的第一次打包)。PES流的基本單位是PES包。PES包由包頭和payload組成。
(3)PS流(Program Stream):
PS--Program Stream(節目流), PS流由PS包組成,而一個PS包又由若干個PES包組成(到這里,ES經過了兩層的封裝)。PS包的包頭中包含了同步信息與時鍾恢復信息。一個PS包最多可包含具有同一時鍾基准的16個視頻PES包和32個音頻PES包。
(4)TS流:
TS--Transport Stream(傳輸流),也叫傳輸流,由定長的TS包組成(188字節),而TS包是對PES包的一個重新封裝(到這里,ES也經過了兩層的封裝)。PES包的包頭信息依然存在於TS包中。TS流是由固定長度為188字節的包組成,含有獨立時基的一個或多個program, 一個program又可以包含多個視頻、音頻、和文字信息的ES流;每個ES流會有不同的PID標示. 而又為了可以分析這些ES流, TS有一些固定的PID用來間隔發送program和ES流信息的表格: PAT和PMT表。適用於誤碼較多的環境。
TS流與PS流的區別在於TS流的包結構是固定長度的,而PS流的包結構是可變長度的。PS包由於長度是變化的,一旦丟失某一PS包的同步信息,接收機就會進入失步狀態,從而導致嚴重的信息丟失事件。而TS碼流由於采用了固定長度的包結構,當傳輸誤碼破壞了某一TS包的同步信息時,接收機可在固定的位置檢測它后面包中的同步信息,從而恢復同步,避免了信息丟失。因此在信道環境較為惡劣、傳輸誤碼較高時一般采用TS碼流,而在信環境較好、傳輸誤碼較低時一般采用PS碼流。
(5)PTS、DTS
PTS--PresentationTime Stamp(顯示時間戳),表示顯示單元出現在系統目標解碼器(H.264、MJPEG等)的時間。
DTS--Decoding Time Stamp(解碼時間戳)表示將存取單元全部字節從解碼緩存器移走的時間。
PTS/DTS是打在PES包的包頭里面的,這兩個參數是解決音視頻同步顯示,防止解碼器輸入緩存上溢或下溢的關鍵。每一個I(關鍵幀)、P(預測幀)、B(雙向預測 幀)幀的包頭都有一個PTS和DTS,但PTS與DTS對於B幀不一樣,無需標出B幀的DTS,對於I幀和P幀,顯示前一定要存儲於視頻解碼器的重新排序緩存器中,經過延遲(重新排序)后再顯示,所以一定要分別標明PTS和DTS。
(6)TS單一碼流、混合碼流
單一性:TS流的基本組成單位是長度為188字節的TS包。
混合性: TS流由多種數據組合而成,一個TS包中的數據可以是視頻數據,音頻數據,填充數據,PSI/SI表格數據等(唯一的PID對應)。
二. 基本流程
1)A/D轉換后,通過MPEG-2壓縮編碼得到的ES基本流。這個數據流很大,並且只是I,P,B的這些視頻幀或音頻取樣信息。
2)通過PES打包器,打包並在每個幀中插入 PTS/DTS標志,變成PES。原來是流的格式,現在成了數據包的分割形式。
3)PES根據需要打包成PS或TS包進行存儲(DVD)或傳輸(DVB)。因每路音/視頻只包含一路的編碼數據流,所以每路PES也只包含相應的數據流。
附:PS流的組成
關於PID的解釋:
PID(PacketIdentifier)是包識別碼的意思。
TS包頭占用TS包的前4個字節,其中用13bit來表示PID。
PID的作用就好比是一份文件的文件名。有了標識值的TS包,會放進一個叫節目映射表(PMT)的控制信息中,PMT本身就是一個TS包,所以也有自己的PID值(有PAT包指定),這個表里面的PID值與該路節目ES的音頻、視頻、數據的PID一一對應。最后將與該路節目有關的傳送包復接起來,共同形成單路節目傳送流,即TS流,從上圖可以看出,視頻數據的PID值是45,音頻數據的PID值是78,填充數據的PID值是69...。
在多路節目傳送流中,還有一個特殊的控制信息PAT(它是節目輔助表的意思),PAT本身也是一個TS包(在ISO/IEC 13818-1里有說明,PAT(Program Association Table)的PID值為0x00,所有TS包的標識(即sync_byte)為0x47),即上圖中的表格數據部分。在PAT中,包含的就是每路TS流對應的PMT表所在的TS包的PID信息,其實PAT表中的數據為TS包的PID,這個TS包的內容為PMT。
通過對PID的譯碼,就可以對單個節目傳送流進行解碼。
所以解析起來就像這樣: 先接收一個負載為PAT的TS包(TS包頭為0x47 0xXX 0x00 0xXX),在整個數據包里找到一個PMT包的PID(program_map_PID)。然后再接收一個含有PMT的TS包(TS包頭為0x47 0x00 program_map_PID 0xXX),在這個TS包里找到有關填入數據類型的PID,PMT中可能含有不止一個TS包的PID數據,PMT中stream_type、elementary_PID決定了TS包的類型和PID,然后用PMT中的PID值匹配接收到的TS包,如果匹配上,那么該TS包的負載內容就是填入實際的數據。
轉自:http://www.360doc.com/content/13/0829/15/13084517_310733557.shtml
三. 總結:
ES是原始碼流,包含視頻、音頻或數據的連續碼流。
TS是傳輸流,是由固定長度為188字節的包組成,含有獨立時基的一個或多個節目,適用於誤碼較多的環境。 在MPEG-2系統中,由視頻,音頻的ES流和輔助數據復接生成的用於實際傳輸的標准信息流稱為MPEG-2傳送流。
PES是打包生成的基本碼流,是將基本的碼流ES流根據需要分成長度不等的數據包,並加上包頭就形成了打包的基本碼流PES流。
PS是節目流,PS主要應用於存儲的具有固定時長的節目,如DVD電影,而TS則主要應用於實時傳送的節目,比如實時廣播的電視節目,PS流不能獨立解碼,而后者可以獨立解碼;PS流的包結構是可變長度的,而TS流的包結構是固定長度的。
編碼器出來的是TS流,傳輸接口為asi口,編碼器整個作用過程是把模擬信號變成ES,再打包成PES,再打包成TS流輸出。
復用器是把多路單節目或多節目TS流合稱1路多節目TS流,再給調制器。
數字衛星接收機出來的是TS流,也是asi接口,可能包含一路或多路節目,有的還同時有一路模擬信號視音頻輸出。
模擬衛星接收機出來的是模擬視音頻信號。
參考鏈接: