GB28181技術基礎之2 - H264與PS封包


二. PS封包

       PS 是 GB28181 規定的標准封包格式(也是存儲格式),在講 PS 之前,先介紹幾種相關的 數據格式概念:

1)ES

     基本流 (Elementary Streams)是直接從編碼器出來的數據流,也成為凈荷數據。ES是編碼后的視頻流(比如H.264),音頻數據流(如AAC),和其他編碼數據流的統稱。

     ES是只包含一種內容的數據流(比如純粹的視頻或音頻),每個ES都由若干個存取單元(AU)組成,每個視頻AU或音頻AU都是由頭部和編碼數據兩部分組成,1個AU相當於編碼的1幅視頻圖像或1個音頻幀,也可以說,每個AU實際上是編碼數據流的顯示單元,即相當於解碼的1幅視頻圖像或1個音頻幀的取樣。

2)PES

     打包的ES(Packetized Elementary Streams),是用來傳遞ES的一種數據結構。是ES流經過 PES打包形成的數據流,即將ES流分組、打包、加入包頭信息,是對ES流的第一次打包。

     PTS - 顯示時間戳(Presentation Time Stamp),用來表示顯示單元出現在系統目標解碼器的時間。

     DTS - 解碼時間戳(Decoding Time Stamp),用來表示將存取單元全部字節從解碼緩存取走的時間。

     PTS/DTS 這兩個參數是解決音視頻同步顯示,防止解碼器輸入緩存上溢或下溢的關鍵。每一個 I幀 | P幀 | B幀 的包頭都有一個PTS和DTS。

3)PS

     一個PS包 由若干個 PES 包組成,PS包頭包含了同步信息與時鍾恢復信息。

     一個PS包 最多可包含具有同一時鍾基准的16個視頻PES包和32個音頻PES包。

     PS包是針對 ES凈荷數據 的第二次封裝。

 

       PS 包中的流類型(stream type)的取值如下:

 

 MPEG-4

  視頻流   

 H.264

 視頻流  

 SVAC

 視頻流  

 G.711

 音頻流 

 G.722.1

 音頻流   

 G.723.1

  音頻流  

 G.729

 音頻流 

 SVAC

 音頻流 

0x10

0x1B

0x80

0x90

0x92

0x93

0x99

0x9B

       來看一下 PS包頭:

        

       注意:這里面有一個 System Header,位於 PS包頭之后,當且僅當第一個數據包時 該Header存在。

       在文件開頭封包格式為:PS頭 + System 頭 + PES頭 + H264流

       非文件開頭格式: PS頭 + PES頭 + H264流 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM