Iniciando Git
This commit is contained in:
359
Readme.md
Normal file
359
Readme.md
Normal file
@@ -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
|
||||
<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
|
||||
|
||||
- [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ó
|
||||
Reference in New Issue
Block a user