Я пытаюсь написать программное обеспечение для записи, которое записывает видео поток, поступающий с компьютера, в файл avi. Я использую OpenCV и сопровождаемый videoInput.h для обработки кода DirectShow. На всякий случай важно использовать Visual Studio 2010 в качестве компилятора.
Проблема, с которой я столкнулся, заключается в том, что записанный файл воспроизводится быстрее, чем предварительно просматриваемый файл. Не очень, но достаточно, чтобы быть заметным. ПРИМЕР: 10-секундный предварительный просмотр - это примерно 7-секундный файл, поэтому все движутся слишком быстро.
if( bWriteVideo )
{
writer=cvCreateVideoWriter(szFileName,CV_FOURCC('D','I','V','X'),
fps,cvSize(width, height),isColor);
if( !writer ) return 1;
}
if( bDisplayVideo )
cvNamedWindow("video", 0);
while( key != 'q')
{
if(VI.isFrameNew(nSource))
{
VI.getPixels(nSource, yourBuffer1, false, true);
frame = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
frame->imageData = (char*)yourBuffer1;
frame->imageDataOrigin = frame->imageData;
if( !frame ) break;
// Display Image to Screen
if( bDisplayVideo )
cvShowImage( "video" , frame );
if( bWriteVideo )
cvWriteFrame( writer, frame );
}
key = cvWaitKey ( 1000 / fps );
}