Приложение 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
    

в качестве ссылки на оригинальный ответ!--3--> добавление ?tcp до конца заставляет соединение rtsp работать с использованием протокола tcp вместо протокола udp, который полезен, если вы не активно проверяете наличие каких-либо проблем с подключением, и поэтому вы не можете позволить себе потерю пакетов.

для надежного запуска вы можете проверить нулевое изображение в цикле, и если вы получите нулевое изображение, вы можете сбросить соединение с камерой:

IplImage *img = cvQueryFrame(camera);
        if (img == NULL) {
            printf("img == null ");
            fflush(stdout);
            camera = cvCreateFileCapture("rtsp://admin:xxxx@192.168.0.101/ch1-s1?tcp");
        }