計算實際幀率時,需要從mp4的moov box中的mvhd中取得timescale和duration,将兩者相除得到檔案總時長,
再從stsz box中取得sample總數,即總幀數sample_count,用總幀數除以總時長即平均幀率,計算公式為
frame_rate = sample_count/(duration/timescale)
解決方法:通過查詢mp4幀率計算得到答案:
AVDictionary* opt = NULL;
av_dict_set(&opt, "video_track_timescale", "90000", 0);
備注:
AVDictionary *opt=NULL;
av_dict_set_int(&opt,"video_track_timescale",25,0);
ret=avformat_write_header(ofmt_ctx,&opt);
而且pts隻能+1遞增。時間基沒有設定也能十分正常播放。
timescale指一秒鐘按時鐘滴答數計算是多少,如果你設定1000,則一秒鐘是以1000計算,你設定成25,那一秒鐘就以25計算,是以你pts隻能+1。 因為你設定了video_track_timescale是以不需要設定時間基
儲存幀:
int mp4savePacket(int status,AVPacket *tmppacket){