[英]Synchronizing FFMPEG video frames using PTS
我正在嘗試同步從MP4視頻解碼的幀。 我正在使用FFMPEG庫。 我已經解碼並存儲了每個幀,並在OPENGL平面上成功顯示了視頻。
我在騎車穿過車架之前就開始了一個計時器; 目的是正確同步視頻。 然后我將每幀的PTS與此計時器進行比較。 我在解碼過程中存儲了從數據包接收的PTS。
我的應用程序中顯示的內容似乎沒有達到我期望的速度。 它比媒體播放器中的原始視頻文件播放速度更快。
我對FFMPEG和一般的編程視頻缺乏經驗。 我是以錯誤的方式解決這個問題嗎?
這是我試圖做的一個例子
FrameObject frameObject = frameQueue.front();
AVFrame frame = *frameObject.pFrame;
videoClock += dt;
if(videoClock >= globalPTS)
{
//Draw the Frame to a texture
DrawFrame(&frame, frameObject.m_pts);
frameQueue.pop_front();
globalPTS = frameObject.m_pts;
}
請注意我使用的是C ++,Windows,Opengl,FFMPEG和VS2010 IDE
首先,使用int64_t pts = av_frame_get_best_effort_timestamp(pFrame)
獲取pts。 其次,您必須確保同步的兩個流使用相同的時基。 最簡單的方法是將所有內容轉換為AV_TIME_BASE_Q。 pts = av_rescale_q ( pts, formatCtx->streams[videoStream]->time_base, AV_TIME_BASE_Q );
在這種格式中,pts以納秒為單位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.