#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::Mat frame;
std::string videoPath = "/home/z/Number.mp4"; // 修改为你的视频文件路径
// 打开视频文件
cv::VideoCapture cap(videoPath);
// 检查是否成功打开
if (!cap.isOpened()) {
std::cerr << "ERROR! Unable to open video file\n";
return -1;
}
// 读取和显示视频帧
while (true) {
cap >> frame;
if (frame.empty()) {
std::cerr << "ERROR! Blank frame grabbed\n";
break;
}
cv::imshow("Video Playback", frame);
if (cv::waitKey(30) >= 0) {
break;
}
}
return 0;
}
videoPath换过视频文件地址、也更换过rtsp流地址,但是总报错,卡在cap.isOpened()退出。
常见可能会造成cv::VideoCapture open失败的原因,可能是视频文件不存在或者RTSP流异常导致了,我已经排除了此问题。
FFmpeg版本使用的4.4.5, 最初使用的6版本的,怀疑版本过高切换成4.4.5版本了,使用的是自己编译的。
在编译OpenCV的时候 执行
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.0 ..
发现FFMPEG未启用
— Video I/O:
— DC1394: NO
— FFMPEG: NO
— avcodec: NO
— avformat: NO
— avutil: NO
— swscale: NO
— avresample: NO
— GStreamer: NO
— v4l/v4l2: YES (linux/videodev2.h)
使用APT安装FFmpeg可以快速解决
# 安装FFmpeg相关的库
sudo apt-get update
sudo apt-get install ffmpeg
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
安装FFmpeg相关的库之后的cmake输出有了一些变化:
— Video I/O:
— DC1394: NO
— FFMPEG: YES
— avcodec: YES (58.134.100)
— avformat: YES (58.76.100)
— avutil: YES (56.70.100)
— swscale: YES (5.9.100)
— avresample: NO
— GStreamer: NO
— v4l/v4l2: YES (linux/videodev2.h)
# 重新执行
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.0 ..
make -j32
make install
# 重新编译程序就能正常播放了
自己编译的FFmpeg如何解决该问题?
经排查是由于我没找到编译安装的FFmpeg,
# 指定一下自己编译ffmpeg的pkg_config路径
export PKG_CONFIG_PATH=/usr/local/ffmpeg-4.4.5/lib/pkgconfig:$PKG_CONFIG_PATH
# 再次编译opencv
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.0 ..
make -j32
make install
# cmake的时候可以看到已经识别到了
# 重启启动程序 问题解决
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容