Приложение IP-камеры OpenCV аварийно завершает работу [h264 @ 0xxxxx] отсутствует изображение в блоке доступа
у меня есть приложение opencv в cpp.
он захватывает видеопоток и сохраняет его в видеофайлы с помощью простых конструкций из opencv.
Он отлично работает с моей веб-камеры.
но он падает, возможно, примерно через десять секунд, пока я запускаю его, чтобы захватить поток с IP Camara.
моя команда компиляции:
g++ -O3 IP_Camera_linux.cpp -o IP_Camera `pkg-config --cflags --libs opencv`
мой поток с IP-камеры доступен следующим образом:
const string Stream = "rtsp://admin:xxxx@192.168.0.101/";
он работает отлично, показывает видео и сохраняет его до тех пор, пока отображается видео зависает и приложение завершает работу. В то время как сообщение об ошибке на терминал:
[h264 @ 0x15e6f60] error while decoding MB 59 31, bytestream (-20)
[h264 @ 0x15e8200] error while decoding MB 61 27, bytestream (-3)
[h264 @ 0x109c880] missing picture in access unit
[h264 @ 0x109c000] no frame!
насколько я понимаю, первые две строки в приведенном выше сообщении об ошибке могут иметь какое-то отношение, но на самом деле не сбой приложения. Последние две строки, вероятно, являются причинами или причиной?
помочь?
3 ответов
получил решение после большого количества ударов и проб. Просто немного изменил адрес потока, и это сработало.
From:
const string Stream = "rtsp://admin:xxxx@192.168.0.101/";
В:
const string Stream = "rtsp://admin:xxxx@192.168.0.101/ch1-s1?tcp";
понятия не имею, что это изменило?
НО ОН РАБОТАЕТ ОТЛИЧНО!!!
даже всепроникающие предупреждения формы:
[h264 @ 0x15e6f60] error while decoding MB 59 31, bytestream (-20)
[h264 @ 0x15e8200] error while decoding MB 61 27, bytestream (-3)
ушли.
в любом случае был бы признателен, если бы кто-нибудь мог объяснить это с логической причиной.
это ошибка из ffmpeg. Вероятно, ваш ffmpeg-старая версия, и вы можете ее обновить. Он отлично решил проблему для моего случая, переустановив последние opencv и ffmpeg следующим образом:
-
установить последнюю версию ffmpeg
git clone git://source.ffmpeg.org/ffmpeg.git cd ffmpeg ./configure --enable-shared --disable-static make sudo make install
-
установите последнюю версию opencv
git clone git@github.com:opencv/opencv.git cd opencv mkdir build cd build cmake ../ -DCMAKE_BUILD_TYPE=Release make sudo make install
для надежного запуска вы можете проверить нулевое изображение в цикле, и если вы получите нулевое изображение, вы можете сбросить соединение с камерой:
IplImage *img = cvQueryFrame(camera);
if (img == NULL) {
printf("img == null ");
fflush(stdout);
camera = cvCreateFileCapture("rtsp://admin:xxxx@192.168.0.101/ch1-s1?tcp");
}