天天看點

ffmpeg封裝h264裸流為mp4檔案,視訊播放速度特别慢

計算實際幀率時,需要從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){

繼續閱讀