- Introducción =====
Recientemente, mi empresa requería integrar cámaras para transmisión en tiempo real. Al no tener mucha experiencia en la transmisión de video streams, investigué soluciones disponibles. La mayoría de las propuestas utilizaban el framework de medios de streaming (wvp-pro + ZLMediaKit). Con una mentalidad de aprendizaje, revisé varios artículos y encontré una referencia comparativa de rendimiento "Resumen de diversos servicios de streaming". Allí se mencionaba que ABLMediaServer tenía un uso de CPU relativamente bajo, aunque un consumo de memoria más elevado, lo cual podría ser ideal para nuestro proyecto. Por ello, decidí explorar esta opción. Es curioso que a pesar de la gran cantidad de artículos que elogian el rendimiento de ABLMediaServer, existe muy poca información sobre su implementación, configuración y aspectos técnicos. Pasé un día desarrollando una solución basada en Docker para ABLMediaServer y decidí documentar el proceso.
Es importante destacar que ABLMediaServer puede integrarse directamente con wvp-pro (wvp-GB28181-pro), siguiendo el mismo enfoque que la combinación wvp-pro + ZLMediaKit, lo que lo hace compatible con nuestro sistema existente.
- Descarga del paquete ========
La versión más reciente de ABLMediaServer hasta la fecha es la 2025-10-14, disponible en: https://github.com/zhichao281/ABLMediaServer/releases
2.1 Descarga del archivo
2.2 Extracción del archivo
# Crear directorio
cd /home && mkdir webrtc
# Extraer archivo
unzip Linux-webrtc.zip -d /home/webrtc
# Verificar archivos extraídos
cd /home/webrtc && ls
2.3 Modificación de archivos
El archivo de inicio proporcionado oficialmente (start.sh) presenta algunos problemas que requieren corrección
#!/bin/bash
# Obtener la ruta del script actual
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Establecer LD_LIBRARY_PATH en la ruta actual
export LD_LIBRARY_PATH="$SCRIPT_DIR"
# Agregar permisos de lectura y escritura al directorio y sus subdirectorios
chmod -R 777 "$SCRIPT_DIR"
# Cambiar al directorio donde se encuentra el ejecutable del servidor ABL
cd "$SCRIPT_DIR"
# Establecer permisos para ABLMediaServer
chmod 777 ABLMediaServer
# Ejecutar el programa principal ABLMediaServer
setsid ./ABLMediaServer &
# Obtener ID del proceso
ABL_PID=$!
echo "Servidor ABLMediaServer iniciado correctamente, PID: $ABL_PID"
# Mantener el contenedor en ejecución esperando al proceso
wait $ABL_PID
- Creación de la imagen Docker =======
Aquí no seguí el archivo docker-compose.yml proporcionado oficialmente, ya que planeé ejecutar wvp-pro descargando el código directamente sin implementación a través de contenedores.
3.1 Descarga de la imagen Ubuntu 22.04
Descargar la imagen de docker Ubuntu:22.04
docker pull ubuntu:22.04
3.2 Creación de la imagen
Crear archivo Dockerfile para construir la imagen
FROM ubuntu:22.04
LABEL maintainer="contacto@empresa.com"
LABEL description="Servidor de Medios ABLMediaServer - WebRTC"
LABEL version="1.0.0"
# Crear usuario no root
RUN groupadd -r servidor_medios && useradd -r -g servidor_medios usuario_servidor
# Crear directorio de la aplicación
RUN mkdir -p /app
# Copiar archivos de la aplicación
COPY ABLMediaServer /app/
COPY *.so.* /app/
COPY *.so /app/
COPY *.sh /app/
COPY *.ini /app/
COPY cacert.pem /app/
COPY privkey.pem /app/
COPY server.pem /app/
COPY simhei.ttf /app/
# Establecer permisos
RUN chmod +x /app/start.sh /app/ABLMediaServer \
&& chown -R usuario_servidor:servidor_medios /app
# Establecer variable de entorno para la ruta de las librerías
ENV LD_LIBRARY_PATH=/app
WORKDIR /app
# Formato correcto para el punto de entrada
CMD ["./start.sh"]
Iniciar la construcción de la imagen con el siguiente comando
# Construir la imagen, no olvidar el punto final
docker build -t servidor_medios:2025.11.09 .
- Construcción del contenedor =======
Aquí se utiliza una configuración basada en la documentación oficial para iniciar el servicio. Para más detalles, se puede consultar el docker-compose.yml oficial
docker run -d \
--name servidor_medios \
--restart always \
--ulimit nproc=65535:65535 \
--ulimit nofile=65535:65535 \
-p 5088:5088/tcp \
-p 6088:6088/tcp \
-p 7088:7088/tcp \
-p 9088:9088/tcp \
-p 1554:1554/tcp \
-p 1935:1935/tcp \
-p 10000-10050:10000-10050/tcp \
-p 10000-10050:10000-10050/udp \
-e TZ=Asia/Shanghai \
-e SET_CONTAINER_TIMEZONE=true \
-e CONTAINER_TIMEZONE=Asia/Shanghai \
servidor_medios:2025.11.09
name: Nombre personalizado del contenedor
restart always: Configura el inicio automático con el sistema
--ulimit nproc=65535:65535 :# Establece el límite de procesos
--ulimit nofile=65535:65535 :# Establece el límite de descriptores de archivo
-p 7088:7088/tcp : Puerto para la API HTTP
-p 5088:5088/tcp : Puerto para HTTP-MP4, utilizado al obtener streams (nota: si el puerto es impar, como 5089, el acceso cambia a https; si es par, como 5088, el acceso es http)
-p 6088:6088/tcp : Puerto para WS-FLV, utilizado al obtener streams (nota: si el puerto es impar, como 6089, el acceso cambia a https; si es par, como 6088, el acceso es http)
-p 9088:9088/tcp : Puerto para reproducción de HLS (nota: si el puerto es impar, como 9089, el acceso cambia a https; si es par, como 9088, el acceso es http)
-p 1554:1554/tcp : Puerto para RTSP, utilizado para enviar y recibir streams (nota: si el puerto es impar, como 1553, el acceso cambia a https; si es par, como 1554, el acceso es http)
-p 1935:1935/tcp : Puerto para RTMP, utilizado para enviar y recibir streams (nota: si el puerto es impar, como 1935, el acceso cambia a https; si es par, como 1934, el acceso es http)
Si el servicio funciona correctamente, la implementación ha tenido éxito.
Para información sobre la integración de wvp-pro + ABLMediaServer, visite: https://www.cnblogs.com/nhdlb/p/19206670