MPEG2 TS獲取PCR PID方法

2021-08-07 17:51:52 字數 1166 閱讀 7478

乙個簡單的從指定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]view plain

copy

ushort getpcrpid(const char* filename)  

fp= fopen

(filename, "rb");  

if (fp

== null)   

while (fread(buf, 1, tspacket_size, fp) == tspacket_size)   p= 

buf;  

pid= 

make_pid

((p+1));  

if( pid != pmtpid )   

// payload_unit_start_indicator 必須為1  

if (!(buf[1] >

>

6 & 0x01))   

// skip the ts header  

p += mpeg_ts_header_size; //@mpeg_ts_header_size= 4

// adaptation field exist or not  

if ((buf[3] >

>

4 & 0x03) & 0x2)   

// p[0] 為 point field長度, 1為point field  

p += 1 + p[0];  

// 8 為pcr pid在pmt表頭中的偏移  

p += 8;  

// 取到的pcr pid如果是0x1fff, 則需要繼續取  

pcrpid

= make_pid

(p);  

if (pcrpid

== 0x1fff)   

break;  

}  fclose(fp);  

return pcrpid;  

}  

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 包結構簡述

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

MPEG2 TS 一 結構 復用器

mpeg2 ts 一 結構 復用器 一 原理 二 流程 1 開啟檔案,將要做復用的檔案開啟,開啟兩個執行緒做讀取檔案,傳入要做復用的函式中做處理。3 將傳入的一幀資料填寫成乙個pes 後面做解釋 5 後續處理,釋放記憶體,關閉檔案等等。三 結構 1 h264,nal頭結構 2 幀型別列舉 3 頭結構...