MPEG2 TS 一 結構 復用器

2021-06-26 08:31:46 字數 2035 閱讀 5925

**:

mpeg2_ts(一)-結構-復用器

一:原理

二:流程

1:開啟檔案,將要做復用的檔案開啟,開啟兩個執行緒做讀取檔案,傳入要做復用的函式中做處理。

3:將傳入的一幀資料填寫成乙個pes(後面做解釋)。

5:後續處理,釋放記憶體,關閉檔案等等。

三:結構

1:h264,nal頭結構

2:幀型別列舉

3:***頭結構體

4:ts頭結構體

這裡要解釋下,我們最終生成的ts檔案是又乙個乙個188位元組的包組成,第乙個位元組是 0x47,ts包頭 是4個位元組。

6:pmt,節目對映表

7:pes結構體

四:細節

//一幀資料的長度 不包含 pes包頭 ,這個8 是 自適應的長度,填0 可以自動查詢,這個一定要找對,如果資料長度不對,會產生很多問題,還要考慮溢位的情況。

4: writeadaptive_flags_head(&ts_adaptation_field_head); //填寫自適應段標誌幀頭

writeadaptive_flags_tail(&ts_adaptation_field_tail); //填寫自適應段標誌幀尾

5:當乙個pes大於188 時候要做分包 ,拆分一幀或幾幀資料,分到各個包中,最後乙個包要注意,

如果負載長度大於 ==182  || == 183 的時候要打兩個包,因為自適應裝不進去了。

if ((writepacketnum % 40) == 0) 

//每40個包打乙個 pat,乙個pmt

7:在填寫pat,pmt的crc的時候一定要注意大小端的問題,資料長度一定要算對了,我這個糾結了一天。

pat_crc = zwg_ntohl(calc_crc32(pat + 5, pointer_pat - pat - 5));

9: //連續性計數器,也就是說 有多少個 pat包,幾個pmt包 ,幾個*** 包,幾個 h264包,0x00 - 0x0f ,然後折回到0x00。

typedef struct tag_continuity_counter

continuity_counter; 

10:還有一些長度的細節,以及位域,標誌等等的東西,可以看《mpeg2(13818-2)標準中文文件》 

,或本程式了解。

11: 關於pts的填寫 可以遵循這兩個公式:

timestamp_video += 1000* 90/framerate; 

//90khz

timestamp_audio += 1024*1000* 90/audiosamplerate;

注: 1:本文原始碼在我的csdn:

MPEG2 TS 包結構簡述

ts 包由以下3部分組成 包頭 4位元組,同步,識別,檢錯和加密用 自適配域 可選 包資料 最大184位元組 不存在自適配域 4位元組 184位元組 包頭自適配域 包資料4位元組包頭結構 1位元組1位元1位元 1位元13位元 2位元2位元 4位元同步位元組 傳輸錯誤描述符 載荷起始描述符 傳輸優先 ...

mpeg2 ts協議分析

一段es流 n幀 就是第2行中的資料 1幀 1 pes payload 1pes 1pes包頭 1 pes payload 第四行解釋 從pes方面理解 1pes 切成n段,每段組成乙個ts包的負載。從ts方面理解 最開始的ts包由 ts包頭 圖中有t標誌的 pes 包頭 草綠色 pes paylo...

MPEG2 TS獲取PCR PID方法

乙個簡單的從指定mpeg2 ts檔案中獲取pcr pid的函式,pmt的頭結構中有pcr pid,我們首先得到pmt pid,然後分析pmt包,就可以得到pcr pid了。getpmtpid函式的實現見 make pid define make pid p p 0 8 p 1 0x1fff html...