1. 程式人生 > >H264 幀率的計算

H264 幀率的計算

這兩天做h264 rtmp協議上傳需要計算幀率,踩了很多坑記錄下.

第一步當然要解析sps,解析sps的資料網上很多。


關鍵得到兩個值:1、num_units_in_tick;2、time_scale;


fps=time_scale/num_units_in_tick;


這個值是不準確的,網上查了各種資料說nuit_field_based_flag=1時要除以2,值=0時不用除,查了H.264官方中文版看了這個值和幀率貌似有點關係;
開始看ffmpeg原始碼如何解析nuit_field_based_flag,decode_picture_timing這個接口裡根據sps->pic_struct_present_flag來確定有沒有該值,測試檔案該值為0,只能放棄;
記起來mplayer解析h264檔案的幀率是對的,於是看mplayer原始碼,原來:
fixed_frame_rate_flag=1時fps才要除以2,於是從sps中解析出fixed_frame_rate_flag至此解決:

fps=time_scale/num_units_in_tick;
if (fixed_frame_rate_flag==1)
{
fps = fps/2;
}