Raspberry est un ordinateur monocarte, compact, puissant et peu coûteux , disposant d'un processeur Cortex-A7 quadricœur fonctionnant à 900 MHz et de 1 Go de RAM, d'une sortie HDMI, etc.
Principalement utilisé avec Java, C et les applications de traitement, qui fonctionnent à bas niveau et sont capables de contrôler les ressources matérielles, mais pour exécuter une application Web, on dépend d'un système d'exploitation qui limite ces ressources. Pour obtenir quelque chose de plus performant et tirer parti de certaines autres ressources, telles que le GPU, il faut créer une distribution personnalisée.
Habituellement, on installe Raspbian et on utilise simplement le navigateur disponible fourni avec le système d'exploitation, qu'il s'agisse d'Epiphany ou de Midori. Avec ces navigateurs fonctionnant sur ce système d'exploitation, on peut naviguer sans trop de tracas, mais sans les animations et les performances:
Un hack connu consiste à utiliser QT pour forcer l'utilisation du GPU. La compilation de WebKit dans QT donne accès à cette ressource, mais pour y parvenir, il faut créer une distribution Linux propre et abandonner tout ce qui n'est pas essentiel pour garder la RAM disponible pour l'application.
La compilation croisée et la configuration du noyau sont courants que dans le monde Linux ; des choses vraiment de bas niveau par rapport à l'environnement Web. Mais il existe des outils pour aider, Buildroot en fait partie : un outil simple, efficace et facile à utiliser qui génère des systèmes Linux embarqués par compilation croisée.
Même avec Buildroot, il est important de comprendre et de connaître les dépendances requises par chaque bibliothèque que l'on souhaite compiler.
Le référentiel de Metrological permet les meilleures configurations de performances pour Buildroot afin d'exécuter la bibliothèque QT et le moteur WebKit dans Raspberry.
Il suffit de cloner le dépôt :
git clone https://github.com/Metrological/buildroot cd buildroot
Ensuite, appliquer la configuration de base pour RPI Model 2 :
make rpi2_qt5webkit_defconfig
Ou pour accéder au menu Buildroot et voir les autres bibliothèques disponibles, utiliser :
make menuconfig
Dans ce référentiel, on trouve un fichier .config
de base avec toutes les bibliothèques considérées comme essentielles pour exécuter une application Web, telles que git, fbv, websocket et python.
Maintenant, copier le fichier mentionné dans le répertoire Buildroot et exécuter :
make
Le processus prend un certain temps.
On a maintenant une image prête à être clonée dans la SDCard. Utiliser l'une des méthodes décrites ici pour graver l'image sur la carte SD. Lorsque la carte est prête, on peut démarrer le RPI et se connecter au système via SSH (Login : root, Mot de passe : root).
ssh root@192.168.1.100 # Remplacer par l'adresse IP de RPI !
Ensuite, lancer l'application :
qtbrowser --url=http://url
La distribution qui en résulte est vraiment propre. On n'y trouvera pas d'éléments Debian classiques, comme apt-get. Certaines fonctionnalités dont on peut avoir besoin doivent être installées manuellement.
Placer le contenu suivant dans /boot/cmdline.txt
. Cela empêchera le journal de démarrage d'apparaître:
dwc_otg.fiq_fix_enable=1 sdhci-bcm2708.sync_after_dma=0 dwc_otg.lpm_enable=0 vt.global_cursor_default=0 console=tty3 root=/dev/mmcblk0p2 rootwait loglevel=3 quiet
Dans le fichier /boot/config.txt
, il faut au minimum définir les propriétés utilisées par ce projet :
disable_splash=1 disable_overscan=1 boot_delay=0 arm_freq=1000 gpu_freq=500 over_voltage=6 avoid_warnings=1 force_turbo=0 gpu_mem_256=128 gpu_mem_512=256 gpu_mem_1024=512 kernel=zImage hdmi_group=1 hdmi_mode=16 hdmi_force_hotplug=1
Liste complète des résolutions :
HDMI mode | VGA3) | DVI | ||||
---|---|---|---|---|---|---|
hdmi_mode=1 | @#ffaaaa:VGA | @#ffaaaa: | @#ffaaaa: | @#bbddee:640×350 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=2 | @#ffaaaa:480p | @#ffaaaa:60Hz | @#ffaaaa: | @#bbddee:640×400 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=3 | @#ffaaaa:480p | @#ffaaaa:60Hz | @#ffaaaa:H | @#bbddee:720×400 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=4 | @#ffaaaa:720p | @#ffaaaa:60Hz | @#ffaaaa: | @#bbddee:640×480 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=5 | @#ffaaaa:1080i | @#ffaaaa:60Hz | @#ffaaaa: | @#bbddee:640×480 | @#bbddee:72Hz | @#bbddee: |
hdmi_mode=6 | @#ffaaaa:480i | @#ffaaaa:60Hz | @#ffaaaa: | @#bbddee:640×480 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=7 | @#ffaaaa:480i | @#ffaaaa:60Hz | @#ffaaaa:H | @#bbddee:640×480 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=8 | @#ffaaaa:240p | @#ffaaaa:60Hz | @#ffaaaa: | @#bbddee:800×600 | @#bbddee:56Hz | @#bbddee: |
hdmi_mode=9 | @#ffaaaa:240p | @#ffaaaa:60Hz | @#ffaaaa:H | @#bbddee:800×600 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=10 | @#ffaaaa:480i | @#ffaaaa:60Hz | @#ffaaaa:4x | @#bbddee:800×600 | @#bbddee:72Hz | @#bbddee: |
hdmi_mode=11 | @#ffaaaa:480i | @#ffaaaa:60Hz | @#ffaaaa:4x H | @#bbddee:800×600 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=12 | @#ffaaaa:240p | @#ffaaaa:60Hz | @#ffaaaa:4x | @#bbddee:800×600 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=13 | @#ffaaaa:240p | @#ffaaaa:60Hz | @#ffaaaa:4x H | @#bbddee:800×600 | @#bbddee:120Hz | @#bbddee: |
hdmi_mode=14 | @#ffaaaa:480p | @#ffaaaa:60Hz | @#ffaaaa:2x | @#bbddee:848×480 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=15 | @#ffaaaa:480p | @#ffaaaa:60Hz | @#ffaaaa:2x H | @#bbddee:1024×768 | @#bbddee:43Hz | @#bbddee:DO NOT USE |
hdmi_mode=16 | @#ffaaaa:1080p | @#ffaaaa:60Hz | @#ffaaaa: | @#bbddee:1024×768 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=17 | @#ffaaaa:576p | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1024×768 | @#bbddee:70Hz | @#bbddee: |
hdmi_mode=18 | @#ffaaaa:576p | @#ffaaaa:50Hz | @#ffaaaa:H | @#bbddee:1024×768 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=19 | @#ffaaaa:720p | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1024×768 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=20 | @#ffaaaa:1080i | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1024×768 | @#bbddee:120Hz | @#bbddee: |
hdmi_mode=21 | @#ffaaaa:576i | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1152×864 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=22 | @#ffaaaa:576i | @#ffaaaa:50Hz | @#ffaaaa:H | @#bbddee:1280×768 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=23 | @#ffaaaa:288p | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1280×768 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=24 | @#ffaaaa:288p | @#ffaaaa:50Hz | @#ffaaaa:H | @#bbddee:1280×768 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=25 | @#ffaaaa:576i | @#ffaaaa:50Hz | @#ffaaaa:4x | @#bbddee:1280×768 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=26 | @#ffaaaa:576i | @#ffaaaa:50Hz | @#ffaaaa:4x H | @#bbddee:1280×768 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=27 | @#ffaaaa:288p | @#ffaaaa:50Hz | @#ffaaaa:4x | @#bbddee:1280×800 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=28 | @#ffaaaa:288p | @#ffaaaa:50Hz | @#ffaaaa:4x H | @#bbddee:1280×800 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=29 | @#ffaaaa:576p | @#ffaaaa:50Hz | @#ffaaaa:2x | @#bbddee:1280×800 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=30 | @#ffaaaa:576p | @#ffaaaa:50Hz | @#ffaaaa:2x H | @#bbddee:1280×800 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=31 | @#ffaaaa:1080p | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1280×800 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=32 | @#ffaaaa:1080p | @#ffaaaa:24Hz | @#ffaaaa: | @#bbddee:1280×960 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=33 | @#ffaaaa:1080p | @#ffaaaa:25Hz | @#ffaaaa: | @#bbddee:1280×960 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=34 | @#ffaaaa:1080p | @#ffaaaa:30Hz | @#ffaaaa: | @#bbddee:1280×960 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=35 | @#ffaaaa:480p | @#ffaaaa:60Hz | @#ffaaaa:4x | @#bbddee:1280×1024 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=36 | @#ffaaaa:480p | @#ffaaaa:60Hz | @#ffaaaa:4xH | @#bbddee:1280×1024 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=37 | @#ffaaaa:576p | @#ffaaaa:50Hz | @#ffaaaa:4x | @#bbddee:1280×1024 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=38 | @#ffaaaa:576p | @#ffaaaa:50Hz | @#ffaaaa:4x H | @#bbddee:1280×1024 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=39 | @#ffaaaa:1080i | @#ffaaaa:50Hz | @#ffaaaa: | @#bbddee:1360×768 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=40 | @#ffaaaa:1080i | @#ffaaaa:100H | @#ffaaaa: | @#bbddee:1360×768 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=41 | @#ffaaaa:720p | @#ffaaaa:100H | @#ffaaaa: | @#bbddee:1400×1050 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=42 | @#ffaaaa:576p | @#ffaaaa:100H | @#ffaaaa: | @#bbddee:1400×1050 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=43 | @#ffaaaa:576p | @#ffaaaa:100H | @#ffaaaa: H | @#bbddee:1400×1050 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=44 | @#ffaaaa:576i | @#ffaaaa:100H | @#ffaaaa: | @#bbddee:1400×1050 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=45 | @#ffaaaa:576i | @#ffaaaa:100H | @#ffaaaa: H | @#bbddee:1400×1050 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=46 | @#ffaaaa:1080i | @#ffaaaa:120H | @#ffaaaa: | @#bbddee:1440×900 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=47 | @#ffaaaa:720p | @#ffaaaa:120H | @#ffaaaa: | @#bbddee:1440×900 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=48 | @#ffaaaa:480p | @#ffaaaa:120H | @#ffaaaa: | @#bbddee:1440×900 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=49 | @#ffaaaa:480p | @#ffaaaa:120H | @#ffaaaa: H | @#bbddee:1440×900 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=50 | @#ffaaaa:480i | @#ffaaaa:120H | @#ffaaaa: | @#bbddee:1440×900 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=51 | @#ffaaaa:480i | @#ffaaaa:120H | @#ffaaaa: H | @#bbddee:1600×1200 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=52 | @#ffaaaa:576p | @#ffaaaa:200H | @#ffaaaa: | @#bbddee:1600×1200 | @#bbddee:65Hz | @#bbddee: |
hdmi_mode=53 | @#ffaaaa:576p | @#ffaaaa:200H | @#ffaaaa: H | @#bbddee:1600×1200 | @#bbddee:70Hz | @#bbddee: |
hdmi_mode=54 | @#ffaaaa:576i | @#ffaaaa:200H | @#ffaaaa: | @#bbddee:1600×1200 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=55 | @#ffaaaa:576i | @#ffaaaa:200H | @#ffaaaa: H | @#bbddee:1600×1200 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=56 | @#ffaaaa:480p | @#ffaaaa:240H | @#ffaaaa: | @#bbddee:1600×1200 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=57 | @#ffaaaa:480p | @#ffaaaa:240H | @#ffaaaa: H | @#bbddee:1680×1050 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=58 | @#ffaaaa:480i | @#ffaaaa:240H | @#ffaaaa: | @#bbddee:1680×1050 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=59 | @#ffaaaa:480i | @#ffaaaa:240H | @#ffaaaa: H | @#bbddee:1680×1050 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=60 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1680×1050 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=61 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1680×1050 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=62 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1792×1344 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=63 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1792×1344 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=64 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1792×1344 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=65 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1856×1392 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=66 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1856×1392 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=67 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1856×1392 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=68 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1200 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=69 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1200 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=70 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1200 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=71 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1200 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=72 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1200 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=73 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1440 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=74 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1440 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=75 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1920×1440 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=76 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:2560×1600 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=77 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:2560×1600 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=78 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:2560×1600 | @#bbddee:75Hz | @#bbddee: |
hdmi_mode=79 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:2560×1600 | @#bbddee:85Hz | @#bbddee: |
hdmi_mode=80 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:2560×1600 | @#bbddee:120Hz | @#bbddee:reduced blanking |
hdmi_mode=81 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1366×768 | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=82 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1080p | @#bbddee: 60z | @#bbddee: |
hdmi_mode=83 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1600×900 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=84 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:2048×1152 | @#bbddee: | @#bbddee:reduced blanking |
hdmi_mode=85 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:720p | @#bbddee:60Hz | @#bbddee: |
hdmi_mode=86 | @#ffaaaa: | @#ffaaaa: | @#ffaaaa: | @#bbddee:1366×768 | @#bbddee: | @#bbddee:reduced blanking |
Un point intéressant sur l'utilisation du RPI est de construire un système dans lequel l'interaction humaine est rarement nécessaire. Il peut démarrer et se mettre à jour sans aucune interaction. Les scripts peuvent aider dans ce processus
L'exemple suivant utilise git pour mettre à jour un dépôt local:
cat >> /etc/init.d/S80init <<EOF #!/bin/sh # # Start processing # wget -q --spider http://google.com if [ $? -eq 0 ]; then cd /home/default/yourdirectory git pull --rebase fi EOF
L'exemple suivant permet de lancer l'application qtbrowser4):
cat >> /etc/init.d/S90app <<EOF #!/bin/sh nohup /root/setup.sh & /root/run_app.sh & /root/run_appconnect.sh & /root/run_qtbrowser.sh EOF
Afin d'automatiser un maximum sans devoir saisir un mot de passe sudo crée un fichier /etc/sudoers.d/90-rpi
contenant:
pi ALL = NOPASSWD:/usr/bin/fbi
On peut implémenter un écran de démarrage en quelques étapes simples :
# Splash initiale ! cat /dev/zero 1> /dev/fb0 2>/dev/null fbv -i -c /home/default/bootanimations/frame*.png --delay 1
Pour utiliser la lecture vidéo accélérée par le matériel de mpv sur le Raspberry Pi il faut construire deux packages basés sur les packages officiels, modifiés
Pour compiler pour une architecture différente, il faut installer les prérequis nécessaires :
apt install git make gcc device-tree-compiler bison flex libssl-dev libncurses-dev
Puis installer un compilateur croisé à jour et l'ensemble des outils associés. Il faut choisir la version adaptée à l'architecture de la machine hôte (celle sur laquelle on compile) et de la machine cible.
Par exemple, pour une compilation sur une architectuer aarch64 vers une architecture armhf, utiliser la version gcc-linaro-12.0.1-2022.02-aarch64_arm-linux-gnueabihf.tar.xz.
wget https://snapshots.linaro.org/gnu-toolchain/12.0-2022.02-1/arm-linux-gnueabihf/gcc-linaro-12.0.1-2022.02-aarch64_arm-linux-gnueabihf.tar.xz sudo tar xf gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz -C /opt
Configurer le compilateur croisé :
export ARCH=arm export CROSS_COMPILE=/opt/gcc-linaro-12.0.1-2022.02-aarch64_arm-linux-gnueabihf-
Bien que ffmpeg prenne une heure à construire, la prise en charge de MMAL est requise pour l'accélération matérielle dans mpv.
sudo apt-get install -y gperf bison flex autoconf automake make libharfbuzz-dev libfreetype6-dev libx11-dev libxrandr-dev libvdpau-dev libva-dev mesa-common-dev libegl1-mesa-dev yasm libasound2-dev libpulse-dev libuchardet-dev zlib1g-dev libfribidi-dev git libgnutls28-dev libgl1-mesa-dev libsdl2-dev wget texinfo help2man libtool libtool-bin ncurses-dev git yasm mercurial cmake cmake-curses-gui libfribidi-dev checkinstall libfontconfig1-dev libgl1-mesa-dev libgles2-mesa-dev gnutls-dev libsmbclient-dev libpulse-dev libbluray-dev libdvdread-dev libluajit-5.1-dev libjpeg-dev libv4l-dev libcdio-cdda-dev libcdio-paranoia-dev python g++ git clone https://github.com/mpv-player/mpv-build.git cd mpv-build echo --enable-libmpv-shared > mpv_options echo --disable-cplayer >> mpv_options echo --enable-rpi >> mpv_options echo --enable-mmal >> ffmpeg_options ./use-mpv-release ./use-ffmpeg-release ./rebuild -j4 ./update sudo ./install sudo ldconfig
jellyfin media player est un client de bureau utilisant jellyfin-web avec lecteur MPV intégré. Il est basé sur Plex Media Player et prend en charge Windows, Mac OS et Linux. Les médias sont lus dans la même fenêtre en utilisant l'interface jellyfin-web contrairement à Jellyfin Desktop. Il prend en charge le flux audio.
sudo apt install autoconf automake libtool libharfbuzz-dev libfreetype6-dev libfontconfig1-dev libx11-dev libxrandr-dev libvdpau-dev libva-dev mesa-common-dev libegl1-mesa-dev yasm libasound2-dev libpulse-dev libuchardet-dev zlib1g-dev libfribidi-dev git libgnutls28-dev libgl1-mesa-dev libsdl2-dev cmake wget python g++ qtwebengine5-dev qtquickcontrols2-5-dev libqt5x11extras5-dev libcec-dev qml-module-qtquick-controls qml-module-qtwebengine qml-module-qtwebchannel qtbase5-private-dev mkdir jmp; cd jmp git clone git://github.com/iwalton3/jellyfin-media-player cd jellyfin-media-player mkdir build cd build wget https://github.com/iwalton3/jellyfin-web-jmp/releases/download/jwc-1.7.2-2/dist.zip unzip dist.zip cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local/ .. make -j4 sudo make install rm -rf ~/jmp/
jellyfin-mpv-shim permet de diffuser des médias depuis Jellyfin Mobile et les applications Web vers MPV. On peut l'installer à partir via pip, mais cela nécessite d'installer les prérequis suivants:
sudo apt installer python3-tk python3-jinja2 python3-webview gir1.2-webkit2-4.0
avant d'installer python-mpv, pystray et jellyfin-mpv-shim:
sudo pip3 install --upgrade python-mpv pystray jellyfin-mpv-shim