2015-10-26 22 views
9

Ich habe eine opencv-Anwendung in cpp.OpenCV IP-Kameraanwendung stürzt ab [h264 @ 0xxxxx] fehlendes Bild in der Zugriffseinheit

Es erfasst Videostream und speichert es in Videodateien mit den einfachen Konstrukten von opencv.

Es funktioniert perfekt mit meiner Webcam.

Aber es stürzt vielleicht nach etwa zehn Sekunden, während ich es ausführen, um den Stream von IP Camara zu erfassen.

Mein Kompilierungsbefehl ist:

g++ -O3 IP_Camera_linux.cpp -o IP_Camera `pkg-config --cflags --libs opencv` 

Mein Strom von IP-Cam wie folgt zugegriffen:

const string Stream = "rtsp://admin:[email protected]/"; 

Es perfekt ausgeführt wird, zeigt Video und speichert sie, bis die angezeigte Video gefriert und die Anwendung stürzt ab. Während die Fehlermeldung auf dem Terminal:

[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! 

Zu meinem Verständnis könnten die Faust zwei Zeilen in der obigen Fehlermeldung, etwas zu tun haben, aber nicht tatsächlich die Anwendung zum Absturz bringen. Die letzten beiden Zeilen sind wahrscheinlich die Gründe oder die Ursache?

Irgendwelche Hilfe?

+0

überprüfen Sie die folgenden [RTSP UPD vs TCP] (http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/) – Pim

+0

gut, das könnte lösen, was tatsächlich ist nicht das Hauptproblem, gut! Übrigens, es gibt keine akzeptierte Antwort, scheint noch eine Debatte. – tod

+0

Können wir Ihre cpp-Datei sehen? Oder ein Code-Snippet, mit dem Sie auf den Stream der Kamera zugreifen können? – Manny

Antwort

3

Haben Sie die Lösung nach vielen Treffer und Testversion. Habe gerade die Stream-Adresse geändert und es hat funktioniert.

Von:

const string Stream = "rtsp://admin:[email protected]/"; 

An:

const string Stream = "rtsp://admin:[email protected]/ch1-s1?tcp"; 

keine Ahnung, welche Veränderung es machte?

ABER ES FUNKTIONIERT PERFEKT !!!

Auch die allgegenwärtigen Warnungen der Form:

[h264 @ 0x15e6f60] error while decoding MB 59 31, bytestream (-20) 
[h264 @ 0x15e8200] error while decoding MB 61 27, bytestream (-3) 

sind verschwunden.

Jedenfalls würde schätzen, wenn jemand es mit dem logischen Grund dahinter erklären könnte.

CREDIT

-1

Als Zitat zu the original answer, das Hinzufügen ? Tcp bis zum Ende zwingt die RTSP-Verbindung, die, wenn Sie für jede nicht überprüfen aktiv nützlich ist, mit dem TCP-Protokoll anstelle das UDP-Protokolls zu laufen Verbindungsproblem und daher können Sie sich keinen Paketverlust leisten.

Für robuste Laufen Sie für NULL Bild in Ihnen Schleife überprüfen und, wenn Sie ein NULL-Bild erhalten, können Sie die Kamera Verbindung zurück:

IplImage *img = cvQueryFrame(camera); 
     if (img == NULL) { 
      printf("img == null "); 
      fflush(stdout); 
      camera = cvCreateFileCapture("rtsp://admin:[email protected]/ch1-s1?tcp"); 
     } 
+0

Neustart der Verbindung macht Strom schrecklich. – tod

0

Es ist ein Fehler von ffmpeg. Wahrscheinlich ist Ihr ffmpeg eine alte Version und Sie möchten sie vielleicht aktualisieren.Es löste das Problem perfekt für meinen Fall durch die neueste opencv Neuinstallation und ffmpeg wie folgt:

  • neueste ffmpeg installieren

    git clone git://source.ffmpeg.org/ffmpeg.git 
    cd ffmpeg 
    ./configure --enable-shared --disable-static 
    make 
    sudo make install 
    
  • die neueste opencv installieren

    git clone [email protected]:opencv/opencv.git 
    cd opencv 
    mkdir build 
    cd build 
    cmake ../ -DCMAKE_BUILD_TYPE=Release 
    make 
    sudo make install