Visual C++ .NET - Desarrollo visual C++ SDK fabricante de cámaras

 
Vista:
sin imagen de perfil

Desarrollo visual C++ SDK fabricante de cámaras

Publicado por Rubén (2 intervenciones) el 22/12/2016 17:41:38
Estoy intentando meterme en el mundo de los SDK de la mano de un proveedor de cámaras y grabadores (HIKVISION), el SDK esta en C++ y se compone de lo siguiente:

1- Una demo de un software cliente para las cámara y grabadores.
2- Manual del SDK.
3- Librerías a incluir en el proyecto.
4- Ejemplo del software cliente ya compilado.

El caso es que no estoy muy lúcido con Visual C++ (Me manejo en C#) y me preguntaba si alguien puede echarme una manita (NO al cuello) para tener un pequeño ejemplo de un “preview” (Conectar a una cámara). Para que os hagáis una idea, en el manual del SDK aparecen ejemplos de cada funcionalidad (Os dejo el SDK por si queréis echarle un vistazo rápido https://we.tl/xi5gvhkYWZ), me bastaría con ver o saber cómo pasar este código a visual y poder conectar y visualizar una cámara en una ventana.

La funcionalidad de preview en el SDK es la siguiente (Mediante un ejemplo):

#include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "HCNetSDK.h"
#include <time.h>
using namespace std;

void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
{
char tempbuf[256] = {0};
switch(dwType)
{
case EXCEPTION_RECONNECT: //reconnect when preview
printf("----------reconnect--------%d\n", time(NULL));
break;
default:
break;
}
}

void main() {

//---------------------------------------
// Get the window handle of the console
HMODULE hKernel32 = GetModuleHandle("kernel32");
GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

//---------------------------------------
//Initialize SDK
NET_DVR_Init();
//Set connect time and reconnect time
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);

//---------------------------------------
//Login device
LONG lUserID;
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo);
if (lUserID < 0)
{
printf("Login error, %d\n", NET_DVR_GetLastError());
NET_DVR_Cleanup();
return;
}

//---------------------------------------
//Set exception callback function
NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);

//---------------------------------------
//Start preview and set to callback stream data
LONG lRealPlayHandle;
HWND hWnd = GetConsoleWindow(); //Get window handle
NET_DVR_PREVIEWINFO struPlayInfo = {0};
struPlayInfo .hPlayWnd = hWnd; //If need to decode, please set it valid. If want to get stream data only, it can be set to NULL
struPlayInfo .lChannel = 1; //Preview channel NO.
struPlayInfo .dwStreamType = 0; //0-main stream, 1-sub stream, 2-stream3, 3-stream4.
struPlayInfo.dwLinkMode = 0; //0-TCP mode, 1-UDP mode, 2-Multi-play mode, 3-RTP mode, 4-RTP/RTSP, 5-RTSP/HTTP

lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);
if (lRealPlayHandle < 0)
{
printf("NET_DVR_RealPlay_V40 error\n");
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
return;
}

//---------------------------------------
//Close preview
NET_DVR_StopRealPlay(lRealPlayHandle);
//Logout
NET_DVR_Logout(lUserID);
//Release SDK resource
NET_DVR_Cleanup();

return;
}



Para acceder a los equipos es necesario IP, usuario, contraseña y puerto.

lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo);


He llegado a probar copiando el código de ejemplo en un nuevo proyecto de C++ en Visual 2015 vacío (.cpp), después agregar las 4 librerías (La interesante para el preview es HCNetSDk.h) pero no salgo de ese punto... al compilar genera errores etc etc.

A ver si podéis echarme una mano chic@s.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Desarrollo visual C++ SDK fabricante de cámaras

Publicado por Nacho (7 intervenciones) el 23/12/2016 10:01:34
Si lo que quieres hacer es usar esa cámara en c# lo que tienes que hacer es incluir la dll, definir las funciones en c# y llamarlas. Si ese ejemplo en c++ funciona es hacer lo mismo en c#.

lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);

esa es la función que echa a andar la cámara.

definida ahí

NET_DVR_API LONG __stdcall NET_DVR_RealPlay_V40(LONG lUserID, LPNET_DVR_PREVIEWINFO lpPreviewInfo, REALDATACALLBACK fRealDataCallBack_V30 = NULL, void* pUser = NULL);

así que es definir esa función en c#, con su dllimport, su convención de llamada (stdcall), definir la estructura que usa (LPNET_DVR_PREVIEWINFO), la función callback (REALDATACALLBACK), si quieres usarla, con los que use esa función, y llamarla desde c#.

Y así con todas las demás del ejemplo de c++. Muy diver.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Desarrollo visual C++ SDK fabricante de cámaras

Publicado por Rubén (2 intervenciones) el 23/12/2016 11:40:03
Gracias Nacho! pero lo que necesito (Por ahora) es hacerlo funcionar en C++.

¿Cómo podría echarlo a andar en Visual C++? Esa es mi pregunta, ya que no sé como hacer una ventana gráfica para C++ en Visual 2015 en la que se muestre la cámara indicada.

¿El código que muestro, tal cual, debe funcionar si la cámara con los credenciales "192.0.0.64", 8000, "admin", "12345" son correctos, cierto?.

Perdona la ignorancia en cosas aparentemente sencillas, pero soy muy novato.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Desarrollo visual C++ SDK fabricante de cámaras

Publicado por Nacho (7 intervenciones) el 23/12/2016 22:31:35
Estando en un foro de .net y hablando tanto de c# creí que querías hacerlo en c#.

Y además, en c++ no hace falta que lo hagas, ya está hecho. Coge el archivo sln, lo abres con el visual studio y ves lo que hace. Prueba a cambiar o quitar cosas a ver si vas entendiendo de qué va el asunto.

Yo llevo 30 años programando, y 29 diciendo que esa no es manera de hacer las cosas. Cualquier cosa que quieras empezar a hacer tienes que empezarla por el principio, y usar ese sdk no tiene nada de principio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar