首页 > 解决方案 > G streamer 视频流和接收

问题描述

我需要从连接到视频图像采集卡(支持 G-streamer)的相机设备接收笔记本电脑中的视频。在笔记本电脑中,我需要使用 opencv 处理视频,然后以 RTSP 格式流式传输视频。如何接收视频,然后使用 G-streamer c++ 在 RTSP 中流式传输视频?请分享示例代码

在此处输入图像描述

这是我的代码 sender.cpp 在笔记本电脑 #1 中,receiver.cpp 代码在笔记本电脑 #2 中。我无法在接收端看到视频。此外,附上我的构建信息供您参考

发件人.cpp

cv::VideoCapture video;
cv::Mat frame;
cv::VideoWriter videoOut;
videoOut.open("appsrc ! videoconvert ! video/x-raw, format=YUY2,width=640,height=480,farmerate=30/1 ! jpegnc ! rtpjpegpay ! udpsink host=192.168.1.200 port=5000", cv::CAP_GSTREAMER, 0 , 30, cv::Size(640,480),true);
if(video.open(0)) {
    while(video.isOpened()) {
        video >> frame;
        cv::putText(frame, "Processed Video", cv::Point(100,80),cv::FONT_HERSHEY_PLAIN, 2, cv::Scalar(0,0,255), 2);
        if(videoOut.isOpened())
            videoOut.write(frame);
        else
            cout<<"Writer Not Opened";
        cv::imshow("Sender", frame);
        cv::waitKey(25);
    }
}
else {
    cout<<"Camera Not Opened";
}

接收器.cpp

cv::VideoCapture cap("udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG, payload=26 ! rtpjpegdepay ! jpegdec ! videoconvert ! appsink sync = true async = true", cv::CAP_GSTREAMER);
 if(cap.isOpened()) {
     cv::Mat m;
     cout<<"Video Init";
     while(1) {
         cout<<"Video Streaming";
         cap >> m;
         cv::imshow("Receiver", m);
         cv::waitKey(10);
     }
 }
 else
     cout<<"Cap Not Opening";

在此处输入图像描述

标签: c++opencvgstreamer

解决方案


要使用 gstreamer 提取视频,请确保使用 GStreamer 构建 opencv。完成此操作后,只需为 GStreamer 创建管道并将其作为参数传递给cv::VideoCapture()对象,如下所示

std::string videoAddress = "udpsrc port=50004 ! application/x-rtp, encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! videoconvert ! appsink sync = true async = true";
cv::VideoCapture *camera = new cv::VideoCapture();
cameraOpened = camera->open(videoAddress, cv::CAP_GSTREAMER);

我不确定如何帮助您解决问题的第二部分。


推荐阅读