解决OpenCV的GStreamer warning警告

调用 cv::VideoCapture出现的警告:

[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1758) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error.
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1758) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src1 reported: Internal data stream error.
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created

原代码 :

cv::VideoCapture cap(0);
if (!cap.isOpened())
{
    cout << "摄像头打开失败!" << endl;
    return -1;
}
else
{
    cap.open(0);  //0-笔记本自带摄像头,1-外接usb双目摄像头
    cap.set(cv::CAP_PROP_FRAME_WIDTH, FRAME_WIDTH);  //设置捕获视频的宽度
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT);  //设置捕获视频的高度
    cap.set(cv::CAP_PROP_FPS, 60);
}

修改代码:

//增加cv::CAP_V4L2,即可解决
cv::VideoCapture cap(0, cv::CAP_V4L2);
if (!cap.isOpened())
{
    cout << "摄像头打开失败!" << endl;
    return -1;
}
else
{
	//增加cv::CAP_V4L2,即可解决
    cap.open(0, cv::CAP_V4L2);  //0-笔记本自带摄像头,1-外接usb双目摄像头
    cap.set(cv::CAP_PROP_FRAME_WIDTH, FRAME_WIDTH);  //设置捕获视频的宽度
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT);  //设置捕获视频的高度
    cap.set(cv::CAP_PROP_FPS, 60);
}

PS:记录一下这条命令,可以看摄像头的一些参数

v4l2-ctl --info -d /dev/video0 --list-formats-ext

在这里插入图片描述

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!对于在OpenCV中使用GStreamer进行流媒体拉流,您可以按照以下步骤进行操作: 1. 首先,请确保您已经安装了OpenCVGStreamer库。您可以使用以下命令在Ubuntu上安装它们: ``` $ sudo apt-get install libopencv-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev ``` 2. 接下来,您需要编写一段代码来执行流媒体的拉流操作。以下是一个简单的示例: ```cpp #include <opencv2/opencv.hpp> int main() { cv::VideoCapture cap; cv::Mat frame; // 使用GStreamer设置视频源 cap.open("uridecodebin uri=<your_stream_uri> ! videoconvert ! appsink", cv::CAP_GSTREAMER); if (!cap.isOpened()) { std::cout << "无法打开视频流" << std::endl; return -1; } while (true) { // 读取一帧图像 cap >> frame; if (frame.empty()) { std::cout << "视频流已结束" << std::endl; break; } // 在这里可以对图像进行处理或显示 cv::imshow("Frame", frame); // 按下ESC键退出循环 if (cv::waitKey(1) == 27) { break; } } cap.release(); cv::destroyAllWindows(); return 0; } ``` 3. 在代码中,`<your_stream_uri>`代表您要拉取的实际流媒体的URI。您可以使用RTSP、HTTP或其他GStreamer支持的URL格式。 4. 编译并运行您的代码。确保您拥有一个有效的流媒体URI,并且您的计算机可以访问该流媒体源。 这样,您就可以使用OpenCVGStreamer在C++中拉取流媒体了。请注意,根据您使用的GStreamer插件和硬件支持情况,可能需要调整流媒体URI和GStreamer管道以适应您的环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值