[ Présentation | Installation  | Utilisation  | Partager une base de donnée avec une autre machine  | Modifier les genres des films | Extension youtube ]

Mediacenter kodi

Dernière modification 11 mai 2024

Présentation

On part sur le principe que vous avez installé les bibliothèques de base pour faire de la vidéo.

Cette page présente kodi anciennement connu sous le nom de XBMC, c'est un media player, ou dit autrement un « home theater » soft. En français, on va dire que c'est un logiciel dédié au PC multimédia généralement connecté à une TV. Le site officiel est  http://kodi.tv.

Installation


Préalablement on installera les packages suivants en tapant la commande ci-dessous:

urpmi swig lib64ass-devel lib64modplug-devel  lib64yajl2 lib64tinyxml0 lib64pcrecpp-devel lib64jasper-devel gperf lib64expat-devel gnutls lib64tinyxml-devel gnutls-devel lib64lzo-devel lib64microhttpd-devel lib64uuid-devel lib64avahi-client-devel  lib64mariadb-devel python-mako lib64drm-devel llvm-devel python3-devel rapidjson lib64cdio-devel pulseaudio-devel lib64xslt-devel lib64vdpau-devel curl-devel lib64sqlite3-devel taglib-devel lib64freeglut-devel lib64xrandr-devel java lib64spdlog-devel lib64waylandpp-devel lib64gif-devel doxygen lib64dav1d-devel lib64flatbuffers-devel lib64mesaegl-devel lib64mesaglesv2-devel lib64gbm-devel dcadec-devel lib64crossguid-devel lib64fstrcmp-devel lib64tinyxml2-devel wayland-protocols-devel

pour ceux qui ont une GPU intel on installera également lib64vdpau-va-gl1 lib64va-devel

On installera ensuite libdisplayinfo qu'on trouvera ici https://gitlab.freedesktop.org/emersion/libdisplay-info on décompresse l'archive en tapant

tar xvfj libdisplay-info-0.1.1.tar.bz2

cela donne le répertoire libdisplay-info-0.1.1 dans lequel on tape

meson setup build
ninja -C build

puis en tant que root

cp ./build/meson-private/libdisplay-info.pc /usr/local/lib/pkgconfig
cp ./build/libdisplay-info.so.0.1.1 /usr/local/lib
ln -s /usr/local/lib/libdisplay-info.so.0.1.1 /usr/local/lib/libdisplay-info.so
ln -s /usr/local/lib/libdisplay-info.so.0.1.1 /usr/local/lib/libdisplay-info.so.1
ln -s /usr/local/linux/multimedia/libdisplay-info-0.1.1/include/libdisplay-info/   /usr/local/include

on récupère enfin les sources de la dernière version 21 Omega par ici https://github.com/xbmc/xbmc/releases on la décompresse en tapant

tar xvfz xbmc-21.0-Omega.tar.gz

cela donne le répertoire xbmc-21.0-Omega dans lequel on tape

mkdir build
cd build
cmake -DENABLE_BLUETOOTH=OFF -DENABLE_INTERNAL_FFMPEG=ON -DENABLE_SMBCLIENT=OFF -DENABLE_UPNP=OFF -DENABLE_BLURAY=OFF -DENABLE_LCMS2=OFF -DENABLE_LIRCCLIENT=OFF -DMYSQLCLIENT_INCLUDE_DIR=/usr/include/mysql/  -DENABLE_NFS=OFF -DENABLE_SNDIO=OFF -DENABLE_CEC=OFF -DENABLE_CCACHE=OFF -DENABLE_CAP=OFF  -DAPP_RENDER_SYSTEM=gles -DENABLE_MARIADBCLIENT=OFF -DENABLE_CLANGFORMAT=OFF -DLIBDISPLAYINFO_INCLUDE_DIR=/usr/local/linux/multimedia/libdisplay-info-0.1.1 ..

j'ai désactivé tout un tas d'options car je n'en ai pas l'utilité, j'ai forcé l'utilisation d'une version interne de ffmpeg pour éviter les erreurs de compilation avec une version trop récente.
J'ai activé l'option MySQL en installant le package mariadb-devel afin que la base de données soit commune et visible de tous partout sur le réseau. Par défaut l'option webserver est activé on verra plus loin à quoi ça va servir.

-- #---- CONFIGURATION ----#
-- Platforms: x11 wayland gbm
-- App package: org.xbmc.kodi
-- -- PATH config --
-- Prefix: /usr/local
-- Libdir: /usr/local/lib64
-- Bindir: /usr/local/bin
-- Includedir: /usr/local/include
-- Datarootdir: /usr/local/share
-- Datadir: /usr/local/share
-- Docdir: /usr/local/share/doc/kodi
-- CCACHE enabled: No
-- CLANGFORMAT enabled: No
-- CLANGTIDY enabled: No
-- CPPCHECK enabled: No
-- INCLUDEWHATYOUUSE enabled: No
-- ALSA enabled: Yes
-- AVAHI enabled: Yes
-- BLUETOOTH enabled: No
-- BLURAY enabled: No
-- CAP enabled: No
-- CEC enabled: No
-- DAV1D enabled: Yes
-- DBUS enabled: Yes
-- ISO9660PP enabled: Yes
-- LCMS2 enabled: No
-- LIRCCLIENT enabled: No
-- MDNS enabled: No
-- MICROHTTPD enabled: Yes
-- NFS enabled: No
-- PIPEWIRE enabled: No
-- PLIST enabled: No
-- PULSEAUDIO enabled: Yes
-- PYTHON enabled: Yes
-- SMBCLIENT enabled: No
-- SNDIO enabled: No
-- UDEV enabled: Yes
-- UDFREAD enabled: No
-- XSLT enabled: Yes
-- VAAPI enabled: Yes
-- VAAPI enabled: Yes
-- VAAPI enabled: Yes
-- MARIADBCLIENT enabled: No
-- MYSQLCLIENT enabled: Yes
-- Configuring done (3.2s)
-- Generating done (2.0s)
-- Build files have been written to: /usr/local/linux/multimedia/xbmc-21.0-Omega/build

on tape ensuite make puis en tant que root make install maintenant pour compiler les extensions on tapera (en tant que root, attention il faut avoir la commande git)

cd ..
make -j5 -C tools/depends/target/binary-addons PREFIX=/usr/local

pour installer en particulier que les extensions de jeu on tapera :

make -j5 -C tools/depends/target/binary-addons PREFIX=/usr/local ADDONS="game.*"

et on veillera à supprimer les traces d'une vieille installation (/usr/local/share/xbmc ou /usr/local/lib/xbmc)


[Retour haut de la page]

Utilisation

Et voilà ce que ça donne avec le thème Estuary par défaut, une fois qu'on l'a alimenté avec la base de films et qu'on a récupéré les informations pour chacun des films à partir de bases de données sur le net.
 

Les films sont classés par genre, années ou acteurs, les films qui ont fait l'objet de plusieurs moutures sont dans la catégorie « sagas ». Je préfère passer le genre pour sélectionner mon film

Quand on sélectionne un film, on a le résumé et tout un tas d'info, on peut bien évidemment le visualiser ensuite.

Idem pour la musique, cela oblige à avoir ses fichiers musicaux qui soient correctement tagués, merci d'aller voir par comment faire cela de manière automatique avec MusicBrainz Picard.

En mode recherche d'artistes

En mode lecture de musique, il y a bien sûr moyen de créer ses propres listes de lecture.

kodi permet également de visualiser la TV en ligne (via internet ou une box), d'écouter des radios en ligne ou bien encore de visualiser ses photos. Il existe un tas de sites qui présentent kodi, media passion avec son forum et son wiki est un très bon point d'entrée.

[Retour haut de la page]

Partager une base de donnée avec une autre machine

Maintenant pour que votre base de données soit accessible à tous sur votre réseau quelque soit la machine utilisée, on va l'installer sur un serveur MySQL. Sur ce serveur on va créer un utilisateur kodi en tapant

mysql -u root -p

voilà le résultat

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 5.6.27 Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE USER 'kodi' IDENTIFIED BY 'kodi';
Query OK, 0 rows affected (0,00 sec)

mysql> GRANT ALL ON *.* TO 'kodi';
Query OK, 0 rows affected (0,00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0,00 sec)

Maintenant sous kodi avec votre utilisateur principal on va exporter la base de données à partir du menu Système-> Vidéo Médiathèque-> Exporter la médiathèque vidéo

A la question Exporter vers un fichier unique ou des fichiers séparés pour chaque élément, on répond Séparé

A la question Exporter les vignettes et les fanarts, on répond Oui

A la question Exporter les vignettes acteurs, on répond Oui

A la question Ecraser les anciens fichiers, on répond Oui

cela va créer autant de fichier .nfo qu'il y a de films, chaque fichier .nfo se retrouve dans le même répertoire que celui du film qu'il est censé décrire. Voilà à quoi ça ressemble

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
    <title>Molière</title>
    <originaltitle>Molière</originaltitle>
    <rating>6.900000</rating>
    <epbookmark>0.000000</epbookmark>
    <year>2007</year>
    <top250>0</top250>
    <votes>14</votes>
    <outline></outline>
    <plot>En 1644, Molière n&apos;a encore que vingt-deux ans. Criblé de dettes et poursuivi par les huissiers, il s&apos;entête à monter sur scène
des tragédies dans lesquelles il est indéniablement mauvais. Et puis un jour, après avoir été emprisonné par des créanciers impatients, il disparaît
...</plot>
    <tagline></tagline>
    <runtime>121</runtime>
    <thumb aspect="poster" preview="http://image.tmdb.org/t/p/w500/hug2HMnzkW2fsvAPyYuBt0Ssg9A.jpg">http://image.tmdb.org/t/p/original/hug2HMnzkW2fs
vAPyYuBt0Ssg9A.jpg</thumb>
    <thumb aspect="poster" preview="http://image.tmdb.org/t/p/w500/9eTXAm7a7jY8tkGRgGtnyUUzKHw.jpg">http://image.tmdb.org/t/p/original/9eTXAm7a7jY8t
kGRgGtnyUUzKHw.jpg</thumb>
    <fanart>
        <thumb preview="http://image.tmdb.org/t/p/w780/nFdQrZM2upgnRsxVHvDzBHh5M8w.jpg">http://image.tmdb.org/t/p/original/nFdQrZM2upgnRsxVHvDzBHh5M
8w.jpg</thumb>
        <thumb preview="http://image.tmdb.org/t/p/w780/xBdllc2nxZBZ1olZA2aWLuuB7eW.jpg">http://image.tmdb.org/t/p/original/xBdllc2nxZBZ1olZA2aWLuuB7
eW.jpg</thumb>
        <thumb preview="http://image.tmdb.org/t/p/w780/wRaODxHVpPUgHWg7iXRCia35sNQ.jpg">http://image.tmdb.org/t/p/original/wRaODxHVpPUgHWg7iXRCia35s
NQ.jpg</thumb>
    </fanart>
    <mpaa>Rated</mpaa>
    <playcount>0</playcount>
    <lastplayed></lastplayed>
    <id>tt0796335</id>
    <genre>Drame</genre>
    <genre>Comédie</genre>
    <genre>Romance</genre>
    <genre>Étranger</genre>
    <country>France</country>
    <set></set>
    <director>Laurent Tirard</director>
    <premiered></premiered>
    <status></status>
    <code></code>
    <aired></aired>
    <trailer>plugin://plugin.video.youtube/?action=play_video&amp;videoid=NySWrKfEa4E</trailer>
    <fileinfo>
        <streamdetails>
            <video>
                <codec>xvid</codec>
                <aspect>2.352941</aspect>
                <width>640</width>
                <height>272</height>
                <durationinseconds>7260</durationinseconds>
                <stereomode></stereomode>
            </video>
            <audio>
                <codec>mp3</codec>
                <language></language>
                <channels>2</channels>
            </audio>
        </streamdetails>
    </fileinfo>
    <actor>
        <name>Romain Duris</name>
        <role>Moliere</role>
        <order>0</order>
        <thumb>http://image.tmdb.org/t/p/original/buU0mFOX7PvSr50F6H8SrN71W08.jpg</thumb>
    </actor>
    <actor>
        <name>Fabrice Luchini</name>
        <role>M. Jourdain</role>
        <order>1</order>
        <thumb>http://image.tmdb.org/t/p/original/wtdwJeLGUBkXSm0ElDlsGTDZcJD.jpg</thumb>
    </actor>
    <actor>
        <name>Édouard Baer</name>
        <role>Dorante</role>
        <order>2</order>
        <thumb>http://image.tmdb.org/t/p/original/bevNDP9RQU1b8UdZPElEw4f9fc9.jpg</thumb>
    </actor>
    <actor>
        <name>Ludivine Sagnier</name>
        <role>Celimene</role>
        <order>3</order>
        <thumb>http://image.tmdb.org/t/p/original/sc0yD6DWgYsMKBpKrYqaZDYz8SX.jpg</thumb>
    </actor>
    <resume>
        <position>0.000000</position>
        <total>0.000000</total>
    </resume>
    <dateadded>2010-09-03 10:28:57</dateadded>
</movie>

On exportera de la même manière la bibliothèque de musique. Maintenant sous .kodi/userdata on va créer le fichier advancedsettings.xml qui va contenir

<advancedsettings>
  <videodatabase>
     <type>mysql</type>
     <host>192.168.13.11</host>
     <port>3306</port>
     <user>kodi</user>
     <pass>kodi</pass>
  </videodatabase>
  <videolibrary>
    <importwatchedstate>true</importwatchedstate>
    <importresumepoint>true</importresumepoint>
  </videolibrary>
  <musicdatabase>
     <type>mysql</type>
     <host>192.168.13.11</host>
     <port>3306</port>
     <user>kodi</user>
     <pass>kodi</pass>
  </musicdatabase>
</advancedsettings>


il faudra indiquer l'adresse IP du serveur MySQL. En relançant dans le fichier .kodi/temp/kodi.log, on voit les étapes de première création des tables en mode debug, voilà un extrait

16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE INDEX ixMusicVideoBasePath ON musicvideo ( c14(12) )
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE INDEX ixEpisodeBasePath ON episode ( c19(12) )
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE INDEX ix_streamdetails ON streamdetails (idFile)
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE INDEX ix_seasons ON seasons (idShow, season)
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE INDEX ix_art ON art(media_id, media_type(20), type(20))
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE UNIQUE INDEX ix_tag_1 ON tag (name(255))
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE UNIQUE INDEX ix_tag_link_1 ON tag_link (tag_id, media_type(20), media_id)
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE UNIQUE INDEX ix_tag_link_2 ON tag_link (media_id, media_type(20), tag_id)
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE INDEX ix_tag_link_3 ON tag_link (media_type(20))
16:09:20 T:139806471604160   DEBUG: Mysql execute: CREATE UNIQUE INDEX ix_actor_1 ON actor (name(255))

dans phpMyAdmin, je vois que les bases MyVideo131 et MyMusic83 ont été crées. Maintenant pour un autre utilisateur kodi il faudra récupérer ce fichier advancedsettings.xml et le placer sous son répertoire .kodi/userdata.

Maintenant pour peupler la base MySQL, il faut avec votre utilisateur principal lancer kodi et mettre à jour la médiathèque, il va lancer un scan comme à l'initialisation d'une nouvelle base sauf que il va lire les fichiers .nfo au lieu de repartir de zéro. Si ça ne marche pas il faut éditer la source contenant les films et avec le menu contextuel choisir Rechercher du nouveau contenu. Voilà le genre de chose qu'on peut découvrir en visualisant le fichier .kodi/temp/kodi.log

17:18:30 T:140142598506240   DEBUG: Mysql execute: insert into actor (actor_id, name, art_urls) values(NULL, 'Dharmadasa Kuruppu', '')
17:18:30 T:140142598506240   DEBUG: Mysql execute: INSERT INTO actor_link (actor_id, media_id, media_type, role, cast_order) VALUES(3524,198,'movie','Chieftain',16)
17:18:30 T:140142598506240   DEBUG: Mysql execute: insert into actor (actor_id, name, art_urls) values(NULL, 'Stany De Silva', '')
17:18:30 T:140142598506240   DEBUG: Mysql execute: INSERT INTO actor_link (actor_id, media_id, media_type, role, cast_order) VALUES(3525,198,'movie','Sajnu',17)
17:18:30 T:140142598506240   DEBUG: Mysql execute: insert into actor (actor_id, name, art_urls) values(NULL, 'Ruby de Mel', '')
17:18:31 T:140142598506240   DEBUG: Mysql execute: INSERT INTO actor_link (actor_id, media_id, media_type, role, cast_order) VALUES(3526,198,'movie','Village Woman',18)
17:18:31 T:140142598506240   DEBUG: Mysql execute: insert into actor (actor_id, name, art_urls) values(NULL, 'Denavaka Hamine', '')

On fera la même chose pour la bibliothèque audio. Maintenant pour utiliser cette base de données sur d'autres machines avec d'autres utilisateurs, il suffit de copier  le fichier advancedsettings.xml dans le répertoire userdata de l'autre utilisateur d'une autre machine. Il faudra également copier le fichier Textures13.db sous userdata/Database et le répertoire complet userdata/Thumbnails.

Ce n'est pas tout, si vos fichiers de votre PC initial se trouvent sur le disque /germaine/video/Films, sur les autres postes clients ce répertoire doit être partagé par montage NFS aux autres postes et doit être configuré tel quel en tant que source sur ces mêmes postes.

Et là sans avoir à créer une médiathèque, à recharger ou scanner je ne sais quoi, vous retrouvez votre base de données.

[Retour haut de la page]

Modifier les genres des films

J'ai constaté que souvent les films sont classés un peu n'importe comment, du style on va retrouver le dessin animé "la belle et la bête" dans la catégorie horreur. Il n'y a pas de moyen de modifier simplement la catégorie. En revanche il existe deux possibilités, vous êtes configuré en local sans usage de base de données avec l'utilisation de fichiers .nfo pour décrire les films, ou alors vous êtes configuré en base de données avec toutes les informations de vos films stockées dans une base de données SQL (comme décrit plus haut).

Utilisation avec base de données

Il fut un temps où il existait WiMM qui permettait de modifier directement dans la base de donnée de kodi, on peut toujours le trouver par là https://github.com/slash2009/XWMM  cela qui donnait quelque chose comme ça


il n'est malheureusement plus maintenu et n'est plus compatible avec les dernières versions de kodi. Je n'ai pas trouvé d'autres solutions que de le faire avec phpMyAdmin.



En fait il faut choisir la base de données kodi, puis la table movie et Rechercher, dans le champ c14 qui correspond au genre on met %Fantastique% (sans guillemet) pour sélectionner les films dans la catégorie Fantastique, ensuite si un film n'est pas classé correctement il faut l'éditer et modifier le genre. Je reconnais volontiers que c'est une méthode assez peu conviviale par rapport à ce que WiMM pouvait apporter.



Utilisation avec fichiers .nfo

kodi n'utilise pas de base de données et se base sur des fichiers .nfo dans le répertoire de vos films. On pourra se servir de MediaElch qu'on trouvera par ici https://github.com/Komet/MediaElch/releases tout d'abord on installera les packages suivant lib64mediainfo-devel et  lib64quazip1-qt5-devel

on désarchive l'archive de MediaElch en tapant

MediaElch-2.10.6.tar.gz

cela donne le répertoire MediaElch-2.10.6 dans lequel on tape

mkdir build
cd build
cmake .. -DUSE_EXTERN_QUAZIP=ON
make

puis en tant que root

make install

Voilà ce que ça donne en tapant MediaElch




on peut sélectionner les films d'un certain genre



et si un film n'est pas dans la bonne catégorie, on modifie et MediaElch va modifier le fichier .nfo



MediaElch peut faire bien plus de choses, il peut agir sur toutes les autres informations de chaque film.


[Retour haut de la page]

Extensions youtube

Vous avez la possibilité de rajouter un tas d'extensions, exemple avec l'extension youtube. Quand on lance l'extension youtube, il faut d'abord cliquer sur Connexion pour l'associer à un compte youtube, et voilà ce que ça donne quand l'association est terminée.


et voilà avec une playlist


[Retour à l'accueil]
[Retour haut de la page]