Remarque : le streaming audio multi-pièces AirPlay2 n'est pas pris en charge : utilisez shairport-sync pour cela.
.
Installez uxplay sur les systèmes Linux basés sur Debian avec " sudo apt install uxplay
" ; sur FreeBSD avec « sudo pkg install uxplay
». Également disponible sur les systèmes basés sur Arch via AUR. Depuis la v. 1.66, uxplay est désormais également packagé au format RPM par Fedora 38 (" sudo dnf install uxplay
").
Pour les autres distributions basées sur RPM qui n'ont pas encore empaqueté UxPlay, un "specfile" RPM uxplay.spec est désormais fourni avec les versions récentes (voir leurs "Actifs"), et peut également être trouvé dans le répertoire principal des sources d'UxPlay. Consultez la section sur l'utilisation de ce fichier de spécifications pour créer un package RPM installable.
Après l'installation :
(Sous Linux et *BSD) : si un pare-feu est actif sur le serveur hébergeant UxPlay, assurez-vous que le port réseau par défaut (UDP 5353) pour les requêtes mDNS/DNS-SD est ouvert (voir Dépannage ci-dessous pour plus de détails) ; ouvrez également trois ports UDP et trois ports TCP pour Uxplay, et utilisez l'option "uxplay -p " (voir " man uxplay
" ou " uxplay -h
").
Même si vous installez le package binaire uxplay précompilé de votre distribution, vous devrez peut-être lire les instructions ci-dessous pour exécuter UxPlay pour voir lequel des packages de plugin GStreamer de votre distribution vous devez également installer.
Pour le mode Audio uniquement (Apple Music, etc.) la meilleure qualité est obtenue avec l'option "uxplay -async", mais il y a alors une latence de 2 secondes imposée par iOS.
Ajoutez toutes les options UxPlay que vous souhaitez utiliser par défaut à un fichier de démarrage ~/.uxplayrc
(voir " man uxplay
" ou " uxplay -h
" pour le format et les autres emplacements possibles). En particulier, si votre système utilise des systèmes audio PipeWire ou vidéo Wayland, vous souhaiterez peut-être ajouter « as pipewiresink » ou « vs waylandsink » comme valeurs par défaut au fichier. (La sortie des commandes de terminal "ps waux | grep pulse" ou "pactl info" contiendra "pipewire" si votre système Linux/BSD l'utilise).
Sur Raspberry Pi : Si vous utilisez Ubuntu 22.10 ou version antérieure, GStreamer doit être patché pour utiliser le décodage vidéo matériel par le GPU Broadcom (également recommandé mais facultatif pour le système d'exploitation Raspberry Pi (Bullseye) : utilisez l'option « uxplay -bt709
» si vous n'utilisez pas le patch).
Pour (facilement) compiler la dernière version d'UxPlay à partir des sources, consultez la section Obtenir UxPlay.
Ce projet est un serveur miroir AirPlay2 Unix open source GPLv3 pour Linux, macOS et *BSD. Il a été initialement développé par antimof en utilisant le code de RPiPlay basé sur OpenMAX, qui à son tour dérive d'AirplayServer, shairplay et playfair. (Le site antimof n'est plus impliqué dans le développement, mais publie périodiquement des mises à jour extraites du nouveau site principal UxPlay).
UxPlay est testé sur un certain nombre de systèmes, dont (entre autres) Debian (10 "Buster", 11 "Bullseye", 12 "Bookworm"), Ubuntu (20.04 LTS, 22.04 LTS, 23.04 (également dérivés d'Ubuntu Linux Mint, Pop! _OS), Red Hat et clones (Fedora 38, Rocky Linux 9.2), openSUSE Leap 15.5, Mageia 9, OpenMandriva "ROME", PCLinuxOS, Arch Linux, Manjaro, et devrait également fonctionner sur n'importe quel système Linux. Également testé sur macOS Catalina et Ventura. (Intel) et Sonoma (M2), FreeBSD 14.0, Windows 10 et 11 (64 bits).
Sur Raspberry Pi 4 modèle B, il est testé sur Raspberry Pi OS (Bullseye et Bookworm) (32 et 64 bits), Ubuntu 22.04 LTS et 23.04, Manjaro RPi4 23.02 et (sans décodage vidéo matériel) sur openSUSE 15.5. Également testé sur Raspberry Pi Zero 2 W, 3 modèle B+, et maintenant 5.
Son utilisation principale est d'agir comme une AppleTV pour la mise en miroir d'écran (avec audio) des clients iOS/iPadOS/macOS (ordinateurs iPhone, iPod Touch, iPad, Mac) sur l'écran du serveur d'un hôte exécutant Linux, macOS ou autre Unix. (et maintenant aussi Microsoft Windows). UxPlay prend en charge le protocole AirPlay2 d'Apple en utilisant le "Legacy Protocol", mais certaines fonctionnalités sont manquantes. (Des détails sur ce qui est publiquement connu sur le protocole AirPlay 2 d'Apple peuvent être trouvés ici, ici et ici ; voir également pyatv qui pourrait être une ressource pour ajouter des protocoles modernes.) Bien qu'il n'y ait aucune garantie que les futures versions d'iOS continueront à prendre en charge "Legacy Protocol ", iOS 17 continue de prendre en charge.
Le serveur UxPlay et son client doivent être sur le même réseau local, sur lequel tourne également un serveur Bonjour/Zeroconf mDNS/DNS-SD (seul le service DNS-SD "Service Discovery" est strictement nécessaire, il n'est pas nécessaire que le le réseau local soit également du type ".local" basé sur mDNS). Sur les serveurs Linux et BSD Unix, cela est généralement fourni par Avahi, via le service avahi-daemon, et est inclus dans la plupart des distributions Linux (ce service peut également être fourni par les serveurs macOS, iOS ou Windows).
Les connexions au serveur UxPlay par les clients iOS/MacOS peuvent être initiées à la fois en mode AirPlay Mirror (qui diffuse l'audio AAC compressé avec perte tout en reflétant l'écran du client), ou en mode alternatif AirPlay Audio qui diffuse l'audio Apple Lossless (ALAC) sans mise en miroir d'écran. . En mode Audio , les métadonnées sont affichées dans le terminal uxplay ; si l'option UxPlay -ca
est utilisée, la pochette qui l'accompagne est également sortie dans un fichier
périodiquement mis à jour et peut être visualisée avec un (rechargement) . visionneuse graphique de votre choix. La commutation entre les modes Miroir et Audio pendant une connexion active est possible : en mode Miroir , arrêtez la mise en miroir (ou fermez la fenêtre miroir) et démarrez une connexion en mode Audio , revenez en arrière en initiant une connexion en mode Miroir ; L’affichage artistique s’arrête/redémarre lorsque vous quittez/rentrez le mode Audio .
Notez que le DRM vidéo Apple (tel qu'il se trouve dans le contenu de l'application Apple TV sur le client) ne peut pas être déchiffré par UxPlay et que l'application Apple TV ne peut pas être regardée à l'aide du mode AirPlay Mirror d'UxPlay (seul l'audio non protégé sera diffusé, en AAC). format), mais le contenu vidéo et audio des applications sans DRM comme « l'application YouTube » sera diffusé par UxPlay en mode miroir.
Comme UxPlay ne prend actuellement pas en charge le streaming vidéo non-Mirror AirPlay (où le client contrôle un serveur Web sur le serveur AirPlay qui reçoit directement le contenu HLS pour éviter qu'il ne soit décodé et réencodé par le client), en utilisant l'icône de la vidéo AirPlay dans les applications telles que l'application YouTube enverront uniquement de l'audio (au format ALAC sans perte) sans la vidéo qui l'accompagne (il est prévu de prendre en charge la vidéo HLS dans les futures versions d'UxPlay)
UxPlay utilise les "plugins" GStreamer pour le rendu audio et vidéo. Cela signifie que la vidéo et l'audio sont pris en charge « prêts à l'emploi », à l'aide d'un choix de plugins. AirPlay diffuse la vidéo au format h264 : le décodage gstreamer est indépendant des plugins et utilise des décodeurs h264 matériels GPU accélérés si disponibles ; sinon, un décodage logiciel est utilisé.
VAAPI pour graphiques intégrés Intel et AMD, NVIDIA avec pilote open source "Nouveau"
Avec un GPU Intel ou AMD, le décodage matériel avec le plugin open source VAAPI gstreamer est préférable. Les pilotes open source "Nouveau" pour graphiques NVIDIA sont également en principe supportés : voir ici, mais cela nécessite de compléter VAAPI avec un firmware extrait des pilotes propriétaires NVIDIA.
NVIDIA avec pilotes propriétaires
Le plugin nvh264dec
(inclus dans gstreamer1.0-plugins-bad depuis GStreamer-1.18.0) peut être utilisé pour un décodage vidéo accéléré sur le GPU NVIDIA après l'installation du pilote CUDA de NVIDIA libcuda.so
. Pour GStreamer-1.16.3 ou version antérieure, le plugin s'appelle nvdec
et doit être construit par l'utilisateur.
Prise en charge de Video4Linux2 pour le décodage matériel h264 sur Raspberry Pi (Pi 4B et versions antérieures)
Les ordinateurs Raspberry Pi (RPi) (testés sur Pi 4 modèle B) peuvent désormais exécuter UxPlay à l'aide du décodage vidéo logiciel, mais le décodage h264/h265 accéléré par le matériel par le micrologiciel du GPU Broadcom 2835 du Pi est préféré. UxPlay y accède à l'aide du plugin GStreamer-1.22 Video4Linux2 (v4l2) ; Utilise le module de noyau Linux hors ligne principale bcm2835-codec maintenu par Raspberry Pi, jusqu'à présent uniquement inclus dans le système d'exploitation Raspberry Pi, et deux autres distributions (Ubuntu, Manjaro) disponibles avec Raspberry Pi Imager. (Pour GStreamer < 1.22, voir le wiki UxPlay) .
(Nouveau) : Prise en charge du décodage matériel h265 (HEVC) sur Raspberry Pi (Pi 4 modèle B et Pi 5)
Le soutien est présent, mais jusqu'à présent, des résultats satisfaisants n'ont pas été obtenus. Le modèle Pi 5 fournit uniquement un décodage à accélération matérielle (GPU) pour la vidéo h265, mais pas pour le H264, car son processeur est suffisamment puissant pour un décodage logiciel H264 satisfaisant.
La licence GPLv3 d'UxPlay n'a pas d'« exception GPL » ajoutée permettant explicitement de la distribuer sous forme compilée lorsqu'elle est liée à des versions d'OpenSSL antérieures à la v. 3.0.0 (les anciennes versions d'OpenSSL ont une clause de licence incompatible avec la GPL à moins qu'OpenSSL puisse être considérée comme une "bibliothèque système", ce qui est le cas dans *BSD). De nombreuses distributions Linux traitent OpenSSL comme une « bibliothèque système », mais certaines (par exemple Debian) ne le font pas : dans ce cas, le problème est résolu en créant une liaison avec OpenSSL-3.0.0 ou version ultérieure.
Soit téléchargez et décompressez UxPlay-master.zip, soit (si git est installé) : "git clone https://github.com/FDH2/UxPlay". Vous pouvez également télécharger une version récente ou antérieure répertoriée dans les versions.
(Adaptez ces instructions pour les Linux non basés sur Debian ou *BSD ; pour macOS, voir les instructions spécifiques ci-dessous). Voir Dépannage ci-dessous pour obtenir de l'aide en cas de difficultés.
Vous avez besoin d'un compilateur C/C++ (par exemple g++) avec les bibliothèques de développement standard installées. Les systèmes basés sur Debian fournissent un paquet « build-essential » à utiliser pour compiler des logiciels. Vous avez également besoin de pkg-config : s'il n'est pas trouvé par " which pkg-config
", installez pkg-config ou son remplacement similaire, pkgconf. Assurez-vous également que cmake>=3.5 est installé : " sudo apt install cmake
" (ajoutez-y build-essential
et pkg-config
(ou pkgconf
) si nécessaire).
Assurez-vous que votre distribution fournit OpenSSL 1.1.1 ou version ultérieure, et libplist 2.0 ou version ultérieure. (Cela signifie que les systèmes basés sur Debian 10 « Buster » (par exemple, Ubuntu 18.04) ou plus récent ; sur les systèmes Debian 10, « libplist » est une version plus ancienne, vous avez besoin de « libplist3 ».) Si ce n'est pas le cas, vous devrez peut-être créer et installer ceux-ci à partir de la source (voir les instructions à la fin de ce README).
Si vous disposez d'une installation OpenSSL non standard, vous devrez peut-être définir la variable d'environnement OPENSSL_ROOT_DIR ( par exemple , " export OPENSSL_ROOT_DIR=/usr/local/lib64
" si c'est là qu'elle est installée). De même, pour les installations GStreamer non standard (ou multiples), définissez la variable d'environnement GSTREAMER_ROOT_DIR sur le répertoire qui contient le répertoire ".../gstreamer-1.0/" de l'installation de gstreamer qu'UxPlay doit utiliser (s'il s'agit par exemple de "~ /my_gstreamer/lib/gstreamer-1.0/", définissez cet emplacement avec " export GSTREAMER_ROOT_DIR=$HOME/my_gstreamer/lib
").
Dans une fenêtre de terminal, accédez au répertoire source du code source téléchargé ("UxPlay-*", "*" = "master" ou la balise de version pour les téléchargements de fichiers zip, "UxPlay" pour les téléchargements "git clone"), puis suivez les instructions ci-dessous :
Remarque : Par défaut, UxPlay sera construit avec une optimisation pour l'ordinateur sur lequel il est construit ; lorsque ce n'est pas le cas, comme lorsque vous emballez pour une distribution, utilisez l'option cmake -DNO_MARCH_NATIVE=ON
.
Si vous utilisez Windows X11 sous Linux ou *BSD et que vous souhaitez basculer en mode plein écran en appuyant sur une touche (F11 ou Alt_L+Entrée), UxPlay doit être construit avec une dépendance à X11. À partir d'UxPlay-1.59, cela sera fait par défaut SI les bibliothèques de développement X11 sont installées et détectées. Installez-les avec " sudo apt install libx11-dev
". Si GStreamer < 1,20 est détecté, un correctif nécessaire aux applications de partage d'écran ( par exemple , Zoom) sera également effectué.
-DNO_X11_DEPS=ON
.sudo apt install libssl-dev libplist-dev
". ( sauf si vous devez créer OpenSSL et libplist à partir des sources ).sudo apt install libavahi-compat-libdnssd-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
. (* Ignorer si vous avez construit Gstreamer à partir des sources )cmake .
( Pour un build plus propre, ce qui est utile si vous modifiez le source, remplacez-le par " mkdir build; cd build; cmake ..
" : vous pouvez ensuite supprimer le contenu du répertoire build
si nécessaire, sans affecter le source. ) Aussi ajoutez ici toutes les options cmake " -D
" selon vos besoins (par exemple, -DNO_X11_DEPS=ON
ou -DNO_MARCH_NATIVE=ON
).make
sudo make install
(vous pouvez ensuite désinstaller avec sudo make uninstall
dans le même répertoire dans lequel cela a été exécuté). Cela installe le fichier exécutable " uxplay
" dans /usr/local/bin
(et installe une page de manuel dans un endroit standard comme /usr/local/share/man/man1
et les fichiers README dans un endroit comme /usr/local/share/doc/uxplay
). (Si "man uxplay" échoue, vérifiez si $MANPATH est défini : si c'est le cas, le chemin d'accès à la page de manuel (généralement /usr/local/share/man/) doit être ajouté à $MANPATH .) L'exécutable uxplay peut également être trouvé dans le répertoire build après le processus de build, si vous souhaitez tester avant l'installation (auquel cas les plugins GStreamer doivent d'abord être installés).
**Pour ceux qui disposent de distributions basées sur RPM, un fichier de spécifications RPM uxplay.spec est également disponible : voir Créer un package RPM installable.
Red Hat, ou des clones comme CentOS (maintenant continué sous le nom de Rocky Linux ou Alma Linux) : (sudo dnf install, ou sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel gstreamer1-devel gstreamer1-plugins-base- devel (+libX11-devel pour X11 plein écran) (certains d'entre eux peuvent se trouver dans le référentiel de modules complémentaires "CodeReady", appelé "PowerTools" par les clones)
Mageia, PCLinuxOS, OpenMandriva : Identique à Red Hat, sauf pour les changements de nom : (Mageia) « gstreamer1.0-devel », « gstreamer-plugins-base1.0-devel » ; (OpenMandriva) "libopenssl-devel", "gstreamer-devel", "libgst-plugins-base1.0-devel". PCLinuxOS : identique à Mageia, mais utilise synaptic (ou apt) comme gestionnaire de paquets.
openSUSE : (installation sudo zypper) libopenssl-3-devel (anciennement libopenssl-devel) libplist-2_0-devel (anciennement libplist-devel) avahi-compat-mDNSResponder-devel gstreamer-devel gstreamer-plugins-base-devel (+ libX11- développer pour le plein écran X11).
Arch Linux ( également disponible sous forme de package dans AUR ) : (sudo pacman -Syu) openssl libplist avahi gst-plugins-base.
FreeBSD : (installation sudo pkg) libplist gstreamer1. Avahi-libdns ou mDNSResponder doivent également être installés pour fournir la bibliothèque dns_sd. OpenSSL est déjà installé en tant que bibliothèque système.
Les créateurs de RPM pour la première fois doivent d'abord installer les packages rpm-build et rpmdevtools, puis créer l'arborescence rpmbuild avec " rpmdev-setuptree
". Ensuite, téléchargez et copiez uxplay.spec dans ~/rpmbuild/SPECS
. Dans ce répertoire, exécutez " rpmdev-spectool -g -R uxplay.spec
" pour télécharger le fichier source correspondant uxplay-*.tar.gz
dans ~/rpmbuild/SOURCES
("rpmdev-spectool" peut aussi être simplement appelé "spectool" ); puis exécutez " rpmbuild -ba uxplay.spec
" (vous devrez installer toutes les dépendances requises dans ce rapport). Cela devrait créer le package uxplay RPM dans un sous-répertoire de ~/rpmbuild/RPMS
. ( uxplay.spec est testé sur Fedora 38, Rocky Linux 9.2, openSUSE Leap 15.5, Mageia 9, OpenMandriva, PCLinuxOS ; il peut être facilement modifié pour inclure des listes de dépendances pour d'autres distributions basées sur RPM.)
Installez ensuite les plugins GStreamer nécessaires avec sudo apt install gstreamer1.0-
. Les valeurs de
requises sont :
Les distributions basées sur Debian divisent certains packages de plugins en morceaux plus petits : certains qui peuvent également être nécessaires incluent " gl " pour le support d'OpenGL (cela fournit le videosink " -vs glimagesink ", qui peut être très utile dans de nombreux systèmes (y compris Raspberry Pi ), et doit toujours être utilisé lors de l'utilisation du décodage h264/h265 par un GPU NVIDIA), " gtk3 " (qui fournit le flux vidéo "-vs gtksink") et " x " pour le support X11, bien que ceux-ci puissent déjà être installés ; " vaapi " est nécessaire pour le décodage vidéo h264 accéléré par le matériel par les graphiques Intel ou AMD (mais pas pour une utilisation avec NVIDIA utilisant des pilotes propriétaires). Si le son ne fonctionne pas, les plugins " alsa ", " pulseaudio " ou " pipewire " devront peut-être être installés, selon la configuration de votre audio.
Dans certains cas, en raison de problèmes de brevet, la fonctionnalité avdec_aac du plugin libav nécessaire au décodage de l'audio AAC en mode miroir n'est pas fournie dans la distribution officielle : obtenez-la depuis les référentiels communautaires pour ces distributions.
Red Hat ou des clones comme CentOS (maintenant continué sous le nom de Rocky Linux ou Alma Linux) : installez gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi pour les graphiques Intel/AMD). Dans Fedora récent, gstreamer1-libav est renommé gstreamer1-plugin-libav. Pour obtenir avdec_aac, installez les packages depuis rpmfusion.org : (récupérez ffmpeg-libs depuis rpmfusion ; sur RHEL ou des clones, mais pas sur Fedora récent, récupérez également gstreamer1-libav à partir de là).
Mageia, PCLinuxOS, OpenMandriva : installez gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi pour les graphiques Intel/AMD). Sur Mageia, pour obtenir avdec_aac, installez ffmpeg depuis le dépôt "tainted" , (qui fournit également un gstreamer1.0-plugins-bad plus complet).
openSUSE : installez gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi pour les graphiques Intel/AMD). Pour obtenir avdec_aac, installez les packages libav* pour openSUSE à partir de Packman "Essentials" ; recommandation : après avoir ajouté le référentiel Packman, utilisez l'option dans la gestion du logiciel YaST pour basculer tous les packages système pour le multimédia vers Packman).
Arch Linux Installez gst-plugins-good gst-plugins-bad gst-libav (+ gstreamer-vaapi pour les graphiques Intel/AMD).
FreeBSD : Installez gstreamer1-libav, gstreamer1-plugins, gstreamer1-plugins-* (* = core, good, bad, x, gtk, gl, vulkan, pulse, v4l2, ...), (+ gstreamer1-vaapi pour Intel/ Graphiques AMD).
Depuis UxPlay-1.64, UxPlay peut être démarré avec des options lues à partir d'un fichier de configuration, qui sera le premier trouvé d'un (1) fichier avec un chemin donné par la variable d'environnement $UXPLAYRC
, (2) ~/.uxplayrc
dans l'accueil de l'utilisateur. répertoire ("~"), (3) ~/.config/uxplayrc
. Le format est une option par ligne, en omettant le "-"
initial de l'option de ligne de commande. Les lignes du fichier de configuration commençant par "#"
sont traitées comme des commentaires et ignorées.
Exécutez uxplay dans une fenêtre de terminal . Sur certains systèmes, vous pouvez spécifier le mode plein écran avec l'option -fs
, ou basculer vers et hors du mode plein écran avec F11 ou (maintenir Alt gauche) + Entrée. Utilisez Ctrl-C (ou fermez la fenêtre) pour y mettre fin une fois terminé. Si le serveur UxPlay n'est pas vu par le panneau déroulant "Screen Mirroring" du client iOS, vérifiez que votre serveur DNS-SD (généralement avahi-daemon) est en cours d'exécution : faites-le dans une fenêtre de terminal avec systemctl status avahi-daemon
. Si cela indique que le démon avahi n'est pas en cours d'exécution, contrôlez-le avec sudo systemctl [start,stop,enable,disable] avahi-daemon
(sur les systèmes non-systemd, tels que *BSD, utilisez sudo service avahi-daemon [status, start, stop, restart, ...]
). Si UxPlay est vu, mais que le client ne parvient pas à se connecter lorsqu'il est sélectionné, il peut y avoir un pare-feu sur le serveur qui empêche UxPlay de recevoir les demandes de connexion du client à moins que certains ports réseau ne soient ouverts : si un pare-feu est actif, ouvrez également le port UDP 5353. (pour les requêtes mDNS) nécessaire à Avahi . Voir Dépannage ci-dessous pour obtenir de l'aide sur ce problème ou sur d'autres.
Contrairement à une Apple TV, le serveur UxPlay n'exige pas par défaut que les clients se « couplent » initialement avec lui à l'aide d'un code PIN affiché par le serveur (après quoi le client « fait confiance » au serveur et n'a pas besoin de le répéter). Depuis la v1.67, Uxplay propose une telle "authentification par code PIN" en option : voir " -pin
" et " -reg
" dans Utilisation pour plus de détails, si vous souhaitez l'utiliser. Certains clients avec MDM (Mobile Device Management, souvent présent sur les appareils appartenant à l'employeur) doivent utiliser l'authentification par code PIN : UxPlay le fournira même s'il fonctionne sans l'option code PIN.
Par défaut, UxPlay est verrouillé sur son client actuel jusqu'à ce que ce client abandonne la connexion ; depuis UxPlay-1.58, l'option -nohold
modifie ce comportement de sorte que lorsqu'un nouveau client demande une connexion, il supprime le client actuel et prend le relais. UxPlay 1.66 introduit un mécanisme ( -restrict
, -allow
, -block
) pour contrôler quels clients sont autorisés à se connecter, en utilisant leur "deviceID" (qui dans les appareils Apple semble être immuable).
En mode Miroir, GStreamer a le choix entre deux méthodes pour lire la vidéo avec l'audio qui l'accompagne : avant UxPlay-1.64, les flux vidéo et audio étaient tous deux lus dès que possible après leur arrivée (la méthode GStreamer " sync=false ") , avec une horloge interne GStreamer utilisée pour essayer de les maintenir synchronisés. À partir d'UxPlay-1.64, l'autre méthode (mode " sync=true " de GStreamer), qui utilise des horodatages dans les flux audio et vidéo envoyés par le client, est la nouvelle méthode par défaut . Sur les hôtes UxPlay à faible puissance de décodage (tels que les modèles Raspberry Pi Zero W ou 3 B+), cela supprimera les images vidéo qui ne peuvent pas être décodées à temps pour lire avec l'audio, rendant la vidéo saccadée, mais toujours synchronisée.
L'ancienne méthode, qui ne supprime pas les images vidéo tardives, fonctionnait bien sur des systèmes plus puissants et est toujours disponible avec l'option UxPlay « -vsync no
» ; cette méthode est adaptée au "streaming en direct" et peut être meilleure lors de l'utilisation d'UxPlay comme deuxième moniteur pour un ordinateur Mac, par exemple, tandis que la nouvelle méthode basée sur l'horodatage par défaut est la meilleure pour regarder une vidéo, afin de conserver les mouvements des lèvres et les voix. synchronisé. (Sans utilisation d'horodatage, la vidéo finira par être en retard sur l'audio si elle ne peut pas être décodée assez rapidement : le décodage vidéo accéléré par le matériel a permis d'éviter cela auparavant lorsque les horodatages n'étaient pas utilisés.)
-async
option basée. (Un exemple pourrait être si vous souhaitez suivre les paroles d'Apple Music sur le client tout en écoutant un son de qualité supérieure sur le serveur UxPlay). Cela retarde la vidéo sur le client pour qu'elle corresponde à l'audio sur le serveur, ce qui entraîne un léger délai avant qu'une pause ou un changement de piste initié sur le client ne prenne effet sur l'audio lu par le serveur. Le contrôle du volume AirPlay atténue le volume (gain) jusqu'à -30 dB : la plage de décibels -30 : 0 peut être redimensionnée à partir de Low : 0 ou Low : High , en utilisant l'option -db
("-db Low " ou " -db Low : High "), Low doit être négatif. La mise à l'échelle est linéaire en décibels. Notez que le format audio de GStreamer « coupera » tout gain audio supérieur à +20 dB, alors gardez High en dessous de ce niveau. L'option -taper
fournit un profil de contrôle du volume AirPlay « effilé » que certains utilisateurs peuvent préférer.
Les options -vsync et -async permettent également un réglage facultatif du retard audio positif (ou négatif) en millisecondes pour un réglage précis : -vsync 20.5
retarde l'audio par rapport à la vidéo de 0,0205 secondes ; une valeur négative le fait avancer.)
vous constaterez peut-être que la vidéo est améliorée par le paramètre -fps 60 qui permet de lire certaines vidéos à 60 images par seconde. (Vous pouvez voir quel framerate est réellement diffusé en utilisant -vs fpsdisplaysink et/ou -FPSdata.) Lorsque vous utilisez ceci, vous devez utiliser l'option de synchronisation par horodatage par défaut -vsync
.
Depuis UxPlay-1.54, vous pouvez afficher la « pochette » qui l'accompagne à partir de sources comme Apple Music en mode Audio uniquement (ALAC) : exécutez « uxplay -ca
» en arrière-plan, puis exécutez une visionneuse d'images avec un rechargement automatique. fonctionnalité : un exemple est "feh" : exécutez " feh -R 1
" au premier plan ; terminez feh puis Uxplay avec " ctrl-C fg ctrl-C
".
Par défaut, GStreamer utilise un algorithme pour rechercher le meilleur « puits vidéo » (terme utilisé par GStreamer pour désigner un pilote graphique permettant d'afficher des images). Vous pouvez remplacer cela avec l'option uxplay -vs
. Les récepteurs vidéo disponibles dépendent de votre système d'exploitation et de votre matériel graphique : utilisez " gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
" pour voir ce qui est disponible. Certaines possibilités sous Linux/*BSD sont :
glimagesink (OpenGL), waylandsink
xvimagesink , ximagesink (X11)
kmssink , fbdevsink (graphiques de console sans X11)
vaapisink (pour les graphiques à accélération matérielle Intel/AMD) ; pour les graphiques matériels NVIDIA (avec CUDA), utilisez glimagesink combiné avec " -vd nvh264dec
" (ou "nvh264sldec", une nouvelle variante qui deviendra "nvh264dec" dans GStreamer-1.24).
Si le serveur est "sans tête" (pas de moniteur connecté, restitue uniquement l'audio), utilisez -vs 0
.
GStreamer recherche également le meilleur « audiosink » ; remplacez son choix par -as
. Les choix sous Linux incluent pulsesink, alsasink, pipewiresink, oss4sink ; découvrez ce qui est disponible avec gst-inspect-1.0 | grep sink | grep -e audio -e Audio
.
Un problème courant implique que GStreamer tente d'utiliser un décodage vidéo h264 matériel accéléré incorrectement configuré ou absent (par exemple, VAAPI). Essayez " uxplay -avdec
" pour forcer le décodage vidéo logiciel ; si cela fonctionne, vous pouvez alors essayer de corriger le décodage vidéo matériel accéléré si vous en avez besoin, ou simplement désinstaller le plugin GStreamer vaapi.
Voir Utilisation pour plus d’options d’exécution.
Pour la vidéo Framebuffer (pour Raspberry Pi OS "Lite" et autres distributions non-X11), utilisez le KMS videosink "-vs kmssink" (le videoink du framebuffer DirectFB "dfbvideosink" est cassé sur le Pi et segfaults). Dans ce cas, vous devez explicitement utiliser l'option "-vs kmssink", car sans elle, autovideosink ne trouve pas le bon videosink.
Raspberry Pi 5 ne fournit pas de décodage matériel H264 (et n'en a pas besoin).
Pi Zero 2 W, 3 Model B+ et 4 Model B doivent utiliser le décodage matériel H264 par le GPU Broadcom, mais il nécessite un module de noyau hors du commun bcm2835_codec maintenu dans l'arborescence du noyau Raspberry Pi ; les distributions connues pour le fournir incluent Raspberry Pi OS, Ubuntu et Manjaro-RPi4. Utilisez le décodage logiciel (option -avdec) si ce module n'est pas disponible.
Uxplay utilise le plugin Video4Linux2 (v4l2) de GStreamer-1.22 et versions ultérieures pour accéder au GPU, si le décodage matériel H264 est utilisé. Cela devrait se produire automatiquement. L'option -v4l2 peut être utilisée, mais il est généralement préférable de laisser GStreamer trouver lui-même le meilleur pipeline vidéo.
Sur les anciennes distributions (GStreamer < 1.22), le plugin v4l2 a besoin d'un patch : voir le Wiki UxPlay. L'ancien système d'exploitation Raspberry Pi (Bullseye) a un GStreamer-1.18.4 partiellement corrigé qui nécessite l'option uxplay -bt709 (et n'utilise pas -v4l2) ; il est toujours préférable d'appliquer le patch complet du wiki UxPlay dans ce cas.
Pour le système d'exploitation Raspberry Pi "double héritage" (Buster), il n'y a pas de correctif pour GStreamer-1.14. Au lieu de cela, créez d'abord un GStreamer-1.18.6 plus récent et complet à partir des sources en utilisant ces instructions avant de créer UxPlay.
Le Raspberry Pi 3 Model B+ exécutant un système d'exploitation 32 bits peut également accéder au GPU avec le plugin GStreamer OMX (utilisez l'option " -vd omxh264dec
"), mais cela est interrompu par le firmware du Pi 4 Model B. La prise en charge d'OMX a été supprimée du système d'exploitation Raspberry Pi (Bullseye), mais est présente dans Buster.
La vidéo H265 (4K) est prise en charge avec le décodage matériel par le GPU Broadcom sur les modèles Raspberry Pi 5, ainsi que sur le Raspberry Pi 4 modèle B. Bien que GStreamer semble utiliser ce décodage matériel, la vitesse de rendu satisfaisante de la vidéo 4K par UxPlay sur ces modèles Raspberry Pi n'ont pas encore été réalisés. L'option "-h265" est requise pour activer le support h265. Une connexion Ethernet filaire est préférable dans ce mode (et peut être requise par le client).
Même avec le décodage vidéo GPU, certaines images peuvent être supprimées par les modèles à faible consommation pour maintenir la synchronisation audio et vidéo à l'aide d'horodatages. Dans Legacy Raspberry Pi OS (Bullseye), raspi-config "Performance Options" permet de spécifier la quantité de mémoire à allouer au GPU, mais ce paramètre semble être absent dans Bookworm (mais il peut toujours être réglé sur par exemple 128 Mo en ajoutant une ligne "gpu_mem=128" dans /boot/config.txt). Un Pi Zero 2 W (qui dispose de 512 Mo de mémoire) a bien fonctionné lorsqu'il a été testé dans Bullseye ou Bookworm Lite 32 bits avec 128 Mo alloués au GPU (la valeur par défaut semble être de 64 Mo).
Les options uxplay de base pour R Pi sont uxplay [-vs
. Le choix
= glimagesink
est parfois utile. Avec le compositeur vidéo Wayland, utilisez
= waylandsink
. Avec la vidéo framebuffer, utilisez
= kmssink
.
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
Le son et la vidéo seront lus sur l'hôte distant ; "nohup" maintiendra uxplay en marche si la session ssh est fermée. La sortie du terminal est enregistrée dans FILE (qui peut être /dev/null pour la supprimer)
Remarque: Une fonctionnalité de serveur AirPlay natif est incluse dans MacOS 12 Monterey, mais est limitée au matériel récent. Uxplay peut fonctionner sur des systèmes macOS plus anciens qui ne pourront pas exécuter Monterey, ou peuvent exécuter Monterey mais pas AirPlay.
Ces instructions pour MacOS supposent que les outils de développement de ligne de commande Xcode sont installés (si Xcode est installé, ouvrez le terminal, tapez "sudo xcode-select --install" et acceptez les conditions).
Il est également supposé que CMake> = 3.13 est installé: Cela peut être fait avec les gestionnaires de packages MacPorts ( sudo port install cmake
), Homebrew ( brew install cmake
), ou par un téléchargement depuis https://cmake.org/download/. Installez également git
si vous l'utilisez pour récupérer UxPlay.
Installez ensuite libplist et openssl-3.x. Notez que les versions statiques de ces bibliothèques seront utilisées dans les constructions de macOS, afin qu'elles puissent être désinstallées après la création d'Uxplay, si vous le souhaitez.
Si vous utilisez Homebrew: brew install libplist openssl@3
Si vous utilisez Macports: sudo port install libplist-devel openssl3
Sinon, construisez libplist et ouvre à partir de la source: Voir les instructions vers la fin de cette lecture; Nécessite des outils de développement (AutoConf, Automake, Libtool, etc. ) à installer.
Ensuite, obtenez la dernière version macOS de GStreamer-1.0.
Utilisation de GSTERMER "OFFICIELTIQUE" (recommandé pour les utilisateurs de Macport et Homebrew) : Installez la version GStreamer pour MacOS à partir de https://gstreamer.freedesktop.org/download/. (Cette version contient son propre PKG-Config, vous n'avez donc pas à en installer un.) Installez à la fois les packages GStreamer-1.0 et GStreamer-1.0-Devel. Après le téléchargement, cliquez sur eux pour installer (ils installent sur /Library/FrameWorks/gstreamer.framework). Les utilisateurs de Homebrew ou de Macports ne doivent pas installer (ou ne devraient pas désinstaller) le GSTERAMER fourni par leur gestionnaire de packages, s'ils utilisent la version "officielle".
Utilisation de GStreamer de Homebrew : PKG-Config est nécessaire: ("Brew Installer PKG-Config gstreamer"). Cela provoque l'installation d'un grand nombre de packages supplémentaires par Homebrew en tant que dépendances. L'installation Homebrew GStreamer a récemment été retravaillée en une seule "formule" nommée gstreamer
, qui fonctionne désormais sans avoir besoin de GST_PLUGIN_PATH pour être définie dans l'environnement. Homebrew installe GStreamer vers (HOMEBREW)/lib/gstreamer-1.0
où (HOMEBREW)/*
est /opt/homebrew/*
sur les macs de silicium Apple, et /usr/local/*
sur les macs Intel; Ne mettez pas de plugins non homébreux supplémentaires (que vous vous construisez) et définissez plutôt GST_PLUGIN_PATH pour pointer de leur emplacement (Homebrew ne fournit pas un gtrestremer complet, mais semble avoir tout nécessaire pour Uxplay).
Utilisation de GSTERAMER installée à partir de Macports : ce n'est pas recommandé, car actuellement le MacPorts Gtreer est ancien (V1.16.2), non entretenu et conçu pour utiliser x11:
(Si vous souhaitez vraiment utiliser le MacPorts GStreamer-1.16.2, installez PKGCONF ("Sudo Port Installer PKGCONF"), puis "Sudo Port Installer GSTERMER1-GST-PLUGINS-BASE GSTERAMER1-GST-PLUGINS-GOOD GSTERMER1-GST-PLUGIN -bad gstreamer1-gst-libav ". Pour la prise en charge x11 sur macOS, compilez uxplay en utilisant une option CMake spéciale -DUSE_X11=ON
et exécutez-la à partir d'un terminal xquartz avec -vs ximagesink; les Mac non-rétinons plus anciens nécessitent une résolution inférieure lors de l'utilisation X11: uxplay -s 800x600
.)
Après avoir installé GStreamer, construire et installer UXPlay: ouvrir un terminal et changer dans le répertoire source UXPlay ("UxPlay-Master" pour les téléchargements ZipFile, "UXPlay" pour "Git Clone" Téléchargements) et construire / installer avec "Cmake .; Make; Sudo Make Installer "(Identique à Linux).
L'exécution d'UxPlay tout en vérifiant les avertissements GSTRAMER (faites-le avec "Export GST_DEBUG = 2" avant de runnng uxplay) révèle qu'avec la valeur par défaut (puisque UXPlay 1.64) l'utilisation de temps pour la synchronisation vidéo, de nombreux cadres vidéo sont supprimés (uniquement sur MacOS), Peut-être en raison d'une autre erreur (à propos de Videometa) qui apparaît dans les avertissements GSTREAMER. Recommandation: utilisez la nouvelle option UXPlay "No Timestamp" -vsync no
" (vous pouvez ajouter une ligne" VSYNC NO "dans le fichier de configuration UXPlayrc).
Sur MacOS avec cette installation de GStreamer, les seules listes de vidéos disponibles semblent être GlimagesInk (choix par défaut fait par Autovideosink) et Osxvideosink. Le titre de la fenêtre n'affiche pas le nom du serveur AirPlay, mais la fenêtre est visible pour les applications de partage d'écran (par exemple, zoom). La seule audiosink disponible semble être Osxaudiosink.
L'option -NC est toujours utilisée, qu'elle soit sélectionnée ou non. Il s'agit d'une solution de contournement pour un problème avec les listes de vidéos GSTREAMER sur macOS: si le pipeline GStreamer est détruit tandis que la fenêtre de miroir est toujours ouverte, un segfault se produit.
Dans le cas de GlimagesInk, les paramètres de résolution "-s wxh" n'affectent pas la (petite) taille de fenêtre du miroir OpenGL initial, mais la fenêtre peut être étendue à l'aide de la souris ou du trackpad. En revanche, une fenêtre créée avec "-vs osxvideosink" est initialement grande, mais a le mauvais rapport d'aspect (image étirée); Dans ce cas, le rapport d'aspect change lorsque la largeur de la fenêtre est modifiée en faisant glisser son côté; L'option -vs "osxvideosink force-aspect-ratio=true"
peut être utilisée pour faire que la fenêtre a le rapport d'aspect correct lors de son ouverture pour la première fois.
Téléchargez et installez BonJour SDK pour Windows v3.0 . Vous pouvez télécharger le SDK sans aucune inscription sur softpedia.com, ou l'obtenir à partir du site officiel d'Apple https://developer.apple.com/download (Apple vous fait vous inscrire en tant que développeur pour y accéder depuis leur site). Cela devrait installer le SDK BonJour comme C:Program FilesBonjour SDK
.
(Ceci est pour les fenêtres 64 bits; une construction pour les fenêtres 32 bits devrait être possible, mais n'est pas testée.) L'environnement de construction MSYS2 de type UNIX sera utilisé: Télécharger et installer MSYS2 à partir du site officiel https: // www .msys2.org /. Acceptez l'emplacement d'installation par défaut C:mysys64
.
Les packages MSYS2 sont installés avec une variante du gestionnaire de packages "Pacman" utilisé par Arch Linux. Ouvrez un terminal "MSYS2 MINGW64" de l'onglet MSYS2 dans le menu Démarrer Windows et mettez à jour la nouvelle installation MSYS2 avec "Pacman -SYU". Installez ensuite le compilateur MingW-64 et CMake
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
Le compilateur avec toutes les dépendances requis sera installé dans le répertoire MSYS64, avec un chemin par défaut C:/msys64/mingw64
. Ici, nous allons simplement construire Uxplay à partir de la ligne de commande dans l'environnement MSYS2 (cela utilise " ninja
" à la place de " make
" pour le système de construction).
Téléchargez le dernier UXPlay depuis GitHub (pour utiliser git
, installez-le avec pacman -S git
, puis " git clone https://github.com/FDH2/UxPlay
") , puis installez les dépendances UXPlay (OpenSSL est déjà installé avec MSYS2):
pacman -S mingw-w64-x86_64-libplist mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base
Si vous essayez un système de construction Windows différent, les versions MSVC de GStreamer pour Windows sont disponibles à partir du site officiel de GSTREAMER, mais seule la construction MINGW 64 bits sur MSYS2 a été testée.
CD dans le répertoire source UXPlay, puis " mkdir build
" et " cd build
". Le processus de construction suppose que le SDK Bonjour est installé sur C:Program FilesBonjour SDK
. S'il est ailleurs, définissez la variable Enviroment BonJour_SDK_HOME pour pointer de son emplacement. Puis construire uxplay avec
cmake ..
ninja
En supposant aucune erreur dans l'un ou l'autre, vous aurez construit le répertoire UXPlay exécutable UXPlay.exe dans le répertoire actuel ("build"). Les fonctionnalités "Sudo Make Installer" et "Sudo Make Disinstal" offertes dans les autres builds ne sont pas disponibles sur Windows; Au lieu de cela, l'environnement MSYS2 a /mingw64/...
disponible, et vous pouvez installer l'exécutable uxplay.exe en C:/msys64/mingw64/bin
(plus manpage et documentation en C:/msys64/mingw64/share/...
) avec
cmake --install . --prefix /mingw64
Pour pouvoir afficher la page mande, vous devez installer la visionneuse de ManPage avec " pacman -S man
".
Pour exécuter uxplay.exe, vous devez installer certains packages de plugin gstreamère avec pacman -S mingw-w64-x86_64-gst-
, où les
ont été donnés
D'autres packages de plugin MSYS2 GSTERAMER possibles que vous pourriez utiliser sont répertoriés dans les packages MSYS2.
Vous devrez également accorder l'autorisation à l'exécutable UXPlay UXPlay.exe pour accéder aux données via le pare-feu Windows. Vous pouvez automatiquement vous offrir le choix de le faire lorsque vous exécutez pour la première fois UxPlay, ou vous devrez peut-être le faire en utilisant les paramètres Windows-> Mise à jour et sécurité-> Windows Security-> Firewall et Network Protection -> Autoriser une application via un pare-feu . Si votre protection virale indique Uxplay.exe comme "suspecte" (mais sans une véritable signature de logiciels malveillants), vous devrez peut-être lui donner une exception.
Testez maintenant en exécutant " uxplay
" (dans une fenêtre de terminal MSYS2). Si vous devez spécifier l'Audiosink, il y a deux choix principaux sur Windows: le plugin direct " -as directsoundsink
" plus ancien, et la plus moderne API de session audio Windows (WASAPI) " -as wasapisink
", qui prend en charge des options supplémentaires telles que des options supplémentaires telles que des options supplémentaires telles que
uxplay -as 'wasapisink device=""'
où
spécifie un périphérique audio disponible par son GUID, qui peut être trouvé en utilisant " gst-device-monitor-1.0 Audio
":
a une forme comme {0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
. Si " device
" n'est pas spécifié, le périphérique audio par défaut est utilisé.
Si vous souhaitez spécifier la pose des vidéos à l'aide de l'option -vs
, certains choix pour
sont d3d11videosink
, d3dvideosink
, glimagesink
, gtksink
.
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
, ou obtenir la possibilité de faire entrer et de sortir du mode plein écran en utilisant le clé de clé alt-entrée combinaison avec l'option -vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
. Pour plus de commodité, ces options seront ajoutées si simplement -vs d3d11videosink
avec ou sans l'option complète "-fs" est utilisée. (Les utilisateurs de Windows peuvent souhaiter ajouter " vs d3d11videosink
" (pas initial " -
") au fichier d'options de démarrage UXPlay; voir "man uxplay" ou "uxplay -h".) L'exécutable uxplay.exe peut également être exécuté sans l'environnement MSYS2, dans le terminal Windows, avec C:msys64mingw64binuxplay
.
Possibilités :
-
" caractères) dans le fichier de démarrage UxPlay (soit donné par la variable d'environnement $UXPLAYRC
, ou ~/.uxplayrc
ou ~/.config/uxplayrc
); Les lignes commençant par " #
" sont traitées comme des commentaires et ignorées. Les options de ligne de commande remplacent les options dans le fichier de démarrage.-n server_name (par défaut: uxplay); Server_name @ hostname sera le nom qui apparaît en offrant des services AirPlay à votre iPad, iPhone, etc., où le nom d'hôte est le nom du serveur exécutant Uxplay. Ce sera également le nom illustré ci-dessus de la fenêtre Affichage du miroir (X11).
-nh n'ajoutez pas "@ hostname " à la fin du nom du serveur AirPlay.
-H265 Activer la prise en charge "ScreenMultiCoDec" (AirPlay "Fonctionne" Bit 42) pour accepter la vidéo H265 (4K / HEVC) en plus de la vidéo H264 (1080p) en mode d'écran-miroir. Lorsque cette option est utilisée, deux "pipelines vidéo" (un pour H264, un pour H265) sont créés. Si des plugins GStreamer dans le pipeline sont spécifiques à H264 ou H265, la version correcte sera utilisée dans chaque pipeline. Une connexion Ethernet client câblée est préférée au WiFi pour la vidéo 4K, et peut être exigée par le client. Seuls les appareils Apple récents (Mac M1 / M2 ou iPads, et certains iPhones) peuvent envoyer une vidéo H265 si une résolution "-s wxh" avec h> 1080 est demandée. L'option "-H265" modifie la résolution par défaut (option "-s") de 1920x1080 à 3840x2160, et laisse le cadres maximum par défaut (option "-fps") à 30 ips.
-pin [nnnn] : (depuis V1.67) Utilisez l'authentification "PIN" de style Apple (pun) lorsqu'un nouveau client se connecte pour la première fois: un code PIN à quatre chiffres s'affiche sur le terminal, et le client L'écran affiche une invite de connexion pour que cela soit entré. Lorsque "-pin" est utilisé par lui-même, un nouveau code PIN aléatoire est choisi pour chaque authentification; Si "-pin nnnn" (par exemple, "-pin 3939") est utilisé, cela définira un code fixe immuable. L'authentification ajoute le serveur à la liste des "serveurs de confiance" du client et que le client n'aura pas besoin de réautoriser à condition que les clés publiques du client et du serveur restent inchangées. (Par défaut depuis V1.68, la clé publique du serveur est générée à partir de l'adresse MAC, qui peut être modifiée avec l'option -M; voir l'option -Key pour une autre méthode de génération de clés). (Ajoutez une ligne "PIN" dans le fichier de démarrage UXPlay si vous souhaitez que le serveur UXPlay utilise le protocole d'authentification PIN).
-Reg [ nom de fichier ] : (depuis v1.68). Si "-pin" est utilisé, cette option maintient un registre de "Clients de confiance" PIN-Authenticated dans $ home / .uxplay.register (ou éventuellement, dans le nom de fichier ). Sans cette option, les clients renvoyés qui sautent l'authentification PIN sont fiables et ne sont pas vérifiés. Cette option peut être utile si UxPlay est utilisé dans un environnement plus public, pour enregistrer les détails du client; Le registre est du texte, une ligne par client, avec la clé publique du client (format de base-64), l'ID de périphérique et le nom du périphérique; Commentant (avec "#") ou supprimant une ligne dérégiste le client correspondant (voir Options -restrict, -block, -Awlow pour plus de moyens de contrôler l'accès au client). (Ajoutez une ligne "Reg" dans le fichier de démarrage si vous souhaitez utiliser cette fonction.)
-vsync [x] (en mode miroir :) Cette option ( maintenant la valeur par défaut ) utilise des horodatages pour synchroniser l'audio avec la vidéo sur le serveur, avec un retard audio facultatif dans les millisecondes (décimales) ( x = "20,5" signifie 0,0205 secondes de retard: Des retards positifs ou négatifs inférieurs à une seconde sont autorisés.) Il est nécessaire sur des systèmes à faible puissance tels que Raspberry Pi sans décodage vidéo matériel.
-vsync no (en mode miroir :) Cela désactive la synchronisation audio-vidéo basée sur l'horodatage, restaurant le comportement par défaut avant UXPlay-1.64. Les systèmes de bureau standard semblent bien fonctionner sans utiliser d'horodatage: ce mode est approprié pour le "streaming en direct", comme l'utilisation d'UxPlay comme deuxième moniteur pour un ordinateur Mac, ou la surveillance d'une webcam; Avec lui, aucune trame vidéo n'est abandonnée.
-Async [x] (en mode audio uniquement (ALAC) :) Cette option utilise des horodatages pour synchroniser l'audio sur le serveur avec une vidéo sur le client, avec un retard audio facultatif en millisecondes (décimal) ( x = "20,5" signifie 0,0205 Deux secondes: des retards positifs ou négatifs inférieurs à une seconde sont autorisés.) Parce que le client ajoute un délai vidéo pour tenir compte de la latence, le serveur en mode -Sync ajoute un délai audio équivalent, ce qui signifie que les changements audio tels qu'une pause ou une pause ou un Le changement de piste ne prendra pas effet immédiatement. Cela pourrait en principe être atténué en utilisant le paramètre de latence audio -al
pour modifier la latence (par défaut 0,25 seconde) que le serveur relève du client, mais à l'heure actuelle, cela ne semble pas avoir d'effet .
-async no . Il s'agit du comportement toujours par défaut en mode audio uniquement, mais cette option peut être utile comme une option de ligne de commande pour désactiver une option -async
définie dans un fichier de configuration "uxplayrc".
-DB Low [: High ] RESCALES L'ATTÉRATION DE CONTROL (GAIN) AIRPLAY VOLUME-CONTROL de -30DB: 0 dB à Low : 0dB ou Low : High . La limite inférieure faible doit être négative (atténuation); La limite supérieure élevée peut être le signe. (GStreamer restreint le volume-augmentation par élevé de sorte qu'il ne peut pas dépasser + 20 dB). Le rediffusion est "plat", de sorte que pour -db -50: 10, un changement d'atténuation de l'aérodrome par -7db est traduit en un -7 x (60/30) = -14db atténuation, et le volume maximum (AirPlay 0DB) est une augmentation de 10 dB, et Airplay -30DB deviendrait -50 dB. Notez que la valeur AirPlay minimum (-30db exactement) est traduite par "Mute".
-Taper fournit un profil de contrôle de volume d'air "effilé" (correspondant à celui appelé "Dasl-Tapering" dans Shairport-Sync): chaque fois la longueur du curseur de volume (ou le nombre de pas au-dessus de Mute, où 16 étapes = complet Le volume) est réduit de 50%, le volume perçu est réduit en deux (une atténuation de 10 dB). (Ceci est modifié à faibles volumes, pour utiliser le volume "non modéré" s'il est plus fort.)
-s wxh eg -s 1920x1080 (= "1080p"), les résolutions de largeur et de hauteur par défaut en pixels pour la vidéo H264. (La valeur par défaut devient 3840x2160 (= "4k") lorsque l'option -H265 est utilisée.) Il s'agit simplement d'une demande faite au client AirPlay, et ne sera peut-être pas la résolution finale que vous obtenez. W et H sont des nombres entiers avec quatre chiffres ou moins. Notez que la taille du pixel de hauteur est celle de contrôle utilisée par le client pour déterminer le format de streaming; La largeur est ajustée dynamiquement à la forme de l'image (portrait ou format paysage, selon la façon dont un iPad est maintenu, par exemple).
-s wxh @ r comme ci-dessus, mais informe également le client AirPlay sur le taux de rafraîchissement de l'écran de l'écran. La valeur par défaut est r = 60 (60 Hz); R doit être un nombre total inférieur à 256.
-o active une option "surestinée" pour la fenêtre d'affichage. Cela réduit la résolution de l'image en utilisant certains des pixels demandés par l'option -s wxh (ou leurs valeurs par défaut 1920x1080) en ajoutant un cadre limite vide de pixels non utilisés (qui serait perdu dans un écran complet affiché par gstreamer). Recommandation: n'utilisez pas cette option à moins qu'il n'y ait une raison particulière de l'utiliser.
-FS utilise le mode plein écran, mais fonctionne uniquement avec X11, Wayland, Vaapi et D3D11 (Windows).
-P vous permet de sélectionner les ports réseau utilisés par UXPlay (ceux-ci doivent être ouverts si le serveur est derrière un pare-feu). En lui-même, -p, les ports "hérités" TCP 7100, 7000, 7001, UDP 6000, 6001, 7011. -Pn (par exemple -p 35000) définit les ports TCP et UDP N, n + 1, n + 2. -p n1, n2, n3 (valeurs séparées par des virgules) définit chaque port séparément; -p N1, N2 Définit les ports N1, N2, N2 + 1. -p TCP N ou -P UDP N définit uniquement les ports TCP ou UDP. Les ports doivent être dans la plage [1024-65535].
Si l'option -p n'est pas utilisée, les ports sont choisis dynamiquement (au hasard), ce qui ne fonctionnera pas si un pare-feu s'exécute.
-AvDec Forces Utilisation du décodage H264 Logiciel à l'aide de l'élément GStreamer AVDEC_H264 (décodeur LiBav H264). Cette option devrait empêcher Autovideosink de choisir un plugin de vidéosink accéléré par le matériel tel que Vaapisink.
-VP Parser choisit l'élément d'analyse H264 du pipeline GStreamer, la valeur par défaut est H264Parse. L'utilisation de citations "..." permet d'ajouter des options.
-vd Decoder choisit l'élément de décodeur H264 du pipeline GStreamer, au lieu de la valeur par défaut "DecodeBin" qui le choisit pour vous. Le décodage du logiciel est effectué par AVDEC_H264; Divers décodeurs matériels incluent: VAAPIH264DEC, NVDEC, NVH264DEC, V4L2H264DEC (ceux-ci nécessitent que le matériel approprié soit disponible). L'utilisation de citations "..." permet à certains paramètres d'être inclus avec le nom du décodeur.
-VC Le convertisseur choisit l'élément VideoConverter du pipeline GSTERAMER, au lieu de la valeur par défaut "VideoConvert". Lors de l'utilisation du décodage du matériel Video4Linux2 par un GPU, -vc v4l2convert
utilisera également le GPU pour la conversion vidéo. L'utilisation de citations "..." permet à certains paramètres d'être inclus avec le nom du convertisseur.
-vs Videosink choisit le grestamer videosink, au lieu de la valeur par défaut "autovideosink" qui le choisit pour vous. Certains choix de vidéosink sont: XimagesInk, XvimagesInk, Vaapisink (pour Intel Graphics), Gtksink, GlimagesInk, WaylandSink, Osxvideosink (pour MacOS), KMSSInk (pour les systèmes sans X11, comme Raspberry Pi OS Lite) ou FPSDisplaySink (qui montre le rédacteur en cours fps). L'utilisation de citations "..." permet à certains paramètres d'être inclus avec le nom de la videosink. Par exemple, le mode plein écran est pris en charge par le plugin Vaapisink et est obtenu en utilisant -vs "vaapisink fullscreen=true"
; Cela fonctionne également avec waylandsink
. La syntaxe de ces options est spécifique à un plugin donné (voir la documentation GStreamer), et certains choix de vidéosinques pourraient ne pas fonctionner sur votre système.
-vs 0 supprime l'affichage de la vidéo en streamine. En mode miroir, l'écran du client est toujours reflété à un taux réduit de 1 trame par seconde, mais n'est pas rendu ou affiché. Cette option doit toujours être utilisée si le serveur est "sans tête" (sans écran attaché pour afficher la vidéo), et uniquement utilisé pour rendre l'audio, qui sera un audio comprimé AAC en mode miroir avec vidéo non sensible et une Alac de qualité supérieure Audio Apple Lossless en mode AirPlay audio uniquement.
-v4L2 Paramètres vidéo pour le décodage vidéo H264 H264 dans le GPU par Video4Linux2. Équivalent à -vd v4l2h264dec -vc v4l2convert
.
-BT709 Une solution de contournement pour la défaillance de l'ancien plugin Video4Linux2 pour reconnaître l'utilisation par Apple d'une variante "Couleur complète" inhabituelle (mais autorisée) de la norme de couleur BT709 pour la télévision numérique. Ce n'est plus nécessaire par GStreamer-1.20.4 et les back-sports.
-rpi équivalent à "-v4l2" (non valide pour Raspberry Pi Model 5, et supprimé dans Uxplay 1.67)
-rpigl équivalent à "-rpi -vs glimagesink". (Supprimé depuis uxplay 1.67)
-rpifb équivalent à "-rpi -vs kmssink" (supprimé depuis uxplay 1.67)
-rpiwl équivalent à "-rpi -vs waylandsink". (Supprimé depuis uxplay 1.67)
-As Audiosink choisit le GSTREAMER Audiosink, au lieu de laisser AutoAudiosink le choisir pour vous. Certains choix d'audiosink sont: Pulsesink, Alsasink, Pipewiresink, Osssink, Oss4Sink, Jackaudiosink, Osxaudiosink (pour macOS), Wasapisink, DirectSoundsink (pour Windows). L'utilisation de devis "..." pourrait permettre certains paramètres facultatifs (par exemple -as "alsasink device=..."
pour spécifier un périphérique de sortie non défaut). La syntaxe de ces options est spécifique à un plugin donné (voir la documentation GStreamer), et certains choix d'Audiosink pourraient ne pas fonctionner sur votre système.
-As 0 (ou juste -A ) supprime le jeu de l'audio en streaming, mais affiche une vidéo en streamine.
-Al x spécifie une latence audio x en (décimal) secondes en audio uniquement (ALAC), qui est signalée au client. Les valeurs dans la plage [0,0, 10,0] secondes sont autorisées et seront converties en un nombre entier de microsecondes. La valeur par défaut est de 0,25 sec (250000 USEC). (Cependant, le client semble ignorer cette latence signalée, donc cette option semble non fonctionnelle.)
-ca FileName fournit un fichier (où le nom de fichier peut inclure un chemin complet) utilisé pour la sortie de "Cover Art" (de la musique Apple, etc. ) en mode ALAC audio uniquement. Ce fichier est écrasé avec la dernière couverture à son arrivée. L'art de la couverture (format JPEG) est jeté si cette option n'est pas utilisée. Utilisez avec une visionneuse d'image qui recharge l'image si elle change, ou régulièrement ( par exemple une fois par seconde.). Pour y parvenir, exécutez " uxplay -ca [path/to/]filename &
" en arrière-plan, puis exécutez la visionneuse d'image au premier plan. Exemple, en utilisant feh
comme visionneuse: exécutez " feh -R 1 [path/to/]filename
" (dans la même fenêtre de terminal dans laquelle Uxplay a été mis en arrière-plan). Pour arrêter, utilisez ctrl-C fg ctrl-C
pour terminer la visionneuse d'images, apportez uxplay
au premier plan et terminez également.
-Res réintégration N définit une limite de n défilés consécutifs du client pour répondre aux demandes NTP du serveur (celles-ci sont envoyées toutes les 3 secondes pour vérifier si le client est toujours présent et se synchroniser avec elle). Après N échecs, le client sera présumé hors ligne et la connexion sera réinitialisée pour permettre une nouvelle connexion. La valeur par défaut de n est de 5; La valeur n = 0 signifie «pas de limite» sur les délais.
-NoFreeze ferme la fenêtre vidéo après une réinitialisation due au délai d'expiration NTP (la défaillance est de laisser la fenêtre ouverte pour permettre une reconsection plus douce au même client). Cette option peut être utile en mode plein écran.
-NC maintient le comportement UXPlay précédent <1,45 qui ne ferme pas la fenêtre vidéo lorsque le client envoie le signal "d'arrêter la miroir". Cette option est actuellement utilisée par défaut dans MacOS, car la fenêtre créée dans MacOS par GStreamer ne se termine pas correctement (elle provoque un segfault) si elle est toujours ouverte lorsque le pipeline GSTREAMER est fermé.
-NoHold supprime la connexion actuelle lorsqu'un nouveau client tente de se connecter. Sans cette option, le client actuel maintient la propriété exclusive d'Uxplay jusqu'à ce qu'elle se déconnecte.
-restrict restreignez les clients autorisés à se connecter à ceux spécifiés par -allow
. Le DeviceId a la forme d'une adresse MAC qui est affichée par UXPlay lorsque le client tente de se connecter, et semble être immuable. Il a le format XX:XX:XX:XX:XX:XX
, x = 0-9, af, et est peut-être l'adresse MAC matérielle "vrai" de l'appareil. Notez que les clients iOS exposent généralement différentes "adresses WI_FI privées aléatoires" ("fausses" adresses MAC) à différents réseaux (pour des raisons de confidentialité, pour empêcher le suivi), qui peut changer et ne pas s'accompagner de DIVERSID.
-restrict non supprimer les restrictions (par défaut). Ceci est utile en tant qu'argument de ligne de commande pour suredente les restrictions définies dans le fichier de démarrage.
-Allow ID ajoute le deviceID = ID à la liste des clients autorisés lorsque les restrictions du client sont appliquées. Habituellement, ce sera une entrée dans le fichier de démarrage UXPlayrc.
-Block ID bloque toujours les clients avec DeviceID = ID , même lorsque les restrictions du client ne sont pas appliquées en général. Habituellement, ce sera une entrée dans le fichier de démarrage UXPlayrc.
-FPSDATA excite la surveillance des rapports réguliers sur les performances de streaming vidéo envoyées par le client. Ceux-ci seront affichés dans la fenêtre du terminal si cette option est utilisée. Les données sont mises à jour par le client à 1 seconde intervalles.
-FPS N définit une fréquence d'images maximale (dans les images par seconde) pour que le client AirPlay diffuse une vidéo; n doit être un nombre total inférieur à 256. (Le client peut choisir de servir la vidéo à n'importe quelle fréquence d'images inférieure à celle-ci; la valeur par défaut est de 30 ips.) Un paramètre de 60 ips peut vous donner une vidéo améliorée mais n'est pas recommandée sur Raspberry Pi. Un paramètre inférieur à 30 ips peut être utile pour réduire la latence si vous exécutez plus d'une instance d'Uxplay en même temps. Ce paramètre n'est qu'un avis pour le dispositif client, donc le réglage d'une valeur élevée ne forcera pas un cadres élevé. (Vous pouvez tester à l'aide de "-vs fpsdisplaysink" pour voir quels framerate est reçu, ou utiliser l'option -fpsdata qui affiche des données de performances vidéo en continu envoyées par le client pendant la diffusion vidéo.)
-f {h | v | i} implémente "Videoflip" Transforts d'image: h = flip horizontal (flip à droite ou image miroir); V = flip vertical; I = 180 degrés rotation ou inversion (qui est la combinaison de H avec v).
-r {r | l} 90 degrés à droite (dans le sens horaire) ou à gauche (dans le sens antihoraire); Ces transformations d'image sont réalisées après toutes les transformations -f .
-m [Mac] Modifie l'adresse MAC (ID de périphérique) utilisé par UXPlay (par défaut est d'utiliser l'adresse MAC du matériel réel rapportée par la carte réseau de l'ordinateur hôte). (Différents server_name, adresses MAC et ports réseau sont nécessaires pour chaque UxPlay en cours d'exécution si vous essayez d'exécuter plus d'une instance d'UxPlay sur le même ordinateur.) Si [Mac] (sous forme xx: xx: xx: xx: xx: xx, 6 octets hexagonaux) n'est pas donné, une adresse MAC aléatoire est générée. Si UXPlay ne trouve pas la véritable adresse MAC d'une carte réseau, (plus précisément, l'adresse MAC utilisée par la première interface réseau active détectée), une adresse MAC aléatoire sera utilisée même si l'option -m n'a pas été spécifiée. (Notez qu'une adresse MAC aléatoire sera différente à chaque fois que Uxplay est démarré).
-Key [ nom de fichier ] : Cette option (plus sécurisée) pour générer et stocker une clé publique persistante (nécessaire pour l'option -pin) a été remplacée par défaut par une méthode (moins sécurisée) qui génère une clé à partir de l'ID de périphérique du serveur "(Adresse MAC, qui peut être modifiée avec l'option -m, commodément en tant qu'option de fichier de démarrage). Lorsque l'option -Key est utilisée, une clés générée en toute sécurité est générée et stockée dans $HOME/.uxplay.pem
, si ce fichier n'existe pas ou en lisez, s'il existe. (Éventuellement, la clé peut être stockée dans le nom de fichier .) Cette méthode est plus sécurisée que la nouvelle méthode par défaut, (car l'ID de périphérique est diffusé dans l'annonce DNS_SD) mais laisse toujours la clé privée exposée à tous ceux qui peuvent accéder au fichier PEM . Cette option doit être définie dans le fichier de démarrage UxPlay en tant que ligne "clé" ou " nom de fichier de clé" (pas initiale "-"), où le nom de fichier est un chemin complet qui devrait être enfermé en guillemets ( "...."
) si Il contient des espaces vides. Étant donné que la méthode par défaut est plus simple et que la sécurité de l'accès au client à UXPlay est peu susceptible d'être un problème important, l'option -key n'est plus recommandée .
-DACP [ Nom de fichier ] : Exporter la touche actuelle du client DACP-ID et active-Remote dans le fichier: la valeur par défaut est $ home / .uxplay.dacp. (éventuellement, peut être modifié en nom de fichier ). Peut être utilisé par des applications à distance. Le fichier est transitoire: n'existe que lorsque le client est connecté.
-VDMP vide la vidéo H264 pour fichier videodump.h264. -vdmp n vide pas plus que n unités nal à videodump.x.h264; x = 1,2, ... augmente chaque fois qu'une unité NAL SPS / PPS arrive. Pour modifier le nom VideoDump , utilisez -vdmp [n] nom de fichier .
-ADMP Dumps Audio pour fichier audiodump.x.aac (AAC-ELD Format Audio), AuDiDump.x.Alac (ALAC Format Audio) ou AuDiDump.x.aud (Audio-Format Audio), où x = 1,2,3 ... augmente chaque fois que le format audio change. -Admp N restreint le nombre de paquets jetés dans un fichier à n ou moins. Pour modifier le nom AuDiDump , utilisez -admp [n] nom de fichier . Notez que (contrairement à la vidéo vide), l'audio vidé n'est actuellement utile que pour le débogage, car il n'est pas conteneurisé pour le rendre jouable avec des lecteurs audio standard.
-d activer la sortie de débogage. Remarque: Cela ne montre pas d'erreur ou de messages de débogage de GSTREAMER. Pour voir les messages d'erreur et d'avertissement GSTREAMER, définissez la variable d'environnement GST_DEBUG avec "Exporter GST_DEBUG = 2" avant d'exécuter UxPlay. Pour voir les messages d'informations GSTREAMER, définissez gst_debug = 4; Pour les messages de débogage, gst_debug = 5; Augmentez cela pour voir encore plus du fonctionnement intérieur GSTREAMER.
Remarque: uxplay
est exécuté à partir d'une ligne de commande du terminal et les messages d'information sont écrits au terminal.
Un utilisateur (sur Ubuntu) a constaté que la compilation a échoué avec des messages sur les liens vers "usr / local / lib / libcrypto.a" et "zlib". En effet (en plus de l'installation standard d'Ubuntu de LiBSSL-DEV), l'utilisateur ignorait qu'une deuxième installation avec Libcrypto dans / USR / local était présente. Solution: Lorsque plusieurs installations d'OpenSSL sont présentes, définissez la variable d'environnement Open_SSL_ROOT_DIR pour pointer le bon; Sur Ubuntu 64 bits, cela se fait en exécutant export OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
Avant d'exécuter CMake.
Le service DNS_SD Service-Discovery ("BonJour" ou "ZeroConf") est requis pour que UxPlay fonctionne. Sur Linux, il sera généralement fourni par Avahi, et pour dépanner cela, vous devriez utiliser l'outil avahi-browse
. (Vous devrez peut-être installer un package séparé avec un nom comme avahi-utils
pour l'obtenir.)
Sur Linux, assurez-vous qu'Avahi est installé et démarrez le service Avahi-Daemon sur le système exécutant Uxplay (votre distribution documentera comment procéder, par exemple: sudo systemctl
ou sudo service avahi-daemon
, avec
l'un de l'activation, de la désactivation, du démarrage, de sudo find /etc -name avahi-daemon.conf
statut. sudo find /etc -name avahi-daemon.conf
"): assurez-vous que" désactiver la publication "n'est pas une option sélectionnée). Certains systèmes peuvent plutôt utiliser le démon MDNSD comme alternative pour fournir un service DNS-SD. (FreeBSD offers both alternatives, but only Avahi was tested; see here.)
If UxPlay stops with the "No DNS-SD Server found" message, this means that your network does not have a running Bonjour/zeroconf DNS-SD server. Before v1.60, UxPlay used to stall silently if DNS-SD service registration failed, but now stops with an error message returned by the DNSServiceRegister function: kDNSServiceErr_Unknown if no DNS-SD server was found: (A NixOS user found that in NixOS, this error can also occur if avahi-daemon service IS running with publishing enabled, but reports "the error disappeared on NixOS by setting services.avahi.openFirewall to true".) Other mDNS error codes are in the range FFFE FF00 (-65792) to FFFE FFFF (-65537), and are listed in the dnssd.h file. An older version of this (the one used by avahi) is found here. A few additional error codes are defined in a later version from Apple.
If UxPlay stalls without an error message and without the server name showing on the client , this is a network problem (if your UxPlay version is older than 1.60, it is also the behavior when no DNS-SD server is found.)
A useful tool for examining such network problems from the client end is the (free) Discovery DNS-SD browser available in the Apple App Store for both iOS (works on iPadOS too) and macOS.
If your router has this problem, a reported "fix" is to (at least on 5GHz) use fixed channel and/or fixed (not dynamic) channel width.
This is usually because Avahi is only using the "loopback" network interface, and is not receiving mDNS queries from new clients that were not listening when UxPlay started.
To check this, after starting uxplay, use the utility avahi-browse -a -t
in a different terminal window on the server to verify that the UxPlay AirTunes and AirPlay services are correctly registered (only the AirTunes service is used in the "Legacy" AirPlay Mirror mode used by UxPlay, but the AirPlay service is used for the initial contact).
The results returned by avahi-browse should show entries for uxplay like
+ eno1 IPv6 UxPlay AirPlay Remote Video local
+ eno1 IPv4 UxPlay AirPlay Remote Video local
+ lo IPv4 UxPlay AirPlay Remote Video local
+ eno1 IPv6 863EA27598FE@UxPlay AirTunes Remote Audio local
+ eno1 IPv4 863EA27598FE@UxPlay AirTunes Remote Audio local
+ lo IPv4 863EA27598FE@UxPlay AirTunes Remote Audio local
If only the loopback ("lo") entries are shown, a firewall on the UxPlay host is probably blocking full DNS-SD service, and you need to open the default UDP port 5353 for mDNS requests, as loopback-based DNS-SD service is unreliable.
If the UxPlay services are listed by avahi-browse as above, but are not seen by the client, the problem is likely to be a problem with the local network.
This shows that a DNS-SD service is working, clients hear UxPlay is available, but the UxPlay server is not receiving the response from the client. This is usually because a firewall on the server is blocking the connection request from the client. (One user who insisted that the firewall had been turned off turned out to have had two active firewalls ( firewalld and ufw ) both running on the server!) If possible, either turn off the firewall to see if that is the problem, or get three consecutive network ports, starting at port n, all three in the range 1024-65535, opened for both tcp and udp, and use "uxplay -pn" (or open UDP 7011,6001,6000 TCP 7100,7000,7001 and use "uxplay -p").
If you are really sure there is no firewall, you may need to investigate your network transmissions with a tool like netstat, but almost always this is a firewall issue.
If you do not see the message raop_rtp_mirror starting mirroring
, something went wrong before the client-server negotiations were finished. For such problems, use "uxplay -d " (debug log option) to see what is happening: it will show how far the connection process gets before the failure occurs. You can compare your debug output to that from a successful start of UxPlay in the UxPlay Wiki.
If UxPlay reports that mirroring started, but you get no video or audio, the problem is probably from a GStreamer plugin that doesn't work on your system (by default, GStreamer uses the "autovideosink" and "autoaudiosink" algorithms to guess what are the "best" plugins to use on your system). A different reason for no audio occurred when a user with a firewall only opened two udp network ports: three are required (the third one receives the audio data).
Raspberry Pi devices ( Pi 4B+ and earlier: this does not apply to the Pi 5, which does not provide hardware h264 decoding, and does not need it ) work best with hardware GPU h264 video decoding if the Video4Linux2 plugin in GStreamer v1.20.x or earlier has been patched (see the UxPlay Wiki for patches). This is fixed in GStreamer-1.22, and by backport patches from this in distributions such as Raspberry Pi OS (Bullseye): use option -bt709
with the GStreamer-1.18.4 from Raspberry Pi OS . This also needs the bcm2835-codec kernel module that is not in the standard Linux kernel (it is available in Raspberry Pi OS, Ubuntu and Manjaro).
-avdec
for software h264-decoding.Sometimes "autovideosink" may select the OpenGL renderer "glimagesink" which may not work correctly on your system. Try the options "-vs ximagesink" or "-vs xvimagesink" to see if using one of these fixes the problem.
Other reported problems are connected to the GStreamer VAAPI plugin (for hardware-accelerated Intel graphics, but not NVIDIA graphics). Use the option "-avdec" to force software h264 video decoding: this should prevent autovideosink from selecting the vaapisink videosink. Alternatively, find out if the gstreamer1.0-vaapi plugin is installed, and if so, uninstall it. (If this does not fix the problem, you can reinstall it.)
There are some reports of other GStreamer problems with hardware-accelerated Intel HD graphics. One user (on Debian) solved this with "sudo apt install intel-media-va-driver-non-free". This is a driver for 8'th (or later) generation "*-lake" Intel chips, that seems to be related to VAAPI accelerated graphics.
If you do have Intel HD graphics, and have installed the vaapi plugin, but -vs vaapisink
does not work, check that vaapi is not "blacklisted" in your GStreamer installation: run gst-inspect-1.0 vaapi
, if this reports 0 features
, you need to export GST_VAAPI_ALL_DRIVERS=1
before running uxplay, or set this in the default environment.
You can try to fix audio or video problems by using the " -as
" or " -vs
" options to choose the GStreamer audiosink or videosink , rather than letting GStreamer choose one for you. (See above, in Starting and running UxPlay for choices of
or
.)
The "OpenGL renderer" window created on Linux by "-vs glimagesink" sometimes does not close properly when its "close" button is clicked. (this is a GStreamer issue). You may need to terminate uxplay with Ctrl-C to close a "zombie" OpenGl window. If similar problems happen when the client sends the "Stop Mirroring" signal, try the no-close option "-nc" that leaves the video window open.
rm -rf ~/.cache/gstreamer-1.0/*
may be the solution to problems where gst-inspect-1.0 does not show a plugin that you believe is installed. The cache will be regenerated next time GStreamer is started. This is the solution to puzzling problems that turn out to come from corruption of the cache, and should be tried first. If UxPlay fails to start, with a message that a required GStreamer plugin (such as "libav") was not found, first check with the GStreamer tool gst-inspect-1.0 to see what GStreamer knows is available. (You may need to install some additional GStreamer "tools" package to get gst-inspect-1.0). For, eg a libav problem, check with " gst-inspect-1.0 libav
". If it is not shown as available to GStreamer, but your package manager shows the relevant package as installed (as one user found), try entirely removing and reinstalling the package. That user found that a solution to a " Required gstreamer plugin 'libav' not found " message that kept recurring was to clear the user's gstreamer cache.
If it fails to start with an error like ' no element "avdec_aac"
' this is because even though gstreamer-libav is installed. it is incomplete because some plugin features are missing: " gst-inspect-1.0 | grep avdec_aac
" will show if avdec_aac is available. Unlike other GStreamer plugins, the libav plugin is a front end to FFmpeg codecs which provide avdec_*.
Some distributions (RedHat, SUSE, etc) provide incomplete versions of FFmpeg because of patent issues with codecs used by certain plugins. In those cases there will be some "extra package" provider like RPM fusion (RedHat), packman (SUSE) where you can get complete packages (your distribution will usually provide instructions for this, Mageia puts them in an optional "tainted" repo) . The packages needed may be "ffmpeg*" or "libav*" packages: the GStreamer libav plugin package does not contain any codecs itself, it just provides a way for GStreamer to use ffmpeg/libav codec libraries which must be installed separately. For similar reasons, distributions may ship incomplete packages of GStreamer "plugins-bad". Use user on Fedora thought they had installed from rpmfusion, but the system had not obeyed: "Adding --allowerasing to the dnf command fixed it after a restart" .
starting with release UxPlay-1.65.3, UxPlay will continue to function, but without audio in mirror mode, if avdec_aac is missing.
To troubleshoot GStreamer execute "export GST_DEBUG=2" to set the GStreamer debug-level environment-variable in the terminal where you will run uxplay, so that you see warning and error messages; see GStreamer debugging tools for how to see much more of what is happening inside GStreamer. Run "gst-inspect-1.0" to see which GStreamer plugins are installed on your system.
Some extra GStreamer packages for special plugins may need to be installed (or reinstalled: a user using a Wayland display system as an alternative to X11 reported that after reinstalling Lubuntu 18.4, UxPlay would not work until gstreamer1.0-x was installed, presumably for Wayland's X11-compatibility mode). Different distributions may break up GStreamer 1.x into packages in different ways; the packages listed above in the build instructions should bring in other required GStreamer packages as dependencies, but will not install all possible plugins.
The GStreamer video pipeline, which is shown in the initial output from uxplay -d
, has the default form
appsrc name=video_source ! queue ! h264parse ! decodebin ! videoconvert ! autovideosink name=video_sink sync=false
The pipeline is fully configurable: default elements "h264parse", "decodebin", "videoconvert", and "autovideosink" can respectively be replaced by using uxplay options -vp
, -vd
, -vc
, and -vs
, if there is any need to modify it (entries can be given in quotes "..." to include options).
This can happen if the TCP video stream from the client stops arriving at the server, probably because of network problems (the UDP audio stream may continue to arrive). At 3-second intervals, UxPlay checks that the client is still connected by sending it a request for a NTP time signal. If a reply is not received from the client within a 0.3 sec time-window, an "ntp timeout" is registered. If a certain number (currently 5) of consecutive ntp timeouts occur, UxPlay assumes that the client is "dead", and resets the connection, becoming available for connection to a new client, or reconnection to the previous one. Sometimes the connection may recover before the timeout limit is reached, and if the default limit is not right for your network, it can be modified using the option "-reset n ", where n is the desired timeout-limit value ( n = 0 means "no limit"). If the connection starts to recover after ntp timeouts, a corrupt video packet from before the timeout may trigger a "connection reset by peer" error, which also causes UxPlay to reset the connection.
A protocol failure may trigger an unending stream of error messages, and means that the audio decryption key (also used in video decryption) was not correctly extracted from data sent by the client.
The protocol was modifed in UxPlay-1.65 after it was discovered that the client-server "pairing" step could be avoided (leading to a much quicker connection setup, without a 5 second delay) by disabling "Supports Legacy Pairing" (bit 27) in the "features" code UxPlay advertises on DNS-SD Service Discovery. Most clients will then not attempt the setup of a "shared secret key" when pairing, which is used by AppleTV for simultaneous handling of multiple clients (UxPlay only supports one client at a time). This change is now well-tested, but in case it causes any protocol failures, UxPlay can be reverted to the previous behavior by uncommenting the previous "FEATURES_1" setting (and commenting out the new one) in lib/dnssdint.h, and then rebuilding UxPlay. ("Pairing" is re-enabled when the new Apple-style one-time "pin" authentication is activated by running UxPlay with the "-pin" option introduced in UxPlay 1.67.)
Protocol failure should not happen for iOS 9.3 or later clients. However, if a client uses the same older version of the protocol that is used by the Windows-based AirPlay client emulator AirMyPC , the protocol can be switched to the older version by the setting OLD_PROTOCOL_CLIENT_USER_AGENT_LIST
in UxPlay/lib/global.h
. UxPlay reports the client's "User Agent" string when it connects. If some other client also fails to decrypt all audio and video, try adding its "User Agent" string in place of "xxx" in the entry "AirMyPC/2.0;xxx" in global.h and rebuild uxplay.
Note that for DNS-SD Service Discovery, Uxplay declares itself to be an AppleTV3,2 (a 32 bit device) with a sourceVersion 220.68; this can also be changed in global.h. UxPlay also works if it declares itself as an AppleTV6,2 with sourceVersion 380.20.1 (an AppleTV 4K 1st gen, introduced 2017, running tvOS 12.2.1), so it does not seem to matter what version UxPlay claims to be.
1.70 2024-10-04 Add support for 4K (h265) video (resolution 3840 x 2160). Fix issue with GStreamer >= 1.24 when client sleeps, then wakes.
1.69 2024-08-09 Internal improvements (eg in -nohold option, identifying GStreamer videosink selected by autovideosink, finding X11 display) in anticipation of future HLS video support. New -nofreeze option to not leave frozen video in place when a network connection is reset. Fixes for GStreamer-1.24.x changes.
1.68 2023-12-31 New simpler (default) method for generating a persistent public key from the server MAC address (which can now be set with the -m option). (The previous method is still available with -key option). New option -reg to maintain a register of pin-authenticated clients. Corrected volume-control: now interprets AirPlay volume range -30dB:0dB as decibel gain attenuation, with new option -db low[:high] for "flat" rescaling of the dB range. Add -taper option for a "tapered" AirPlay volume-control profile.
1.67 2023-11-30 Add support for Apple-style one-time pin authentication of clients with option "-pin": (uses SRP6a authentication protocol and public key persistence). Detection with error message of (currently) unsupported H265 video when requesting high resolution over wired ethernet. Removed rpi* options (which are not valid with new Raspberry Pi model 5, and can be replaced by combinations of other options). Added optional argument "mac" to "-m" option, to specify a replacement MAC address/Device ID. Update llhttp to v. 9.1.3. Add -dacp option for exporting current client DACP info (for remotes).
1.66 2023-09-05 Fix IPV6 support. Add option to restrict clients to those on a list of allowed deviceIDs, or to block connections from clients on a list of blocked deviceIDs. Fix for #207 from @thiccaxe (screen lag in vsync mode after client wakes from sleep).
1.65.3 2023-07-23 Add RPM spec file; add warning if required gstreamer libav feature "avdec_aac" is missing: (this occurs in RPM-based distributions that ship an incomplete FFmpeg for Patent or License reasons, and rely on users installing an externally-supplied complete FFmpeg). Mirror-mode airplay will now work without audio if avdec_aac is missing.
1.65 2023-06-03 Eliminate pair_setup part of connection protocol to allow faster connections with clients (thanks to @shuax #176 for this discovery); to revert, uncomment a line in lib/dnssdint.h. Disconnect from audio device when connection closes, to not block its use by other apps if uxplay is running but not connected. Fix for AirMyPC client (broken since 1.60), so its older non-NTP timestamp protocol works with -vsync. Corrected parsing of configuration file entries that were in quotes.
1.64 2023-04-23 Timestamp-based synchronization of audio and video is now the default in Mirror mode. (Use "-vsync no" to restore previous behavior.) A configuration file can now be used for startup options. Also some internal cleanups and a minor bugfix that fixes #192.
1.63 2023-02-12 Reworked audio-video synchronization, with new options -vsync (for Mirror mode) and -async (for Audio-Only mode, to sync with client video). Option -vsync makes software h264 decoding of streamed videos with option -avdec viable on some recent Raspberry Pi models. Internal change: all times are now processed in nanoseconds units. Removed -ao option introduced in 1.62.
1.62 2023-01-18 Added Audio-only mode time offset -ao x to allow user synchronization of ALAC audio playing on the server with video, song lyrics, etc. playing on the client. x = 5.0 appears to be optimal in many cases. Quality fixes: cleanup in volume changes, timestamps, some bugfixes.
1.61 2022-12-30 Removed -t option (workaround for an Avahi issue, correctly solved by opening network port UDP 5353 in firewall). Remove -g debug flag from CMAKE_CFLAGS. Postpend (instead of prepend) build environment CFLAGS to CMAKE_CFLAGS. Refactor parts of uxplay.cpp
1.60 2022-12-15 Added exit with error message if DNSServiceRegister fails (instead of just stalling). Test for Client's attempt to using unsupported AirPlay 2 "REMOTE CONTROL" protocol (with no timing channel), and exit if this occurs. Reworked metadata processing to correctly parse DMAP header (previous version worked with DMAP messages currently received, but was not correct).
1.59 2022-12-12 remove "ZOOMFIX" compile option and make compilation with X11-dependence the default if X11 development libraries are detected (this now also provides fullscreen mode with a F11 or Alt+Enter key toggle); ZOOMFIX is now automatically applied for GStreamer < 1.20. New cmake option -DNO_X11_DEPS compiles uxplay without X11 dependence. Reworked internal metadata handling. Fix segfault with "-vs 0".
1.58 2022-10-29 Add option "-nohold" that will drop existing connections when a new client connects. Update llhttp to v8.1.0.
1.57 2022-10-09 Minor fixes: (fix coredump on AUR on "stop mirroring", occurs when compiled with AUR CFLAGS -DFORTIFY_SOURCE); graceful exit when required plugins are missing; improved support for builds on Windows. Include audioresample in GStreamer audio pipeline.
1.56 2022-09-01 Added support for building and running UxPlay-1.56 on Windows (no changes to Unix (Linux, *BSD, macOS) codebase.)
1.56 2022-07-30 Remove -bt709 from -rpi, -rpiwl, -rpifb as GStreamer is now fixed.
1.55 2022-07-04 Remove the bt709 fix from -v4l2 and create a new -bt709 option (previous "-v4l2" is now "-v4l2 -bt709"). This allows the currently-required -bt709 option to be used on its own on RPi without -v4l2 (sometimes this give better results).
1.54 2022-06-25 Add support for "Cover Art" display in Audio-only (ALAC) mode. Reverted a change that caused VAAPI to crash with AMD POLARIS graphics cards. Minor internal changes to plist code and uxplay option parsing.
1.53 2022-06-13 Internal changes to audio sync code, revised documentation, Minor bugfix (fix assertion crash when resent audio packets are empty).
1.52 2022-05-05 Cleaned up initial audio sync code, and reformatted streaming debug output (readable aligned timestamps with decimal points in seconds). Eliminate memory leaks (found by valgrind). Support for display of ALAC (audio-only) metadata (soundtrack artist names, titles etc.) in the uxplay terminal.
1.51 2022-04-24 Reworked options forVideo4Linux2 support (new option -v4l2) and short options -rpi, -rpifb, -rpiwl as synonyms for -v4l2, -v4l2 -vs kmssink, and -v4l2 -vs waylandsink. Reverted a change from 1.48 that broke reconnection after "Stop Mirroring" is sent by client.
1.50 2022-04-22 Added -fs fullscreen option (for Wayland or VAAPI plugins only), Changed -rpi to be for framebuffer ("lite") RPi systems and added -rpigl (OpenGL) and -rpiwl (Wayland) options for RPi Desktop systems. Also modified timestamps from "DTS" to "PTS" for latency improvement, plus internal cleanups.
1.49 2022-03-28 Addded options for dumping video and/or audio to file, for debugging, etc. h264 PPS/SPS NALU's are shown with -d. Fixed video-not-working for M1 Mac clients.
1.48 2022-03-11 Made the GStreamer video pipeline fully configurable, for use with hardware h264 decoding. Support for Raspberry Pi.
1.47 2022-02-05 Added -FPSdata option to display (in the terminal) regular reports sent by the client about video streaming performance. Internal cleanups of processing of video packets received from the client. Added -reset n option to reset the connection after n ntp timeouts (also reset after "connection reset by peer" error in video stream).
1.46 2022-01-20 Restore pre-1.44 behavior (1.44 may have broken hardware acceleration): once again use decodebin in the video pipeline; introduce new option "-avdec" to force software h264 decoding by libav h264, if needed (to prevent selection of vaapisink by autovideosink). Update llhttp to v6.0.6. UxPlay now reports itself as AppleTV3,2. Restrict connections to one client at a time (second client must now wait for first client to disconnect).
1.45 2022-01-10 New behavior: close video window when client requests "stop mirroring". (A new "no close" option "-nc" is added for users who wish to retain previous behavior that does not close the video window).
1.44 2021-12-13 Omit hash of aeskey with ecdh_secret for an AirMyPC client; make an internal rearrangement of where this hash is done. Fully report all initial communications between client and server in -d debug mode. Replace decodebin in GStreamer video pipeline by h264-specific elements.
1.43 2021-12-07 Various internal changes, such as tests for successful decryption, uniform treatment of informational/debug messages, etc., updated README.
1.42 2021-11-20 Fix MAC detection to work with modern Linux interface naming practices, MacOS and *BSD.
1.41 2021-11-11 Further cleanups of multiple audio format support (internal changes, separated RAOP and GStreamer audio/video startup)
1.40 2021-11-09 Cleanup segfault in ALAC support, manpage location fix, show request Plists in debug mode.
1.39 2021-11-06 Added support for Apple Lossless (ALAC) audio streams.
1.38 2021-10-8 Add -as audiosink option to allow user to choose the GStreamer audiosink.
1.37 2021-09-29 Append "@hostname" to AirPlay Server name, where "hostname" is the name of the server running uxplay (reworked change in 1.36).
1.36 2021-09-29 Implemented suggestion (by @mrbesen and @PetrusZ) to use hostname of machine runing uxplay as the default server name
1.35.1 2021-09-28 Added the -vs 0 option for streaming audio, but not displaying video.
1.35 2021-09-10 now uses a GLib MainLoop, and builds on macOS (tested on Intel Mac, 10.15 ). New option -t timeout for relaunching server if no connections were active in previous timeout seconds (to renew Bonjour registration).
1.341 2021-09-04 fixed: render logger was not being destroyed by stop_server()
1.34 2021-08-27 Fixed "ZOOMFIX": the X11 window name fix was only being made the first time the GStreamer window was created by uxplay, and not if the server was relaunched after the GStreamer window was closed, with uxplay still running. Corrected in v. 1.34
If you need to do this, note that you may be able to use a newer version (OpenSSL-3.0.1 is known to work). You will need the standard development toolset (autoconf, automake, libtool). Download the source code from https://www.openssl.org/source/. Install the downloaded openssl by opening a terminal in your Downloads directory, and unpacking the source distribution: ("tar -xvzf openssl-3.0.1.tar.gz ; cd openssl-3.0.1"). Then build/install with "./config ; make ; sudo make install_dev". This will typically install the needed library libcrypto.*
, either in /usr/local/lib or /usr/local/lib64.
(Ignore the following for builds on MacOS:) On some systems like Debian or Ubuntu, you may also need to add a missing entry /usr/local/lib64
in /etc/ld.so.conf (or place a file containing "/usr/local/lib64/libcrypto.so" in /etc/ld.so.conf.d) and then run "sudo ldconfig".
(Note: on Debian 9 "Stretch" or Ubuntu 16.04 LTS editions, you can avoid this step by installing libplist-dev and libplist3 from Debian 10 or Ubuntu 18.04.) As well as the usual build tools (autoconf, automake, libtool), you may need to also install some libpython*-dev package. Download the latest source with git from https://github.com/libimobiledevice/libplist, or get the source from the Releases section (use the *.tar.bz2 release, not the *.zip or *.tar.gz versions): download libplist-2.3.0, then unpack it ("tar -xvjf libplist-2.3.0.tar.bz2 ; cd libplist-2.3.0"), and build/install it: ("./configure ; make ; sudo make install"). This will probably install libplist-2.0.* in /usr/local/lib. The new libplist-2.3.0 release should be compatible with UxPlay; libplist-2.2.0 is also available if there are any issues.
(Ignore the following for builds on MacOS:) On some systems like Debian or Ubuntu, you may also need to add a missing entry /usr/local/lib
in /etc/ld.so.conf (or place a file containing "/usr/local/lib/libplist-2.0.so" in /etc/ld.so.conf.d) and then run "sudo ldconfig".
All the resources in this repository are written using only freely available information from the internet. The code and related resources are meant for educational purposes only. It is the responsibility of the user to make sure all local laws are adhered to.
This project makes use of a third-party GPL library for handling FairPlay. The legal status of that library is unclear. Should you be a representative of Apple and have any objections against the legality of the library and its use in this project, please contact the developers and the appropriate steps will be taken.
Given the large number of third-party AirPlay receivers (mostly closed-source) available for purchase, it is our understanding that an open source implementation of the same functionality wouldn't violate any of Apple's rights either.
[adapted from fdraschbacher's notes on RPiPlay antecedents]
The code in this repository accumulated from various sources over time. Here is an attempt at listing the various authors and the components they created:
UxPlay was initially created by antimof from RPiPlay, by replacing its Raspberry-Pi-adapted OpenMAX video and audio rendering system with GStreamer rendering for desktop Linux systems; the antimof work on code in renderers/
was later backported to RPiPlay, and the antimof project became dormant, but was later revived at the current GitHub site to serve a wider community of users.
The previous authors of code included in UxPlay by inheritance from RPiPlay include:
lib/playfair
folder. License: GNU GPLlib/
originally stems from this project. License: GNU LGPLv2.1+lib/
concerning mirroring is dsafa22's work. License: GNU LGPLv2.1+Independent of UxPlay, but used by it and bundled with it:
lib/llhttp/
. License: MIT