基于 ZeroMQ 的数据(图像)传输系统

各子平台间实时传输图像

 

Foreword

 

libzmq 编译安装

  • libzmq下载4.3.4版本

  • 解压libzmq

    1
    2
    3
    4
    5
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/home/***指定的文件夹路径 ..
    make
    make install -j4
    注:-D***修改安装路径(cmake-gui也可以改)
      两个点代表上级目录(CMakeLists.txt)
      home后跟用户名才是任务管理器里的home(ctrl+L查看路径,文件管理器刷新ctrl+R)

     

编译output脚本

  • 解压 output.tar.gz
  • 修改CMakeLists.txt 里ZeroMQ路径,改成/home/<>/lib/CMake/ZeroMQ 33行的OpenCV_DIR可以注释掉,如果后边自己编译了opencv库(就像这个libzmq一样),也可以指定路径
  • 缺少minunit.h(提取码6666)头文件,将其放在3rd-party文件夹下面
    将 CV_LOAD_IMAGE_COLOR 改成1

1
2
3
4
mkdir build
cd build
cmake ..
make

 

RTSP取流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "opencv2\opencv.hpp"
#include <iostream>

using namespace cv;

int main()
{

VideoCapture capture;
capture.open("../../bin/data/1.mp4");
//capture.open("rtsp://admin:admin123@192.168.1.164:554/cam/realmonitor?channel=1&subtype=0");

int frameH = capture.get(4);
int frameW = capture.get(3);
std::cout << "frameH:" << frameH << " frameW:" << frameW << std::endl;

while (1)
{
Mat frame;
capture >> frame;

if (frame.empty())
{
break;
}
imshow("test", frame);
waitKey(30);
}
}

 

端口配置

  • 配置发布订阅端的tcp地址,如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "PUB": [
    {
    "id": "0xABA2",
    "length": 0,
    "port": "tcp://192.168.137.88:5555"
    }
    ],
    "SUB": [
    ]
    }

  • tcp地址为设备ip地址加一个四位端口号(不重复即可);同时注意一台设备可以同时充当发布订阅端(自发自收)

     

测试

  运行output下编译通过的demo,帧率通过waitkey等调节。

 

源代码

  工程代码,提取码:6666