我有一个服务器和一个客户端程序,可以完美地显示实时流媒体,但是我想将我的客户端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;
}