Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV IP camera application crashes [h264 @ 0xxxxx] missing picture in access unit

I have an opencv application in cpp.

It captures video stream and saves it to video files with the simple constructs from opencv.

It works perfectly with my webcam.

But, it crashes maybe after about ten seconds, while I run it to capture the stream from IP Camara.

My compile command is:

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

My Stream from IP cam is accessed like this:

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

It does run perfectly, shows video and saves it until the displayed video freezes and the application crashes. While the error message on the terminal is:

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

To my understanding, the fist two lines in the above error message might have something to do but does not actually crash the application. The last two lines are probably the reasons or the cause?

Any help?

like image 767
tod Avatar asked Oct 26 '15 17:10

tod


People also ask

Can I use OpenCV with CPP?

I have an opencv application in cpp. It captures video stream and saves it to video files with the simple constructs from opencv. It works perfectly with my webcam. But, it crashes maybe after about ten seconds, while I run it to capture the stream from IP Camara.

How to reset the camera connection if the image is null?

For robust running you can check for NULL image in you loop and if you get a NULL image, you can reset the camera connection: IplImage *img = cvQueryFrame (camera); if (img == NULL) { printf ("img == null "); fflush (stdout); camera = cvCreateFileCapture ("rtsp://admin:[email protected]/ch1-s1?tcp"); }

How to rebuild OpenCV without FFmpeg support?

Try rebuilding OpenCV without FFMPEG support, but with GStreamer enabled. Then, ensure you have all of the GStreamer plugins installed (good, bad, ugly) and gstreamer-ffmpeg (if you're in Linux, not sure how to get these plugins/libraries in other OSes).


1 Answers

Got the solution after lots of hit and trial. Just changed the stream address a bit and it worked.

From:

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

To:

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

NO idea, what change it did make?

BUT IT WORKS PERFECTLY!!!

Even the pervasive warnings of the form:

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

are gone.

Anyways would appreciate if some one could explain it with the logical reason behind.

CREDIT

like image 119
tod Avatar answered Oct 19 '22 16:10

tod