Call-Informatique
Call-Informatique
Le média tech
Kodi media center : configuration avancée et automatisation
High-TechGuides10 min de lecture

Kodi media center : configuration avancée et automatisation

Configurez Kodi en profondeur : base de données centralisée, transcodage, DLNA, accès distant sécurisé et scripts d'automatisation.

Kodi media center : configuration avancée et automatisation

Ce guide suppose que Kodi 21.x (Omega) est déjà installé. On va couvrir la configuration avancée : base de données MySQL partagée entre plusieurs instances Kodi, accès distant sécurisé, intégration DLNA/UPnP, gestion fine des sources réseau, extensions de scraping avancées, et automatisation avec des scripts.

Pré-requis

  • Kodi 21.3 Omega installé et fonctionnel
  • Accès SSH ou terminal sur la machine hôte
  • Connaissances de base en réseau (IP, ports, pare-feu)
  • Un NAS ou serveur de fichiers pour le stockage centralisé (recommandé)
  • MariaDB/MySQL si vous voulez une base partagée multi-instances

1 — Installation headless sur un serveur Linux

Sur un serveur Ubuntu/Debian sans interface graphique, Kodi peut tourner en mode headless via son API JSON-RPC.

bash
## Installer Kodi depuis le PPA officiel
sudo add-apt-repository ppa:team-xbmc/ppa
sudo apt update
sudo apt install kodi kodi-headless

## Créer un utilisateur dédié
sudo useradd -r -m -d /var/lib/kodi -s /usr/sbin/nologin kodi

## Créer le service systemd
sudo tee /etc/systemd/system/kodi-headless.service << 'EOF'
[Unit]
Description=Kodi Media Center (headless)
After=network-online.target
Wants=network-online.target

[Service]
User=kodi
Group=kodi
Type=simple
ExecStart=/usr/bin/kodi-standalone
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

## Activer et démarrer
sudo systemctl daemon-reload
sudo systemctl enable —now kodi-headless

2 — Base de données MySQL/MariaDB centralisée

Si vous avez plusieurs appareils avec Kodi (salon, chambre, bureau), une base centralisée permet de partager la bibliothèque et la progression de lecture entre toutes les instances.

Installer MariaDB

bash
## Sur le serveur qui hébergera la base de données
sudo apt install mariadb-server
sudo mysql_secure_installation

Répondez "Y" à toutes les questions de sécurisation.

Créer l'utilisateur Kodi

bash
sudo mysql -u root -p
sql
— Créer l'utilisateur avec accès réseau
CREATE USER 'kodi'@'%' IDENTIFIED BY 'motdepasse_solide_ici';

— Kodi crée ses propres bases, il faut des droits larges
GRANT ALL ON *.* TO 'kodi'@'%';
FLUSH PRIVILEGES;
EXIT;

Ouvrir MariaDB au réseau local

bash
## Éditer la configuration MariaDB
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Modifiez la ligne bind-address :

ini
## Remplacer 127.0.0.1 par l'IP du serveur ou 0.0.0.0
bind-address = 0.0.0.0
bash
sudo systemctl restart mariadb

Configurer chaque instance Kodi

Créez ou éditez le fichier advancedsettings.xml dans le dossier userdata de Kodi :

  • Linux : ~/.kodi/userdata/advancedsettings.xml
  • Windows : %APPDATA%\Kodi\userdata\advancedsettings.xml
  • macOS : ~/Library/Application Support/Kodi/userdata/advancedsettings.xml
  • LibreELEC : /storage/.kodi/userdata/advancedsettings.xml
xml
<advancedsettings>
  <videodatabase>
    <type>mysql</type>
    <host>192.168.1.100</host>
    <port>3306</port>
    <user>kodi</user>
    <pass>motdepasse_solide_ici</pass>
  </videodatabase>
  <musicdatabase>
    <type>mysql</type>
    <host>192.168.1.100</host>
    <port>3306</port>
    <user>kodi</user>
    <pass>motdepasse_solide_ici</pass>
  </musicdatabase>
  <videolibrary>
    <importwatchedstate>true</importwatchedstate>
    <importresumepoint>true</importresumepoint>
  </videolibrary>
</advancedsettings>

Remplacez 192.168.1.100 par l'IP de votre serveur MariaDB.

Au prochain démarrage de Kodi, la base sera créée automatiquement sur le serveur MySQL. Toutes les instances pointant vers le même serveur partageront la même bibliothèque.

Point critique : toutes les instances doivent utiliser exactement les mêmes chemins réseau (SMB ou NFS) pour les sources. Sinon les fichiers seront dupliqués dans la base.

3 — Sources réseau optimisées

NFS (recommandé pour la performance)

NFS offre des débits supérieurs à SMB, surtout pour le streaming 4K.

Sur le serveur NFS :

bash
sudo apt install nfs-kernel-server

## Créer les exports
sudo tee -a /etc/exports << 'EOF'
/srv/media/films   192.168.1.0/24(ro,sync,no_subtree_check,no_root_squash)
/srv/media/series  192.168.1.0/24(ro,sync,no_subtree_check,no_root_squash)
/srv/media/musique 192.168.1.0/24(ro,sync,no_subtree_check,no_root_squash)
EOF

sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

Dans Kodi, ajoutez la source avec le protocole NFS : nfs://192.168.1.100/srv/media/films

SMB (compatibilité Windows)

Si vos fichiers sont sur un partage Windows ou un NAS Synology/QNAP :

terminal
smb://192.168.1.100/media/films

Pour de meilleures performances SMB, ajoutez dans advancedsettings.xml :

xml
<advancedsettings>
  <cache>
    <buffermode>1</buffermode>
    <memorysize>104857600</memorysize>
    <readfactor>4</readfactor>
  </cache>
</advancedsettings>

Ca alloue 100 Mo de buffer mémoire et lit en avance 4x la vitesse de lecture. Utile pour le 4K sur un réseau un peu lent.

4 — API JSON-RPC et contrôle distant

Kodi expose une API JSON-RPC complète. Activez-la dans Paramètres > Services > Contrôle :

  • Autoriser le contrôle distant via HTTP : activé
  • Port : 8080
  • Nom d'utilisateur : kodi
  • Mot de passe : un mot de passe fort

Tester l'API

bash
## Vérifier que Kodi répond
curl -s -u kodi:motdepasse \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"JSONRPC.Ping","id":1}' \
  http://192.168.1.50:8080/jsonrpc

## Réponse attendue : {"id":1,"jsonrpc":"2.0","result":"pong"}

Exemples d'utilisation

bash
## Lister les films récemment ajoutés
curl -s -u kodi:motdepasse \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"VideoLibrary.GetRecentlyAddedMovies","params":{"limits":{"end":5},"properties":["title","year","rating"]},"id":1}' \
  http://192.168.1.50:8080/jsonrpc | jq .

## Lancer la lecture d'un fichier
curl -s -u kodi:motdepasse \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"/srv/media/films/Inception.mkv"}},"id":1}' \
  http://192.168.1.50:8080/jsonrpc

## Mettre en pause
curl -s -u kodi:motdepasse \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}' \
  http://192.168.1.50:8080/jsonrpc

5 — DLNA/UPnP : streamer vers d'autres appareils

Kodi peut agir comme serveur et client UPnP/DLNA.

Activation : Paramètres > Services > UPnP/DLNA

  • Partager les médiathèques vidéo et musique via UPnP : activé
  • Autoriser le contrôle de Kodi via UPnP : activé

Vos fichiers Kodi deviennent alors visibles depuis n'importe quel client DLNA du réseau (TV Samsung/LG, VLC, BubbleUPnP sur Android, etc.).

6 — Reverse proxy Nginx avec HTTPS

Pour accéder à l'interface web de Kodi depuis l'extérieur de manière sécurisée.

nginx
server {
    listen 443 ssl http2;
    server_name kodi.mondomaine.fr;

    ssl_certificate /etc/letsencrypt/live/kodi.mondomaine.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kodi.mondomaine.fr/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;

        # WebSocket pour les notifications temps réel
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
bash
## Obtenir le certificat SSL
sudo certbot —nginx -d kodi.mondomaine.fr

## Tester la config
sudo nginx -t
sudo systemctl reload nginx

7 — Hardening sécurité

Restreindre l'accès à l'API

Par défaut, l'API de Kodi n'a aucune restriction IP. Avec le pare-feu :

bash
## Autoriser l'API uniquement depuis le réseau local
sudo ufw allow from 192.168.1.0/24 to any port 8080 proto tcp comment 'Kodi JSON-RPC'

## Bloquer le port depuis l'extérieur (si pas déjà fait par défaut)
sudo ufw deny 8080/tcp

Mot de passe fort obligatoire

Jamais de "kodi" / "kodi" comme identifiants. Générez un mot de passe :

bash
openssl rand -base64 16
## Exemple de sortie : aB3xZ9qR7mK2wL5p

Désactiver Zeroconf si inutile

Zeroconf (Avahi/Bonjour) diffuse la présence de Kodi sur le réseau. Si vous n'en avez pas besoin :

Paramètres > Services > Général > Activer Zeroconf : désactivé

8 — Scripts d'automatisation

Script de mise à jour automatique de la bibliothèque

bash
#!/bin/bash
## update-kodi-library.sh
## Lance un scan de la bibliothèque vidéo via l'API

KODI_HOST="192.168.1.50"
KODI_PORT="8080"
KODI_USER="kodi"
KODI_PASS="votre_mot_de_passe"

## Scanner les nouveaux fichiers vidéo
curl -s -u "${KODI_USER}:${KODI_PASS}" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}' \
  "http://${KODI_HOST}:${KODI_PORT}/jsonrpc" > /dev/null

## Scanner la musique aussi
curl -s -u "${KODI_USER}:${KODI_PASS}" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"AudioLibrary.Scan","id":2}' \
  "http://${KODI_HOST}:${KODI_PORT}/jsonrpc" > /dev/null

echo "[$(date '+%Y-%m-%d %H:%M')] Scan de la bibliothèque lancé"
bash
chmod +x update-kodi-library.sh

## Lancer un scan toutes les 6 heures via cron
crontab -e
## Ajouter :
0 */6 * * * /home/user/update-kodi-library.sh >> /var/log/kodi-scan.log 2>&1

Script de nettoyage de la bibliothèque

bash
#!/bin/bash
## clean-kodi-library.sh
## Supprime les entrées dont les fichiers n'existent plus

KODI_HOST="192.168.1.50"
KODI_PORT="8080"
KODI_USER="kodi"
KODI_PASS="votre_mot_de_passe"

curl -s -u "${KODI_USER}:${KODI_PASS}" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","method":"VideoLibrary.Clean","params":{"showdialogs":false},"id":1}' \
  "http://${KODI_HOST}:${KODI_PORT}/jsonrpc" > /dev/null

echo "[$(date '+%Y-%m-%d %H:%M')] Nettoyage de la bibliothèque lancé"

Script de sauvegarde de la configuration

bash
#!/bin/bash
## backup-kodi.sh
## Sauvegarde le dossier userdata de Kodi

KODI_USERDATA="$HOME/.kodi/userdata"
BACKUP_DIR="/backup/kodi"
DATE=$(date '+%Y%m%d_%H%M')

mkdir -p "${BACKUP_DIR}"

tar czf "${BACKUP_DIR}/kodi-userdata-${DATE}.tar.gz" \
  -C "$(dirname ${KODI_USERDATA})" \
  "$(basename ${KODI_USERDATA})" \
  —exclude='Thumbnails' \
  —exclude='temp'

## Garder uniquement les 7 dernières sauvegardes
ls -t "${BACKUP_DIR}"/kodi-userdata-*.tar.gz | tail -n +8 | xargs -r rm

echo "[$(date '+%Y-%m-%d %H:%M')] Sauvegarde créée : kodi-userdata-${DATE}.tar.gz"

9 — Extensions avancées recommandées

  • Trakt : synchronise votre historique de lecture avec trakt.tv. Permet de tracker ce que vous avez vu/pas vu, même entre plusieurs appareils non reliés par MySQL
  • Artwork Beef : télécharge des artworks supplémentaires (logos, bannières, fanarts) pour enrichir la bibliothèque
  • Library Auto Update : programme des scans automatiques de la bibliothèque sans script externe
  • Watchdog : surveille les dossiers en temps réel et met à jour la bibliothèque dès qu'un fichier est ajouté ou supprimé

Installation depuis le dépôt officiel Kodi : Extensions > Télécharger > catégorie appropriée.

10 — Dépannage

Kodi ne trouve pas mes fichiers en NFS

Vérifiez que le service NFS est actif et les exports corrects :

bash
## Sur le serveur
sudo exportfs -v
## Doit lister vos dossiers partagés

## Depuis le client, tester le montage
sudo mount -t nfs 192.168.1.100:/srv/media/films /mnt/test
ls /mnt/test

Si erreur "access denied" : vérifiez que l'IP du client est dans la plage autorisée dans /etc/exports.

La base MySQL ne se connecte pas

bash
## Tester la connexion depuis le client Kodi
mysql -u kodi -p -h 192.168.1.100

## Si "Can't connect" : vérifier le pare-feu
sudo ufw status | grep 3306
## Si absent :
sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp

## Vérifier que MariaDB écoute bien sur toutes les interfaces
ss -tlnp | grep 3306
## Doit montrer 0.0.0.0:3306 et pas 127.0.0.1:3306

Saccades en 4K sur Raspberry Pi

Le Pi 4 gère le 4K HEVC (H.265) par décodage matériel, mais le H.264 4K est trop lourd. Vérifications :

bash
## Sur LibreELEC, vérifier la mémoire GPU allouée
vcgencmd get_mem gpu
## Recommandé : au moins 256 Mo

## Vérifier la température (throttling à 85°C)
vcgencmd measure_temp

Si les saccades persistent, vérifiez que le fichier est en HEVC et pas en H.264. Pour les fichiers H.264 4K, le transcodage côté serveur (avec Plex ou Jellyfin) reste la meilleure option.

L'interface web ne répond pas

bash
## Vérifier que le port est ouvert
ss -tlnp | grep 8080

## Vérifier que le service Kodi tourne
systemctl status kodi-headless

## Consulter les logs
tail -50 ~/.kodi/temp/kodi.log

Les métadonnées ne se téléchargent pas

Le scraper TMDb nécessite un accès internet. Vérifiez :

bash
## Tester la résolution DNS
nslookup api.themoviedb.org

## Tester l'accès à l'API
curl -s -o /dev/null -w '%{http_code}' https://api.themoviedb.org/3/movie/550?api_key=demo
## Doit retourner 401 (clé invalide mais serveur joignable)

Si vous êtes derrière un proxy, configurez-le dans Paramètres > Système > Internet.

Aller plus loin

Kodi supporte nativement les PVR (enregistreur vidéo personnel) pour la télévision en direct. Avec un tuner TNT USB et l'extension TVHeadend, vous pouvez regarder et enregistrer la TV directement dans Kodi. C'est un sujet à part entière, mais ça transforme Kodi en vrai décodeur maison.

Autre piste : coupler Kodi avec Sonarr (séries) et Radarr (films) pour automatiser complètement la gestion de votre médiathèque. Ces outils surveillent les sorties, téléchargent automatiquement, renomment les fichiers selon la convention attendue par Kodi, et déclenchent un scan de la bibliothèque. L'infrastructure media center parfaite, mais ça demande un serveur dédié.

Sur le même sujet

À lire aussi

#tutoriel#guide-technique#kodi#media center#automatisation