IP カメラからのビデオ ストリームを処理するソフトウェアを 1 年間開発しています。このソフトウェアは、ビデオをリアルタイムで表示し、録画したり、ビデオ処理を行ったりすることもできます。IP カメラは、RTSP 経由で MJPEG または H264 ビデオをストリーミングできます。ビデオのサイズは 25fps で 768x576 です。私の問題は、H264 ストリームを使用する場合、グラブ メソッドが遅すぎて 30 ~ 60 ミリ秒かかることです。私のプログラムはフレームをグラブするだけではないので、グラブ メソッドに 50 ミリ秒かかると、ビデオの 25 fps を処理できません。私が理解していないのは、非常に強力なコンピューター DualCore @3Ghz を持っているということです。OpenCv でフレームをすばやく取得する方法はありますか?
これが私のコードの一部です( Qt + home built 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"