1. 程式人生 > >解析h264 sps中獲取幀率和解析度記錄

解析h264 sps中獲取幀率和解析度記錄

從live555中提取程式碼出來,可以成功獲取解析度和幀率,幀率主要是獲取num_units_in_tick和time_scale兩個引數;

其中遇到了以下問題:

與網友類似的問題,這裡截取了他的問題

發現一個奇怪的事情:
如果h264的 profile是 main,那麼在vui parameters裡面,
num_units_in_tick:1200 time_scale:60000, nFrame_rate = sps->time_scale / sps->num_units_in_tick ; 50 fps --- ok.
但是,如果profile 是high,那麼值是這樣:
num_units_in_tick:48

time_scale:16777216 ,Frame_rate:349525 fps 
奇怪的,我的code到底那裡錯誤了,
第二,若說我的code錯誤了,那sps裡面包含,vui parameters,以前的任何值都沒有錯誤呀,偏偏這兩個值錯誤了,

若果換一個high的h264檔案,那值是這樣的,
num_units_in_tick:384 time_scale:16777217 fixed_frame_rate_flag:1 Frame_rate:43690 ,
用其它的分析工具看,num_units_in_tick = 1, time_scale = 50,50 fps
我到底怎麼排除這個錯誤呢。

原因是碼流沒有對齊,主要是在提取live555程式碼時候,忽略了一個函式介面“removeH264or5EmulationBytes()”,在處理SPS資料之前呼叫該介面即可解決上述問題;其中該介面的解釋"A general routine for making a copy of a (H.264 or H.265) NAL unit, removing 'emulation' bytes from the copy";