MPEG4碼流的幀率計算

MPEG4標準協議中。

VOL頭中的Vop_time_increment_resolution和VOP頭中的Vop_time_increment,一起確定了碼流所採用的幀率。

VOL頭中的Vop_time_increment_resolution,指示了vop_time_increment 的時間分辨率。它的值實際上就表示了1 秒被分成多少間隔。

VOP頭中的Vop_time_increment,單位爲vol 中定義的1/vop_time_increment_resolution 秒,它給出當前vop 的以modulo_time_base 爲基準的精確時間。它的取值範圍爲[0,vop_time_increment_resolution]。

簡單計算,碼流的實時幀率應該等於Vop_time_increment_resolution/(每個Vop_time_increment的差值)。


VOL中的fixed_vop_rate,表示所有VOP是否採用固定的幀率編碼。只有當任意兩個連續的vop 顯示間隔是常數時,它才被設置爲1。

Fixed_vop_time_increment:這個碼字描述了顯示序列中兩個vop 之間的時間長度,單位由vop_time_increment_resolution 決定, 等於它的倒數。

在這種情況下,碼流的固定幀率由vop_time_increment_resolution/fixed_vop_time_increment給出。


對於VOP中的modulo_time_base,它由一個0 和後面緊跟着的若干個1 組成,每個1 表示1秒。每過1s,0後面多1個1。

GOV頭中的時間顯示以此爲基準。


以下是標準中的例子。


存在VLC接收碼流時,幀率顯示與實際幀率不一致的情況。

使用ElecardStreamEye分析幀率30的碼流,使用VLC接收卻是60或30000。

應該是因爲VLC在解碼時,只關心vop_time_increment_resolution的值,而沒有關心vop_time_increment的值。


在實際應用中還存在這樣的問題:

設置的幀率是25幀,GOV中的時間也是按照25幀1秒來計算。

但vop_time_increment_resolution和vop_time_increment的增量分別是60和2,等於是30幀,實際碼率也是按照30幀來控制。

這樣需要從編碼入手進行修改。

發佈了50 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章