Saltar a contenido

Advanced

Aceleración por hardware

  • Dispatcharr actualmente no admite aceleración por hardware de forma directa, pero puedes usar aceleración por hardware con custom ffmpeg stream profiles.
  • Esto requiere mapear tu hardware al contenedor y configurar un custom ffmpeg stream profile.

Mapear hardware

Ejemplo
services:
  dispatcharr:
    # build:
    #   context: .
    #   dockerfile: Dockerfile
    image: ghcr.io/dispatcharr/dispatcharr:latest
    container_name: dispatcharr
    ports:
      - 9191:9191
    volumes:
      - dispatcharr_data:/data
    environment:
      - DISPATCHARR_ENV=aio
      - REDIS_HOST=localhost
      - CELERY_BROKER_URL=redis://localhost:6379/0
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
volumes:
  dispatcharr_data:
  • Agrega una sección devices a tu docker-compose.yml
Ejemplo
services:
  dispatcharr:
    # build:
    #   context: .
    #   dockerfile: Dockerfile
    image: ghcr.io/dispatcharr/dispatcharr:latest
    container_name: dispatcharr
    ports:
      - 9191:9191
    volumes:
      - dispatcharr_data:/data
    environment:
      - DISPATCHARR_ENV=aio
      - REDIS_HOST=localhost
      - CELERY_BROKER_URL=redis://localhost:6379/0
    devices:
      - /dev/dri:/dev/dri

volumes:
  dispatcharr_data:
  • Instala el plugin NVIDIA Driver Package desde community apps si aún no está instalado
  • Edita el contenedor Docker de Dispatcharr en Unraid
    • Activa Advanced View
    • Ve a Extra Parameters
      • Agrega --runtime=nvidia
    • Baja y haz clic en "Add another Path, Port, Variable, Label or Device"
      • Config Type: Variable
      • Name: NVIDIA_VISIBLE_DEVICES
      • Key: NVIDIA_VISIBLE_DEVICES
      • Value: all
    • Haz clic en Save
    • De nuevo haz clic en "Add another Path, Port, Variable, Label or Device"
      • Config Type: Variable
      • Name: NVIDIA_DRIVER_CAPABILITIES
      • Key: NVIDIA_DRIVER_CAPABILITIES
      • Value: all
    • Haz clic en Save
  • Edita el contenedor Docker de Dispatcharr en Unraid
  • Baja y haz clic en "Add another Path, Port, Variable, Label or Device"
    • Config Type: Device
    • Name: /dev/dri
    • Key: /dev/dri
    • Description: Intel GPU
  • Haz clic en Save

Custom Stream Profiles

  • Abre Dispatcharr
  • Ve a Settings > Add Stream Profile

    • Dale el nombre que prefieras
    • Command ffmpeg
    • Parameters variará según tu tipo de hardware y tus necesidades de streaming
    • Visita nuestro discord para ver más parámetros ffmpeg enviados por usuarios

    Ejemplo

    • Parameters: -user_agent {userAgent} -hwaccel cuda -i {streamUrl} -c:v h264_nvenc -c:a copy -f mpegts pipe:1

    Ejemplo

    • Parameters: -user_agent {userAgent} -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device /dev/dri/renderD128 -i {streamUrl} -c:a aac -c:v h264_vaapi -f mpegts pipe:1

    Ejemplo

    • Parameters: -hwaccel qsv -user_agent {userAgent} -i {streamUrl} -c:v h264_qsv -c:a aac -f mpegts pipe:1

Configuración de prioridad de procesos

Variables de entorno opcionales para ajustar la prioridad de varias tareas. Valores más bajos = mayor prioridad. Rango: -20 (más alto) a 19 (más bajo). Los valores negativos requieren cap_add: SYS_NICE

  • UWSGI_NICE_LEVEL - Define prioridad para uWSGI, FFmpeg y streaming. La prioridad predeterminada es 0; se recomienda -5 para alta prioridad
  • CELERY_NICE_LEVEL - Define prioridad para Celery, EPG y otras tareas en background. La prioridad predeterminada es 5

Ejemplo

    environment:
      - UWSGI_NICE_LEVEL=-5
      - CELERY_NICE_LEVEL=5

    cap_add:
      - SYS_NICE

Reverse Proxies

Nginx

Ejemplo de configuración HTTPS (streams solo vía https, WebUI vía red local y Wireguard)

Ejemplo (haz clic para ver)
# Dispatcharr HTTPS DynuDNS
server {
    listen 443 ssl;
    server_name dispatcharr.your.domain.com;  #Adjust for your domain

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location ~ ^(/proxy/(vod|ts)/(stream|movie|episode)/.*|/player_api\.php|/xmltv\.php|/api/channels/logos/.*/cache|/api/vod/vodlogos/.*/cache/?|/(live|movie|series)/[^/]+/.*|/[^/]+/[^/]+/[0-9]+(?:\.[^/.]+)?)$ {
        allow all;  # Allow everyone else
        proxy_pass http://dispatcharrserver:9191;  # Adjust for your server name or IP
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # CORS settings
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept';
    }

    location / {
        allow 10.0.0.0/22;  # Allow the local network, adjust for your network
        allow 10.1.0.0/24;  # Allow Wireguard, adjust for your network
        deny all;  # Deny everyone else
        proxy_pass http://dispatcharrserver:9191;  # Adjust for your server name or IP
        # WebSocket headers
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # CORS settings
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept';
    }
}  

Consejo

Incluso con un reverse proxy configurado correctamente, tu salida M3U puede estar disponible por internet. Sigue estas buenas prácticas para bloquear el acceso M3U estándar y permitirlo solo con un username y password específicos.

  1. Configura tu reverse proxy como se muestra en la documentación
  2. En Dispatcharr, ve a Settings > Network Access, y restringe M3U / EPG Endpoints únicamente a tu red local (ejemplo: 192.168.1.0/24)
  3. Crea un usuario con XC password en la página Users si aún no lo has hecho
  4. Usa el siguiente formato de enlace M3U para compartir con tus usuarios: https://hostname/get.php?username=XCUSERNAME&password=XCPASSWORD
  5. Y este formato para epg: https://hostname/xmltv.php?username=XCUSERNAME&password=XCPASSWORD

Pangolin

  • Crea tu recurso tal como lo harías con cualquier otro en Pangolin
  • Si alojas Dispatcharr en el mismo VPS (si usas un VPS) que Pangolin, asegúrate de configurarlo como recurso local y usa 172.XX.X.X como IP, luego ingresa el puerto. De lo contrario, configúralo normalmente
  • Si quieres habilitar el SSO de Pangolin para este recurso por seguridad, hazlo en la pestaña Authentication de tu nuevo recurso de Dispatcharr

Para permitir que Dispatcharr se conecte a clientes cuando está protegido detrás de Pangolin SSO u otro IdP que hayas agregado, necesitas crear Bypass Rules. Consulta abajo la lista de reglas requeridas. Una vez guardes estas reglas, la WebUI de Dispatcharr estará protegida detrás de tu SSO mientras que las apps y servicios podrán conectarse vía XC

  • La "Action" será Bypass Auth para todas
  • El "Match Type" será Path para todas
Reglas de bypass (haz clic para ver)
  • /player_api.php/*
  • /get.php/*
  • /xmltv.php/*
  • /*/*/*.ts
  • /proxy/ts/stream/*
  • /proxy/vod/episode/*
  • /proxy/vod/movie/*
  • /api/channels/logos/*/cache/
  • /live/*/*
  • /movie/*/*
  • /series/*/*

(Opcional para acceso por URL HDHR, M3U y/o EPG; no requerido si usas XC. Si usas HDHR, M3U o EPG, deberías restringirlo más en Settings > Network Access > M3U / EPG Endpoints). De lo contrario, tus enlaces HDHR, M3U y/o EPG serán accesibles públicamente por internet

  • /hdhr/*
  • /output/m3u/*
  • /output/epg/*
  • Si quieres configurar GeoBlock para algún recurso o todos, consulta la documentación oficial de Pangolin para orientación

  • Prueba tu nueva configuración navegando a Dispatcharr en una ventana incógnito o privada. Ahora deberías ver el dashboard de login de Pangolin al acceder a la WebUI sin autenticarte; tus clientes, sin embargo, seguirán pudiendo conectarse para permitir streaming


Nginx Proxy Manager

Sigue estos pasos para configurar acceso a Dispatcharr mediante Nginx Proxy Manager. Esta guía asume que Nginx Proxy Manager ya está configurado y tiene SSL certificates configurados. Configurar Nginx Proxy Manager y certificados queda fuera del alcance de esta guía. Puedes encontrar información de instalación en la guía de Nginx Proxy Manager y en este blog.

  • Esto se creó en la versión 2.14.0 de Nginx Proxy Manager. No se han probado otras versiones
  • El dominio está difuminado por privacidad. Puedes comprar un dominio o crear un dominio de uso local. Configurar un dominio queda fuera del alcance, pero hay muchas guías que lo cubren
  1. Configura Nginx Proxy Manager. Consulta el enlace anterior para instrucciones

  2. Crea una entrada DNS que resuelva el dominio de Dispatcharr a la IP LAN de Nginx Proxy Manager

    • Este paso depende del router que uses
    Captura de pantalla

    Add Proxy Host

  3. Crea un nuevo proxy host en Nginx Proxy Manager

    Captura de pantalla

    Add Proxy Host

  4. Ingresa el nombre de dominio creado en el paso 2

  5. Scheme: http

  6. Forward Hostname/IP: <IP address of Dispatcharr server>

  7. Forward port: 9191

  8. Selecciona Websockets Support

    Captura de pantalla

    Add Proxy Host

    Nota

    La configuración SSL personalizada agregada en el paso 14 también define Websocket support. Hemos probado con Websocket Support activado y desactivado y no hemos notado diferencia

  9. Selecciona SSL (en la pestaña superior bajo Edit Proxy Host)

  10. Elige tu SSL certificate

    • Crear SSL certs está fuera del alcance de esta guía. Consulta el enlace anterior para la documentación de instalación de Nginx Proxy Manager

    • Se recomienda configurar wildcard SSL certs para tu dominio. Si usas Cloudflare para tu dominio, consulta esta guía para instrucciones

  11. Selecciona Force SSL

    Captura de pantalla

    Add Proxy Host

  12. Selecciona la pestaña Details

  13. Selecciona el ícono de engrane para configuración Nginx personalizada

    Captura de pantalla

    Add Proxy Host

  14. Pega la configuración de ejemplo de abajo, asegurándote de cambiar los nombres de variables según sea necesario. Las variables están entre <> y en MAYÚSCULAS. Los valores a cambiar son la IP de Nginx Proxy Manager y la IP de Dispatcharr

    Ejemplo (haz clic para ver)
    # Dispatcharr HTTPS Nginx Proxy Manager
    location ~ ^(/proxy/(vod|ts)/(stream|movie|episode)/.*|/player_api\.php|/xmltv\.php|/api/channels/logos/.*/cache|/api/vod/vodlogos/.*/cache/?|/(live|movie|series)/[^/]+/.*|/[^/]+/[^/]+/[0-9]+(?:\.[^/.]+)?)$ {
        allow all;
        proxy_pass http://<DISPATCHARR IP ADDRESS>:9191;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type
    Accept';
    }
    
    # Restrict access.  In this instance all traffic to Dispatcharr flows through proxy.  You can add another allow block if you want to allow traffic not through the proxy.
    location / {
        allow <NPM IP ADDRESS>/32;
        deny all;
    
        proxy_pass http://<DISPATCHARR IP ADDRESS>:9191;
    
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type
    Accept';
    }
    
    Captura de pantalla

    Add Proxy Host

  15. Selecciona Save

  16. Verifica el acceso visitando el nombre DNS de Dispatcharr en el navegador. Verifica que el SSL certificate sea válido.

    Captura de pantalla

    Add Proxy Host

  17. Inicia sesión y disfruta.

    Captura de pantalla

    Add Proxy Host

    Add Proxy Host

    Nota

    Si apuntas Pangolin a Nginx Proxy Manager como recurso, puedes acceder a Dispatcharr mediante esto en lugar de crear una nueva entrada.


Connection Security

TLS cifra las conexiones entre Dispatcharr y servicios externos Redis/PostgreSQL en modular deployments. Esto evita que credenciales y datos se envíen en texto plano por la red.

Nota

Connection security solo está disponible en modular deployment mode. AIO mode usa servicios internos que no requieren cifrado.

Overview

Se admiten tres niveles de connection security:

Level What it does When to use
TLS Cifra el tráfico entre Dispatcharr y la base de datos Las conexiones cruzan un límite de red
TLS + Server Verification Cifra el tráfico y verifica la identidad del servidor usando un CA certificate Protección contra ataques man-in-the-middle
Mutual TLS (mTLS) Ambos lados se verifican mutuamente con certificates El servidor de base de datos requiere autenticación de cliente

Cada nivel se basa en el anterior. Puedes habilitar cifrado sin verificación, o verificación sin mutual TLS.

Certificate Volume Mount

Server verification y mutual TLS requieren que los archivos certificate sean accesibles dentro del contenedor. Si solo estás cifrando la conexión sin verificación, no se necesitan archivos certificate.

Monta un directorio que contenga tus certificates como volumen de solo lectura:

volumes:
  - ./data:/data
  - ./certs:/certs:ro  # TLS certificates

Monta el mismo volumen en los servicios web y celery.

Redis TLS

Variable Required Description
REDIS_SSL Yes Set to true to enable TLS
REDIS_SSL_VERIFY No Verify the server's identity (default: true). Set to false for self-signed certs without a CA
REDIS_SSL_CA_CERT No Path to the CA certificate used to verify the server
REDIS_SSL_CERT No Path to the client certificate (only if the server requires client authentication)
REDIS_SSL_KEY No Path to the client private key (only if the server requires client authentication)
Redis TLS — cifrado, sin verificación
environment:
  - REDIS_SSL=true
  - REDIS_SSL_VERIFY=false
Redis TLS — cifrado con server verification
environment:
  - REDIS_SSL=true
  - REDIS_SSL_VERIFY=true
  - REDIS_SSL_CA_CERT=/certs/redis/ca.crt
Redis mTLS — mutual authentication
environment:
  - REDIS_SSL=true
  - REDIS_SSL_VERIFY=true
  - REDIS_SSL_CA_CERT=/certs/redis/ca.crt
  - REDIS_SSL_CERT=/certs/redis/client.crt
  - REDIS_SSL_KEY=/certs/redis/client.key

PostgreSQL TLS

Variable Required Description
POSTGRES_SSL Yes Set to true to enable TLS
POSTGRES_SSL_MODE No How strictly to verify the server (default: verify-full). Options: verify-full, verify-ca, require
POSTGRES_SSL_CA_CERT No Path to the CA certificate used to verify the server
POSTGRES_SSL_CERT No Path to the client certificate (only if the server requires client authentication)
POSTGRES_SSL_KEY No Path to the client private key (only if the server requires client authentication)

Modos de verificación:

  • verify-full — verifica el server certificate y comprueba que el hostname coincida (más seguro, predeterminado)
  • verify-ca — verifica el server certificate pero no comprueba el hostname
  • require — cifra la conexión pero no verifica la identidad del servidor
PostgreSQL TLS — cifrado con full verification
environment:
  - POSTGRES_SSL=true
  - POSTGRES_SSL_MODE=verify-full
  - POSTGRES_SSL_CA_CERT=/certs/postgres/ca.crt
PostgreSQL TLS — cifrado, sin verificación
environment:
  - POSTGRES_SSL=true
  - POSTGRES_SSL_MODE=require
PostgreSQL mTLS — mutual authentication
environment:
  - POSTGRES_SSL=true
  - POSTGRES_SSL_MODE=verify-full
  - POSTGRES_SSL_CA_CERT=/certs/postgres/ca.crt
  - POSTGRES_SSL_CERT=/certs/postgres/client.crt
  - POSTGRES_SSL_KEY=/certs/postgres/client.key

Important Notes

  • Las environment variables de TLS deben coincidir entre los servicios web y celery
  • Las rutas de certificates se refieren a rutas dentro del contenedor, no del host
  • Dispatcharr valida las rutas de archivos certificate al iniciar y fallará con un mensaje de error claro si no encuentra un archivo
  • Si sobrescribes REDIS_URL o CELERY_BROKER_URL con un valor personalizado, el esquema de URL (redis:// vs rediss://) debe coincidir con la configuración REDIS_SSL. La mayoría de usuarios no necesita definir esto; Dispatcharr construye la URL automáticamente
  • El panel Connection Security en System Settings muestra el estado TLS actual de cada servicio