Я пытаюсь синхронизировать кадры, декодированные с видео MP4. Я использую библиотеки FFMPEG. Я расшифровал и сохранил каждый кадр и успешно отобразил видео по плоскости OPENGL.Синхронизация видеокадров FFMPEG с использованием PTS
Я начал таймер перед тем, как ездить на велосипеде по кадрам; чтобы синхронизировать видео правильно. Затем я сравниваю 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
Должно быть 'AV_TIME_BASE_Q', какое значение является' (AVRational) {1, 100000} ' –
Спасибо !. обновлено. – szatmary
szatmary, AV_TIME_BASE_Q находится в микросекундах, а не в наносекундах. @ Кайдул Ислам, вам не хватает нуля, знаменатель для AV_TIME_BASE_Q составляет один миллион. – ajs410