簡體   English   中英

使用PTS同步FFMPEG視頻幀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM