mpegts介紹

聲明:
    這裏主要介紹FFmpeg 中mpegts這個封裝格式,希望可以對大家有所幫助。

介紹:

    mpegts : 對應的是封裝層代碼,在解碼過程中對應的是下面的解封裝。經過解封裝之後,獲得音視頻對應的es數據。

 

    我們看電視的時候之所以可以每次切臺都可以接着看,而DVD換碟片就要重頭開始看,這是因爲電視在切臺後會發送PAT和PMT。通過PAT我們可以確定PMT的pid,同時接收有與之pid匹配的PMT,而通過PMT我們可以知道將要獲得的音視頻的pid。之後我們接收與PMT中相對應的pid的音視頻數據。而對於一些不規範的服務器會在正常播放的時候改變pid或者音視頻的格式,這個時候就會出現播放卡住的現象。這個時候我們可以通過抓取網絡包,同時從網絡包中提取卡住前後的ts切片對比就可以了。

    TS ---------》 PES------------》ES 他們關係如下圖:

 

 

TS:    

而說到mpegts就要介紹ts的格式。如下圖:

 

 

    開始的一個字節爲同步字節,對於ts包來說是以0x47開始的。

    之後一個字節中的第二位用來標識是不是開始標識,而對於PES來說proload unit start indicator用來標識是不是PES的其實位置,對於每個PES這個標識位都會設置爲1.

    而之後的PID佔用了13位。他用來標識不同的pid。PAT一般對應的pid爲0x0,而在PAT中會指明PMT的pid。而解析完PMT的時候,他也會指明對應接收的音視頻的pid。而之後接收的ts包中就是根據這個PID來區分音視頻,並從中取出對應的數據放到PES的數據中。

    transport scrambling control標識位一般用來標識加密使用。

    在ts包中,proload 區可能是數據,也有可能不是數據,當不是數據的時候就需要adaptation field來填充0xff來,而區分是否有adaptation field 就要看 adaptation field control 這個標識位了。而對於PAT和PMT來說是沒有adaptation field 的。同時可以通過adaptation field control爲不同的值來區分proload中爲什麼樣的值。

  •         0x1 : proload爲純數據(爲音視頻數據)
  •         0x2 : 爲adaptation field數據,
  •         0x3 : 既有音視頻數據又有adaptation field數據。

 

    而如果有adaptation數據,我們可以通過ts包的第5字節來獲取adaptation field的長度。而adaptation field其他的部分需要繼續分析標誌位。這裏還沒有詳細看。

PES:

而當ts包中adaptation field control爲0x1或者0x3時,表示有數據,而這個時候的數據爲PES數據。通常情況下adaptation field control爲0x1,而在PES首個包或者最後一個包的時候,adaptation field control可能爲0x3. 而解析PE數據需要看下面的結構體:

 

 

    在PES包頭的三個字節爲PES的起始碼標誌,對於PES來說爲0x00 00 01

    之後的第四字節 stream id 爲數據流識別:這個時候通常使用這個id來表示是視頻流還是音頻流或者是其他的流。

    之後的第五字節和第六字節 PES Packet Length 表示了PES的包長。

 

    之後的兩個字節,第七和第八字節是PES包頭的識別標誌,其中包括:

  •         10 的開始表示
  •         是否 PES加擾控制(加密傳輸),
  •         數據對齊指示
  •         版權
  •         pts/dts標誌位:通過獲得dts和pts來獲得解碼順序和顯示順序。
  •         再之後的一個字節包含了PES的包頭長度。
  •         而之後的區域就是各種信息區,其中有包括pts ,dts等的信息

    而PES其實就是將ES數據打包,而PES的數據部分就是ES數據了。而通過mpegts 我們可以分析ts包頭來獲得各種組成PES需要的數據,而同時將ts包中數據的部分放到PES包中。同樣對於PES的分析可以獲得關於ES的各種數據,而之後將PES數據部分提取出來就是我們需要的音視頻數據了。而從ts包到es數據,這個過程就是一個解複用的過程。

 

同時強烈建議:

上面這些需要結合mpegts.c的代碼來看。

參考文章:

多媒體文件格式(四):TS 格式 https://www.cnblogs.com/renhui/p/10362640.html

流媒體基礎知識(二) mpegts詳解 https://blog.csdn.net/WangZekun_wolf/article/details/89532912

ffmpeg--mpegts.c解析PES https://blog.csdn.net/evsqiezi/article/details/79625619

MPEG-2系統中ES,PES,PS以及TS流的介紹 https://blog.csdn.net/leopard21/article/details/24818715

mpeg-ts詳細介紹 https://wenku.baidu.com/view/8f9c316caf1ffc4ffe47acae.html

上面這些需要結合mpegts.c的代碼來看。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章