2025-11-19 10:45:15 -05:00
2025-11-19 10:45:15 -05:00

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

# 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

unzip EN-HCNetSDKV6.1.9.4_build20220412_linux64.zip -d sdk_temp

Paso 3: Crear Carpeta de Librerías

mkdir -p lib

Paso 4: Copiar Librerías Nativas

# 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

mvn clean install

⚙️ Configuración

Configurar Datos del DVR

Edita el archivo src/main/java/com/telcotronics/hikvision/player/HikvisionPlayer.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:

#!/bin/bash
export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
mvn exec:java -Dexec.mainClass="com.telcotronics.hikvision.player.HikvisionPlayer"

Dale permisos y ejecuta:

chmod +x run.sh
./run.sh

Método 2: Ejecutar con Maven Directamente

export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
mvn exec:java -Dexec.mainClass="com.telcotronics.hikvision.player.HikvisionPlayer"

Método 3: Generar JAR Ejecutable

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

// 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:

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):

# 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:

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:

# 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:
    previewInfo.lLinkMode = new NativeLong(1); // 0=Main, 1=Sub
    

Error: "Cannot find AWT libraries"

Solución:

# 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)

previewInfo.lLinkMode = new NativeLong(1); // 0=Main stream, 1=Sub stream

Usar Protocolo UDP en lugar de TCP

previewInfo.byProtoType = 1; // 0=TCP, 1=UDP

Aumentar Buffer de Visualización

previewInfo.dwDisplayBufNum = new NativeLong(5); // 1-10 frames

📦 Dependencias Maven Necesarias

El pom.xml debe incluir:

<dependencies>
    <!-- JNA para llamadas nativas -->
    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>5.13.0</version>
    </dependency>
    
    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna-platform</artifactId>
        <version>5.13.0</version>
    </dependency>
</dependencies>

📝 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

🤝 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 o verifica los logs de la aplicació

Description
reproductor de camaras de hikvision
Readme 180 MiB
Languages
C++ 50.2%
Java 38.9%
C 7.7%
Makefile 2.5%
QMake 0.7%