我从一年开发出一款处理来自IP摄像机的视频流的软件。该软件实时显示视频,还可以录制,进行视频处理等。 IP摄像机可以通过RTSP传输MJPEG或H264视频。视频大小为768x576,25fps。 我的问题是当我使用H264流时,抓取方法太慢,在30到60毫秒之间。我的程序不仅抓取帧,所以如果抓取方法需要50毫秒,我无法处理视频的25fps。我不明白的是我有一台非常强大的计算机DualCore @ 3Ghz。 有没有办法快速使用OpenCv抓取框架?
这是我的代码的一部分(使用Qt + home构建的OpenCv 2.4.1 MinGw):
开始捕获:
videoCapture.open(fileName.toStdString());
queryFrameTimer->start(20);
connect(queryFrameTimer,SIGNAL(timeout()),this,SLOT(queryFrame()));
queryFrame方法
void VideoStreamer::queryFrame()
{
qDebug() << QTime::currentTime().toString("mm:ss:zzz") << "queryFrame start";
QTime elapsedTimer;
elapsedTimer.start();
Mat frame;
videoCapture >> frame;
qDebug() <<" VideoStreamer::queryFrame " + QString::number(elapsedTimer.elapsed());
[...]
}
调试输出
"41:07:366" queryFrame start
" VideoStreamer::queryFrame 44 ms"
"41:07:429" queryFrame start
" VideoStreamer::queryFrame 35 ms"
"41:07:493" queryFrame start
" VideoStreamer::queryFrame 37 ms"
"41:07:556" queryFrame start
" VideoStreamer::queryFrame 28 ms"
"41:07:595" queryFrame start
" VideoStreamer::queryFrame 38 ms"
"41:07:648" queryFrame start
" VideoStreamer::queryFrame 42 ms"
"41:07:710" queryFrame start
" VideoStreamer::queryFrame 34 ms"
"41:07:772" queryFrame start
" VideoStreamer::queryFrame 38 ms"
"41:07:835" queryFrame start
" VideoStreamer::queryFrame 28 ms"
"41:07:866" queryFrame start
" VideoStreamer::queryFrame 56 ms"
"41:07:959" queryFrame start
" VideoStreamer::queryFrame 25 ms"
"41:07:990" queryFrame start
" VideoStreamer::queryFrame 60 ms"
"41:08:053" queryFrame start
" VideoStreamer::queryFrame 35 ms"
"41:08:115" queryFrame start
" VideoStreamer::queryFrame 27 ms"
"41:08:147" queryFrame start
" VideoStreamer::queryFrame 64 ms"
"41:08:241" queryFrame start
" VideoStreamer::queryFrame 24 ms"
"41:08:275" queryFrame start
" VideoStreamer::queryFrame 56 ms"
"41:08:335" queryFrame start
" VideoStreamer::queryFrame 50 ms"