“本文轉(zhuǎn)載自:[jimte_pro]的網(wǎng)絡(luò)流媒體--PS封裝格式”
本文相關(guān)系列:
1.PS格式概述
MPEG2-PS:一種多路復(fù)用數(shù)字音視頻等的封裝容器。PS是Program Stream(程序流或節(jié)目流)的簡稱檩电。程序流將一個(gè)或多個(gè)分組但有共同的時(shí)間基準(zhǔn)的基本數(shù)據(jù)流(PES)合并成一個(gè)整體流。它是為可靠穩(wěn)定的儲(chǔ)存媒介如光盤而設(shè)計(jì)的。
ES:Elementary Stream(基本碼流),是由編碼器輸出的原始基礎(chǔ)碼流,它只含有解碼器所必需的弹囚、并與原始圖象或原始音頻相接近的信息。由由壓縮器輸出的用于傳送 單路視音頻信號的原始碼流领曼。ES只包含一種內(nèi)容的數(shù)據(jù)流鸥鹉,如只含視頻或只含音頻等。
PES:Packetized Elementary Streams (分組的ES)庶骄,ES形成的分組稱為PES分組毁渗,是用來傳遞ES的一種數(shù)據(jù)結(jié)構(gòu)。PES流是ES流經(jīng)過PES打包器處理后形成的數(shù)據(jù)流单刁,在這個(gè)過程中完成了將ES流分組灸异、打包、加入包頭信息等操作(對ES流的第一次打包)。PES流的基本單位是PES包肺樟。PES包由包頭和payload組成檐春。
PS:Program Stream(節(jié)目流),PS流由PS包組成么伯,而一個(gè)PS包又由若干個(gè)PES包組成(到這里疟暖,ES經(jīng)過了兩層的封裝)。PS包的包頭中包含了同步信息與時(shí)鐘恢復(fù)信息田柔。一個(gè)PS包最多可包含具有同一時(shí)鐘基準(zhǔn)的16個(gè)視頻PES包和32個(gè)音頻PES包俐巴。
2.PS流基本封裝格式
??PS用到的基本術(shù)語如下:
PSH:Program Stream pack Header ,是PS包的包頭凯楔;
PS system header:Partial system header窜骄,系統(tǒng)頭;
PSM:Program Stream Map摆屯,節(jié)目流映射( PSM)提供節(jié)目流中基本流的描述及其相互關(guān)系邻遏。當(dāng)在傳輸流中承載時(shí),此結(jié)構(gòu)將不修正虐骑。當(dāng) stream_id 值為 0xBC 時(shí)准验, PSM 作為 PES 包存在。
PES Header:PES Packetized Elementary Streams廷没,PES流的基本單位是PES包糊饱。PES包由包頭和payload組成。
PS封裝結(jié)構(gòu):
??一般來說一個(gè)完整的PS包封裝格式如下所示:
- 視頻關(guān)鍵幀的封裝:
- 視頻非關(guān)鍵幀的封裝:
3.ps格式描述
3.1 PS header格式
(1)開始的數(shù)據(jù):sync bytes
(2)SCR數(shù)據(jù)
(3)速率
??PSH一般來說最少需要包含14個(gè)Byte颠黎,擴(kuò)展長度根據(jù)stuffing lenght計(jì)算另锋,最長為7個(gè)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頭如下圖所示: