“本文轉載自:[jimte_pro]的網(wǎng)絡流媒體--PS封裝格式”
本文相關系列:
1.PS格式概述
MPEG2-PS:一種多路復用數(shù)字音視頻等的封裝容器。PS是Program Stream(程序流或節(jié)目流)的簡稱。程序流將一個或多個分組但有共同的時間基準的基本數(shù)據(jù)流(PES)合并成一個整體流。它是為可靠穩(wěn)定的儲存媒介如光盤而設計的。
ES:Elementary Stream(基本碼流),是由編碼器輸出的原始基礎碼流,它只含有解碼器所必需的、并與原始圖象或原始音頻相接近的信息。由由壓縮器輸出的用于傳送 單路視音頻信號的原始碼流。ES只包含一種內(nèi)容的數(shù)據(jù)流,如只含視頻或只含音頻等。
PES:Packetized Elementary Streams (分組的ES),ES形成的分組稱為PES分組,是用來傳遞ES的一種數(shù)據(jù)結構。PES流是ES流經(jīng)過PES打包器處理后形成的數(shù)據(jù)流,在這個過程中完成了將ES流分組、打包、加入包頭信息等操作(對ES流的第一次打包)。PES流的基本單位是PES包。PES包由包頭和payload組成。
PS:Program Stream(節(jié)目流),PS流由PS包組成,而一個PS包又由若干個PES包組成(到這里,ES經(jīng)過了兩層的封裝)。PS包的包頭中包含了同步信息與時鐘恢復信息。一個PS包最多可包含具有同一時鐘基準的16個視頻PES包和32個音頻PES包。
2.PS流基本封裝格式
??PS用到的基本術語如下:
PSH:Program Stream pack Header ,是PS包的包頭;
PS system header:Partial system header,系統(tǒng)頭;
PSM:Program Stream Map,節(jié)目流映射( PSM)提供節(jié)目流中基本流的描述及其相互關系。當在傳輸流中承載時,此結構將不修正。當 stream_id 值為 0xBC 時, PSM 作為 PES 包存在。
PES Header:PES Packetized Elementary Streams,PES流的基本單位是PES包。PES包由包頭和payload組成。
PS封裝結構:
??一般來說一個完整的PS包封裝格式如下所示:
- 視頻關鍵幀的封裝:

- 視頻非關鍵幀的封裝:

3.ps格式描述
3.1 PS header格式
(1)開始的數(shù)據(jù):sync bytes
(2)SCR數(shù)據(jù)

(3)速率

??PSH一般來說最少需要包含14個Byte,擴展長度根據(jù)stuffing lenght計算,最長為7個byte(stuffing lenght 只有3位長度),這些字段可以用于存放幀序號等參數(shù)。下圖為一段碼流的PS頭:

3.2 Partial system headerg格式

(1)開始數(shù)據(jù)

(2)rate_bound

(3)其他數(shù)據(jù)


下圖為一段碼流的系統(tǒng)頭:

3.3 Program Stream Map


下圖為一段PS的map:

3.4 PS PES Header


PES頭如下圖所示:
