#include #include #include int main() { // 创建ZeroMQ上下文 zmq::context_t context(1); // 创建套接字并连接到接收方 zmq::socket_t socket(context, zmq::socket_type::push); socket.connect("ipc:///tmp/video_socket"); // 打开视频文件 cv::VideoCapture cap("1.mp4"); if (!cap.isOpened()) { std::cerr << "Failed to open video file" << std::endl; return 1; } // 获取视频帧率 double fps = cap.get(cv::CAP_PROP_FPS); std::cout << "Original FPS: " << fps << std::endl; // 逐帧读取并发送 cv::Mat frame; while (cap.read(frame)) { // 获取图像尺寸 int width = frame.cols; int height = frame.rows; int type = frame.type(); // 创建消息 zmq::message_t message(sizeof(int) * 3 + frame.total() * frame.elemSize() + sizeof(double)); // 将图像尺寸复制到消息 char* dataPtr = static_cast(message.data()); memcpy(dataPtr, &width, sizeof(int)); dataPtr += sizeof(int); memcpy(dataPtr, &height, sizeof(int)); dataPtr += sizeof(int); memcpy(dataPtr, &type, sizeof(int)); dataPtr += sizeof(int); // 将图像数据复制到消息 memcpy(dataPtr, frame.data, frame.total() * frame.elemSize()); dataPtr += frame.total() * frame.elemSize(); // 将帧率信息复制到消息 memcpy(dataPtr, &fps, sizeof(double)); // 发送消息 socket.send(message); // 打印帧率 std::cout << "Sent FPS: " << fps << std::endl; } // 关闭套接字 socket.close(); // 关闭 ZeroMQ 上下文 context.close(); return 0; }