OpenCV IP 摄像机应用程序崩溃 [h264 @ 0xxxxx] 访问单元中缺少图片
OpenCV IP camera application crashes [h264 @ 0xxxxx] missing picture in access unit
我在 cpp 中有一个 opencv 应用程序。
它使用 opencv 的简单构造捕获视频流并将其保存到视频文件。
它与我的网络摄像头配合得很好。
但是,它可能会在大约十秒后崩溃,而我 运行 它是为了从 IP Camara 捕获流。
我的编译命令是:
g++ -O3 IP_Camera_linux.cpp -o IP_Camera `pkg-config --cflags --libs opencv`
我的网络摄像头流是这样访问的:
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!
据我了解,上述错误消息中的前两行可能与某些问题有关,但实际上并没有使应用程序崩溃。最后两行大概是原因还是原因?
有什么帮助吗?
经过大量的尝试和尝试得到了解决方案。只是稍微更改了流地址并且它起作用了。
发件人:
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)
都走了。
无论如何,如果有人能解释一下背后的逻辑原因,我们将不胜感激。
作为对 的引用,在末尾添加 ?tcp 会强制使用 tcp 协议而不是 udp 协议将 rtsp 连接到 运行如果您不主动检查任何连接问题,这很有用,因此您不能承受任何数据包丢失。
为了稳健 运行ning,您可以在循环中检查 NULL 图像,如果得到 NULL 图像,您可以重置相机连接:
IplImage *img = cvQueryFrame(camera);
if (img == NULL) {
printf("img == null ");
fflush(stdout);
camera = cvCreateFileCapture("rtsp://admin:xxxx@192.168.0.101/ch1-s1?tcp");
}
这是 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
我在 cpp 中有一个 opencv 应用程序。
它使用 opencv 的简单构造捕获视频流并将其保存到视频文件。
它与我的网络摄像头配合得很好。
但是,它可能会在大约十秒后崩溃,而我 运行 它是为了从 IP Camara 捕获流。
我的编译命令是:
g++ -O3 IP_Camera_linux.cpp -o IP_Camera `pkg-config --cflags --libs opencv`
我的网络摄像头流是这样访问的:
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!
据我了解,上述错误消息中的前两行可能与某些问题有关,但实际上并没有使应用程序崩溃。最后两行大概是原因还是原因?
有什么帮助吗?
经过大量的尝试和尝试得到了解决方案。只是稍微更改了流地址并且它起作用了。
发件人:
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)
都走了。
无论如何,如果有人能解释一下背后的逻辑原因,我们将不胜感激。
作为对
为了稳健 运行ning,您可以在循环中检查 NULL 图像,如果得到 NULL 图像,您可以重置相机连接:
IplImage *img = cvQueryFrame(camera);
if (img == NULL) {
printf("img == null ");
fflush(stdout);
camera = cvCreateFileCapture("rtsp://admin:xxxx@192.168.0.101/ch1-s1?tcp");
}
这是 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