From 099f3c2b3a2674e321426c46f7e2ab3dc1aa6d92 Mon Sep 17 00:00:00 2001 From: Pablinux Date: Wed, 19 Nov 2025 10:45:15 -0500 Subject: [PATCH] Iniciando Git --- Readme.md | 359 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 Readme.md diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..972697d --- /dev/null +++ b/Readme.md @@ -0,0 +1,359 @@ +# Reproductor de Video Hikvision DVR con SDK Nativo + +Aplicación Java para reproducir video en tiempo real desde DVRs/NVRs Hikvision utilizando el SDK oficial HCNetSDK. + +## 📋 Requisitos Previos + +### Software +- **Java JDK 11** o superior +- **Maven 3.6+** +- **Sistema Operativo**: Linux 64-bit (Ubuntu/Debian recomendado) +- **Hikvision SDK**: EN-HCNetSDKV6.1.9.4_build20220412_linux64.zip + +### Hardware +- DVR/NVR Hikvision conectado a la red +- Acceso a las credenciales del dispositivo + +## 🚀 Instalación + +### Paso 1: Instalar Dependencias del Sistema + +```bash +# Ubuntu/Debian +sudo apt-get update +sudo apt-get install -y \ + default-jdk \ + maven \ + libssl-dev \ + libstdc++6 \ + libx11-6 \ + libxext6 \ + libxrender1 \ + libxtst6 \ + libxi6 + +# Fedora/RHEL/CentOS +sudo yum install -y \ + java-11-openjdk-devel \ + maven \ + openssl-devel \ + libstdc++ \ + libX11 \ + libXext \ + libXrender \ + libXtst \ + libXi +``` + +### Paso 2: Descomprimir el SDK de Hikvision + +```bash +unzip EN-HCNetSDKV6.1.9.4_build20220412_linux64.zip -d sdk_temp +``` + +### Paso 3: Crear Carpeta de Librerías + +```bash +mkdir -p lib +``` + +### Paso 4: Copiar Librerías Nativas + +```bash +# Copiar todas las librerías .so necesarias +cp sdk_temp/lib/*.so lib/ + +# Verificar que se copiaron correctamente +ls -la lib/ +``` + +Deberías ver archivos como: +- `libhcnetsdk.so` +- `libHCCore.so` +- `libHCNetSDKCom.so` +- `libPlayCtrl.so` +- `libssl.so.1.1` +- `libcrypto.so.1.1` +- Otros archivos `.so` + +### Paso 5: Compilar el Proyecto + +```bash +mvn clean install +``` + +## ⚙️ Configuración + +### Configurar Datos del DVR + +Edita el archivo `src/main/java/com/telcotronics/hikvision/player/HikvisionPlayer.java`: + +```java +// Variables de configuración +private String dvrIP = "192.168.1.100"; // IP del DVR +private int dvrPort = 8000; // Puerto del SDK (NO RTSP) +private String username = "admin"; // Usuario del DVR +private String password = "tu_password"; // Contraseña del DVR +private int channel = 1; // Número de canal (1, 2, 3, etc.) +``` + +### Verificar Configuración en el DVR + +1. Accede a la interfaz web del DVR: `http://IP_DEL_DVR` +2. Ve a **Configuration → Network → Advanced Settings** +3. Verifica que **SDK Port** esté habilitado en el puerto **8000** +4. Anota el número de canal que deseas visualizar + +## 🎮 Ejecución + +### Método 1: Script de Ejecución (Recomendado) + +Crea un archivo `run.sh`: + +```bash +#!/bin/bash +export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH +mvn exec:java -Dexec.mainClass="com.telcotronics.hikvision.player.HikvisionPlayer" +``` + +Dale permisos y ejecuta: + +```bash +chmod +x run.sh +./run.sh +``` + +### Método 2: Ejecutar con Maven Directamente + +```bash +export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH +mvn exec:java -Dexec.mainClass="com.telcotronics.hikvision.player.HikvisionPlayer" +``` + +### Método 3: Generar JAR Ejecutable + +```bash +mvn clean package +export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH +java -jar target/hikvision-player-1.0-SNAPSHOT.jar +``` + +## 📖 Ejemplo de Uso Básico + +### Código Mínimo para Integrar en tu Panel + +```java +// Inicializar SDK +HCNetSDK sdk = HCNetSDK.INSTANCE; +sdk.NET_DVR_Init(); + +// Conectar al DVR +NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30(); +NativeLong userID = sdk.NET_DVR_Login_V30("192.168.1.100", 8000, "admin", "password", deviceInfo); + +// Configurar preview +NET_DVR_PREVIEWINFO previewInfo = new NET_DVR_PREVIEWINFO(); +previewInfo.lChannel = new NativeLong(1); // Canal 1 +previewInfo.hPlayWnd = Native.getComponentPointer(tuCanvas); // Tu Canvas Swing +previewInfo.byProtoType = 0; // TCP + +// Iniciar reproducción +NativeLong realHandle = sdk.NET_DVR_RealPlay_V40(userID, previewInfo, null, null); + +// Detener reproducción +sdk.NET_DVR_StopRealPlay(realHandle); + +// Desconectar +sdk.NET_DVR_Logout(userID); +sdk.NET_DVR_Cleanup(); +``` + +## 🐛 Solución de Problemas + +### Error: "libhcnetsdk.so: cannot open shared object file" + +**Solución**: +```bash +export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH +# O agrega la ruta permanentemente +echo 'export LD_LIBRARY_PATH=/ruta/completa/al/proyecto/lib:$LD_LIBRARY_PATH' >> ~/.bashrc +source ~/.bashrc +``` + +### Error: "UnsatisfiedLinkError: libssl.so.1.1" + +**Solución en Ubuntu 22.04+** (que usa OpenSSL 3): +```bash +# Descargar OpenSSL 1.1 compatible +wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb +sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb +``` + +O copia las librerías del SDK directamente: +```bash +cp sdk_temp/lib/libssl.so.1.1 lib/ +cp sdk_temp/lib/libcrypto.so.1.1 lib/ +``` + +### Error: "Error al conectar al DVR. Código: 1" + +**Posibles causas**: +- ✗ Usuario o contraseña incorrectos +- ✗ DVR no accesible en la red +- ✗ Puerto 8000 bloqueado por firewall + +**Solución**: +```bash +# Verifica conectividad +ping IP_DEL_DVR + +# Verifica que el puerto esté abierto +telnet IP_DEL_DVR 8000 +``` + +### Error: "Error al iniciar reproducción. Código: 7" + +**Causa**: Canal no disponible o número de canal incorrecto + +**Solución**: Verifica en la interfaz web del DVR qué canales están activos + +### Error de Código 23 + +**Causa**: El DVR alcanzó el límite máximo de conexiones simultáneas + +**Solución**: Desconecta otras sesiones activas del DVR + +### Video no se muestra (pantalla negra) + +**Soluciones**: +1. Verifica que el canal tenga una cámara conectada +2. Cambia el canal: `previewInfo.lChannel = new NativeLong(2);` +3. Intenta con substream: + ```java + previewInfo.lLinkMode = new NativeLong(1); // 0=Main, 1=Sub + ``` + +### Error: "Cannot find AWT libraries" + +**Solución**: +```bash +# Ubuntu/Debian +sudo apt-get install libxrender1 libxtst6 libxi6 + +# Si usas JDK sin cabecera gráfica, instala el completo +sudo apt-get install default-jdk +``` + +## 📊 Códigos de Error Comunes + +| Código | Descripción | Solución | +|--------|-------------|----------| +| 1 | Usuario/contraseña incorrectos | Verifica credenciales | +| 3 | Tiempo de espera agotado | Verifica conectividad de red | +| 7 | Canal no disponible | Verifica número de canal | +| 23 | Máximo de conexiones alcanzado | Cierra otras sesiones | +| 26 | Versión SDK incompatible | Actualiza el SDK | +| 29 | El dispositivo está ocupado | Espera y reintenta | + +## 📁 Estructura del Proyecto + +``` +. +├── EN-HCNetSDKV6.1.9.4_build20220412_linux64.zip # SDK descargado +├── lib/ # Librerías nativas .so +│ ├── libhcnetsdk.so +│ ├── libHCCore.so +│ ├── libssl.so.1.1 +│ ├── libcrypto.so.1.1 +│ └── ... +├── pom.xml # Configuración Maven +├── run.sh # Script de ejecución +├── README.md # Este archivo +└── src/ + └── main/ + └── java/ + └── com/ + └── telcotronics/ + └── hikvision/ + └── player/ + └── [TU_PANEL_AQUI].java +``` + +## 🔧 Configuración Avanzada + +### Cambiar a Substream (menor calidad, menor ancho de banda) + +```java +previewInfo.lLinkMode = new NativeLong(1); // 0=Main stream, 1=Sub stream +``` + +### Usar Protocolo UDP en lugar de TCP + +```java +previewInfo.byProtoType = 1; // 0=TCP, 1=UDP +``` + +### Aumentar Buffer de Visualización + +```java +previewInfo.dwDisplayBufNum = new NativeLong(5); // 1-10 frames +``` + +## 📦 Dependencias Maven Necesarias + +El `pom.xml` debe incluir: + +```xml + + + + net.java.dev.jna + jna + 5.13.0 + + + + net.java.dev.jna + jna-platform + 5.13.0 + + +``` + +## 📝 Notas Importantes + +1. **Puerto SDK vs RTSP**: + - SDK usa puerto **8000** (configurable en DVR) + - RTSP usa puerto **554** + +2. **Rendimiento**: El SDK nativo es más eficiente que RTSP para aplicaciones Java + +3. **Compatibilidad**: Diseñado para DVRs/NVRs Hikvision con SDK v6.x + +4. **Limitaciones**: + - Solo Linux 64-bit + - Máximo 16 conexiones simultáneas por DVR (depende del modelo) + - Requiere OpenSSL 1.1.x + +5. **Seguridad**: + - Nunca incluyas credenciales en el código fuente + - Usa archivos de configuración externos (.properties, .env) + - Agrega archivos de configuración a `.gitignore` + +## 📚 Recursos Adicionales + +- [Portal de Soporte Hikvision](https://www.hikvision.com/en/support/) +- [Documentación HCNetSDK](https://www.hikvision.com/en/support/download/sdk/) +- [JNA Documentation](https://github.com/java-native-access/jna) + +## 🤝 Contribuciones + +Si encuentras errores o mejoras, reporta los issues o envía pull requests. + +## 📄 Licencia + +Este proyecto utiliza el SDK de Hikvision que está sujeto a sus propios términos de licencia. + +--- + +**¿Necesitas ayuda?** Revisa la sección de [Solución de Problemas](#-solución-de-problemas) o verifica los logs de la aplicació