我应该如何连接NVR引脚?

时间:2018-07-26 11:52:14

标签: c++ opencv server client streaming

我有一个服务器和一个客户端程序,可以完美地显示实时流媒体,但是我想将我的客户端CODE与网络视频录像机相连。

  

我应该如何连接nvr引脚?我应该如何与网络录像机交互?

我已经有服务器代码,但是NVR将充当服务器,因此,我不需要运行服务器代码,这就是为什么nvr将充当服务器,而Visual Studio上的客户端代码充当客户端的原因。

// client.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include <Winsock2.h>
#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include "opencv2/opencv.hpp"

#include <iostream>
#include <Ws2tcpip.h>
#include<sys/types.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include "opencv2/core/core.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <Windows.h>
#include <opencv2\video\tracking.hpp>
#include "opencv2\video\background_segm.hpp"
#pragma comment (lib,"Ws2_32.lib")
using namespace cv;
using namespace std;
#define FRAME_WIDTH 640
#define FRAME_HEIGHT 480
int imgSize;
int bytes = 0;
bool running = true;
char key;

int main(int argc, char *argv[])
{

    WSADATA wsa_data;
    SOCKADDR_IN addr;

    WSAStartup(MAKEWORD(2, 0), &wsa_data);
    const auto server = socket(AF_INET, SOCK_STREAM, 0);

    InetPton(AF_INET, _T("127.0.0.1"), &addr.sin_addr.s_addr);

    addr.sin_family = AF_INET;
    addr.sin_port = htons(5555);

    connect(server, reinterpret_cast<SOCKADDR *>(&addr), sizeof(addr));
    cout << "Connected to server!" << endl;


    while (running) {
        int IM_HEIGHT = FRAME_HEIGHT;
        int IM_WIDTH = FRAME_WIDTH;
        Mat img = Mat::zeros(FRAME_HEIGHT, FRAME_WIDTH, CV_8UC3);
        imgSize = img.total()*img.elemSize();
        const int ah = 921600;
        char sockData[ah];
        for (int i = 0; i < imgSize; i += bytes) {
            if ((bytes = recv(server, sockData + i, imgSize - i, 0)) == -1) {
                cout << "error in receiving" << endl;
            }
        }

        int ptr = 0;
        for (int i = 0; i < img.rows; ++i) {
            for (int j = 0; j < img.cols; ++j) {
                img.at<Vec3b>(i, j) = Vec3b(sockData[ptr + 0], sockData[ptr + 1], sockData[ptr + 2]);
                ptr = ptr + 3;
            }
        }

        namedWindow("Client", CV_WINDOW_AUTOSIZE);
        imshow("Client", img);
        if (waitKey(30) == 27) {
            closesocket(server);
            cout << "Server Disconnected";
            running = false;
        }
    }
    closesocket(server);
    WSACleanup();
    cout << "Socket closed." << endl << endl;        
}

0 个答案:

没有答案