mpeg2_ts(二)-pcr控制傳送速度原理
一·目的:本文所講是通過pcr控制ts檔案傳送給udp的速率,以便用vlc來接收資料時不會產生「空」,或溢位的情況。
擷取一位網友的話:
泛泛講點其他的東西,為什麼要用pcr來控制傳送速度:通常硬體asi卡傳送ts資料,是依靠位元速率來控制速度。假設ts是2mb的位元速率,那麼asi卡的傳送速度就固定控制在2mb。
如果ts的位元速率有波動變化,就在ts中插入空白資料報,強行將ts的位元速率提高到乙個固定的位元速率值。這是硬體asi卡傳送ts通常使用的方式。
在乙太網上傳送ts資料,考慮到乙太網傳輸速度的不穩定性,udp的丟包性質,和socket的傳送接收緩衝區,插入空包將ts位元速率提高到乙個固定位元速率的做法已經沒有了意義,
因為上面那些因素,乙太網的傳送速度不能像asi卡那樣固定。插入空白資料報,把位元速率提高到乙個固定值的做法也比較多此一舉。
所以,根據ts流自己攜帶的pcr時鐘資訊,來進行同步控制傳送速度,比根據位元速率來控制傳送速度,更準確,也更有適應性。在ts位元速率有波動,並且波動比較大的情況下,
根據位元速率來控制傳送速度無疑是不準確的。
二·流程:
1:2:
3:4:
5:根據碼速率控制傳送速度
三·細節:
1:在流程5的時候,注意sleep是毫秒級別的算出來的資料時double型,要-1才能匹配上。
2:最後乙個要傳送的資料長度:
這裡sleep時間要注意。
3:本demo中碼速率(rate)是以幀資料算出來乙個,然後算傳送的sleep時間,網上查詢也可以用多幀的rate算平均值來算出sleep時間。這樣我沒有做,不知道可不可以。
4:本demo對檔案末尾的處理沒有完善,可以進行完善。
5:本demo是對本地檔案的讀取傳送到vlc上,vlc:(udp:也可以擴充套件到直播,處理方面要改進。
注:本demo位址在我的csdn上:
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獲取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...