Hinweis: AirPlay2-Multiroom-Audio-Streaming wird nicht unterstützt. Verwenden Sie dazu shairport-sync.
.
Installieren Sie uxplay auf Debian-basierten Linux-Systemen mit „ sudo apt install uxplay
“; unter FreeBSD mit „ sudo pkg install uxplay
“. Auch auf Arch-basierten Systemen über AUR verfügbar. Seit v. 1.66 wird uxplay von Fedora 38 nun auch im RPM-Format verpackt („ sudo dnf install uxplay
“).
Für andere RPM-basierte Distributionen, die UxPlay noch nicht gepackt haben, wird jetzt eine RPM-„Spezifikationsdatei“ uxplay.spec mit aktuellen Versionen bereitgestellt (siehe deren „Assets“) und kann auch im obersten Quellverzeichnis von UxPlay gefunden werden. Weitere Informationen zum Erstellen eines installierbaren RPM-Pakets finden Sie im Abschnitt zur Verwendung dieser Spezifikationsdatei.
Nach der Installation:
(Unter Linux und *BSD): Wenn auf dem Server, auf dem UxPlay gehostet wird, eine Firewall aktiv ist, stellen Sie sicher, dass der Standardnetzwerkport (UDP 5353) für mDNS/DNS-SD-Abfragen geöffnet ist (weitere Einzelheiten finden Sie weiter unten unter „Fehlerbehebung“). Öffnen Sie außerdem drei UDP- und drei TCP-Ports für Uxplay und verwenden Sie die Option „uxplay -p“ (siehe „ man uxplay
“ oder „ uxplay -h
“).
Auch wenn Sie das vorkompilierte uxplay-Binärpaket Ihrer Distribution installieren, müssen Sie möglicherweise die folgenden Anweisungen zum Ausführen von UxPlay lesen, um zu sehen, welche der GStreamer-Plugin-Pakete Ihrer Distribution Sie ebenfalls installieren sollten.
Im Nur-Audio-Modus (Apple Music usw.) wird die beste Qualität mit der Option „uxplay -async“ erzielt, allerdings gibt es dann eine von iOS auferlegte Latenz von 2 Sekunden.
Fügen Sie alle UxPlay-Optionen, die Sie als Standard verwenden möchten, zu einer Startdatei ~/.uxplayrc
hinzu (siehe „ man uxplay
“ oder „ uxplay -h
“ für Format und andere mögliche Speicherorte). Insbesondere wenn Ihr System PipeWire-Audio- oder Wayland-Videosysteme verwendet, möchten Sie möglicherweise „als Pipewiresink“ oder „vs Waylandsink“ als Standardwerte zur Datei hinzufügen. (Die Ausgabe der Terminalbefehle „ps waux | grep pulse“ oder „pactl info“ enthält „pipewire“, wenn Ihr Linux/BSD-System es verwendet.)
Auf Raspberry Pi: Wenn Sie Ubuntu 22.10 oder früher verwenden, muss GStreamer gepatcht werden, um die Hardware-Videodekodierung durch die Broadcom-GPU zu verwenden (ebenfalls empfohlen, aber optional für Raspberry Pi OS (Bullseye): Verwenden Sie die Option „ uxplay -bt709
“, wenn Sie sie nicht verwenden den Patch).
Informationen zum (einfachen) Kompilieren des neuesten UxPlay aus dem Quellcode finden Sie im Abschnitt „UxPlay erhalten“.
Bei diesem Projekt handelt es sich um einen GPLv3-Open-Source-Unix-AirPlay2-Mirror-Server für Linux, macOS und *BSD. Es wurde ursprünglich von antimof unter Verwendung von Code von OpenMAX-basiertem RPiPlay entwickelt, das wiederum von AirplayServer, shairplay und playfair abgeleitet ist. (Die Antimof-Site ist nicht mehr an der Entwicklung beteiligt, veröffentlicht jedoch regelmäßig Updates, die von der neuen Haupt-UxPlay-Site stammen.)
UxPlay wird auf einer Reihe von Systemen getestet, darunter (unter anderem) Debian (10 „Buster“, 11 „Bullseye“, 12 „Bookworm“), Ubuntu (20.04 LTS, 22.04 LTS, 23.04 (auch Ubuntu-Derivate Linux Mint, Pop! _OS), Red Hat und Klone (Fedora 38, Rocky Linux 9.2), openSUSE Leap 15.5, Mageia 9, OpenMandriva „ROME“, PCLinuxOS, Arch Linux, Manjaro und sollte auf jedem Linux-System laufen. Auch auf macOS Catalina und Ventura getestet (Intel) und Sonoma (M2), FreeBSD 14.0, Windows 10 und 11 (64 Bit).
Auf Raspberry Pi 4 Modell B wird es auf Raspberry Pi OS (Bullseye und Bookworm) (32- und 64-Bit), Ubuntu 22.04 LTS und 23.04, Manjaro RPi4 23.02 und (ohne Hardware-Videodekodierung) auf openSUSE 15.5 getestet. Auch getestet auf Raspberry Pi Zero 2 W, 3 Modell B+ und jetzt 5.
Sein Hauptzweck besteht darin, wie ein AppleTV für die Bildschirmspiegelung (mit Audio) von iOS/iPadOS/macOS-Clients (iPhone, iPod Touch, iPad, Mac-Computer) auf dem Serverdisplay eines Hosts zu fungieren, auf dem Linux, macOS oder ein anderes Unix läuft (und jetzt auch Microsoft Windows). UxPlay unterstützt das AirPlay2-Protokoll von Apple mithilfe des „Legacy Protocol“, einige Funktionen fehlen jedoch. (Einzelheiten darüber, was öffentlich über das AirPlay 2-Protokoll von Apple bekannt ist, finden Sie hier, hier und hier; siehe auch pyatv, das eine Ressource zum Hinzufügen moderner Protokolle sein könnte.) Es gibt zwar keine Garantie dafür, dass zukünftige iOS-Versionen weiterhin das „Legacy Protocol“ unterstützen ", iOS 17 unterstützt weiterhin.
Der UxPlay-Server und sein Client müssen sich im selben lokalen Netzwerk befinden, in dem auch ein Bonjour/Zeroconf mDNS/DNS-SD-Server läuft (nur der DNS-SD-Dienst „Service Discovery“ ist unbedingt erforderlich, es ist nicht erforderlich, dass der Das lokale Netzwerk muss ebenfalls vom mDNS-basierten Typ „.local“ sein. Auf Linux- und BSD-Unix-Servern wird dies normalerweise von Avahi über den Dienst avahi-daemon bereitgestellt und ist in den meisten Linux-Distributionen enthalten (dieser Dienst kann auch von macOS-, iOS- oder Windows-Servern bereitgestellt werden).
Verbindungen zum UxPlay-Server durch iOS-/MacOS-Clients können sowohl im AirPlay Mirror- Modus (der verlustbehaftet komprimiertes AAC-Audio streamt und gleichzeitig den Client-Bildschirm spiegelt) als auch im alternativen AirPlay Audio- Modus, der Apple Lossless (ALAC)-Audio ohne Bildschirmspiegelung streamt, initiiert werden Im Audiomodus werden Metadaten im uxplay-Terminal angezeigt. Wenn die UxPlay-Option -ca
verwendet wird, wird das zugehörige Cover auch in einer regelmäßig aktualisierten Datei
ausgegeben und kann mit einem (Neuladen) angezeigt werden. Sie können während einer aktiven Verbindung zwischen dem Spiegelungs- und dem Audiomodus wechseln : Stoppen Sie im Spiegelungsmodus die Spiegelung (oder schließen Sie das Spiegelungsfenster) und starten Sie eine Audiomodus -Verbindung. Wechseln Sie zurück, indem Sie eine Spiegelungsmodus -Verbindung starten. Die Kunstanzeige stoppt/startet neu, wenn Sie den Audiomodus verlassen/wieder aufrufen .
Beachten Sie, dass Apple Video-DRM (wie in den „Apple TV App“-Inhalten auf dem Client zu finden) von UxPlay nicht entschlüsselt werden kann und die Apple TV App nicht im AirPlay Mirror-Modus von UxPlay angesehen werden kann (nur das ungeschützte Audio wird in AAC gestreamt). Format), aber sowohl Video- als auch Audioinhalte von DRM-freien Apps wie der „YouTube-App“ werden von UxPlay im Mirror-Modus gestreamt.
Da UxPlay derzeit kein Nicht-Spiegel-AirPlay-Videostreaming unterstützt (wobei der Client einen Webserver auf dem AirPlay-Server steuert, der HLS-Inhalte direkt empfängt, um zu verhindern, dass diese vom Client dekodiert und neu kodiert werden), verwenden Sie das Symbol für AirPlay-Video in Apps wie die YouTube-App senden nur Audio (im verlustfreien ALAC-Format) ohne das dazugehörige Video (es ist geplant, HLS-Video in zukünftigen Versionen von UxPlay zu unterstützen).
UxPlay verwendet GStreamer-„Plugins“ zum Rendern von Audio und Video. Das bedeutet, dass Video und Audio „out of the box“ durch eine Auswahl an Plugins unterstützt werden. AirPlay streamt Videos im h264-Format: Die gstreamer-Dekodierung ist Plugin-unabhängig und verwendet beschleunigte GPU-Hardware-h264-Decoder, sofern verfügbar; Wenn nicht, wird Software-Dekodierung verwendet.
VAAPI für integrierte Intel- und AMD-Grafikkarten, NVIDIA mit „Nouveau“-Open-Source-Treiber
Bei einer Intel- oder AMD-GPU ist die Hardware-Dekodierung mit dem Open-Source-VAAPI-Gstreamer-Plugin vorzuziehen. Auch die Open-Source-Treiber „Nouveau“ für NVIDIA-Grafiken werden grundsätzlich unterstützt: siehe hier, allerdings muss VAAPI um Firmware ergänzt werden, die aus den proprietären NVIDIA-Treibern extrahiert wurde.
NVIDIA mit proprietären Treibern
Das nvh264dec
Plugin (seit GStreamer-1.18.0 in gstreamer1.0-plugins-bad enthalten) kann zur beschleunigten Videodekodierung auf der NVIDIA-GPU verwendet werden, nachdem NVIDIAs CUDA-Treiber libcuda.so
installiert wurde. Für GStreamer-1.16.3 oder früher heißt das Plugin nvdec
und muss vom Benutzer erstellt werden.
Video4Linux2-Unterstützung für h264-Hardware-Dekodierung auf Raspberry Pi (Pi 4B und älter)
Raspberry Pi (RPi)-Computer (getestet auf Pi 4 Model B) können UxPlay jetzt mit Software-Videodekodierung ausführen, aber die hardwarebeschleunigte h264/h265-Dekodierung durch Firmware in der Broadcom 2835-GPU des Pi wird bevorzugt. UxPlay greift darauf über das Plugin GStreamer-1.22 Video4Linux2 (v4l2) zu; Verwendet das nicht zum Mainline-Linux-Kernelmodul gehörende bcm2835-codec, das von Raspberry Pi verwaltet wird und bislang nur im Raspberry Pi-Betriebssystem enthalten ist, sowie zwei weitere Distributionen (Ubuntu, Manjaro), die mit Raspberry Pi Imager verfügbar sind. (Für GStreamer < 1.22 siehe das UxPlay-Wiki) .
(Neu): Unterstützung für h265 (HEVC) Hardware-Dekodierung auf Raspberry Pi (Pi 4 Modell B und Pi 5)
Es gibt Unterstützung, aber bisher wurden keine zufriedenstellenden Ergebnisse erzielt. Das Pi-Modell 5 bietet nur eine hardwarebeschleunigte (GPU) Dekodierung für h265-Videos, nicht jedoch H264, da seine CPU leistungsstark genug für eine zufriedenstellende Software-H264-Dekodierung ist
Die GPLv3-Lizenz von UxPlay verfügt nicht über eine zusätzliche „GPL-Ausnahme“, die ausdrücklich die Verbreitung in kompilierter Form erlaubt, wenn sie mit OpenSSL-Versionen vor Version 3.0.0 verknüpft ist (ältere Versionen von OpenSSL haben eine Lizenzklausel, die mit der GPL nicht kompatibel ist, es sei denn, OpenSSL kann dies sein). wird als „Systembibliothek“ betrachtet, was in *BSD der Fall ist). Viele Linux-Distributionen behandeln OpenSSL als „Systembibliothek“, einige (z. B. Debian) jedoch nicht: In diesem Fall wird das Problem durch die Verknüpfung mit OpenSSL-3.0.0 oder höher gelöst.
Laden Sie entweder UxPlay-master.zip herunter und entpacken Sie es, oder (wenn Git installiert ist): „git clone https://github.com/FDH2/UxPlay“. Sie können auch eine aktuelle oder frühere Version herunterladen, die unter „Releases“ aufgeführt ist.
(Passen Sie diese Anweisungen für nicht auf Debian basierende Linuxes oder *BSD an; für macOS siehe spezifische Anweisungen unten). Hilfe bei etwaigen Schwierigkeiten finden Sie im Abschnitt „Fehlerbehebung“ weiter unten.
Sie benötigen einen C/C++-Compiler (z. B. g++) mit installierten Standard-Entwicklungsbibliotheken. Debian-basierte Systeme stellen ein Paket „build-essential“ zur Verwendung beim Kompilieren von Software bereit. Sie benötigen außerdem pkg-config: Wenn es von „ which pkg-config
“ nicht gefunden wird, installieren Sie pkg-config oder seinen gleichwertigen Ersatz pkgconf. Stellen Sie außerdem sicher, dass cmake>=3.5 installiert ist: „ sudo apt install cmake
“ (fügen Sie bei Bedarf build-essential
und pkg-config
(oder pkgconf
) hinzu).
Stellen Sie sicher, dass Ihre Distribution OpenSSL 1.1.1 oder höher und libplist 2.0 oder höher bereitstellt. (Dies bedeutet Debian 10 „Buster“-basierte Systeme (z. B. Ubuntu 18.04) oder neuer; auf Debian 10-Systemen ist „libplist“ eine ältere Version, Sie benötigen „libplist3“.) Wenn dies nicht der Fall ist, müssen Sie möglicherweise erstellen und installieren diese aus der Quelle (siehe Anweisungen am Ende dieser README-Datei).
Wenn Sie eine nicht standardmäßige OpenSSL-Installation haben, müssen Sie möglicherweise die Umgebungsvariable OPENSSL_ROOT_DIR festlegen ( z. B. „ export OPENSSL_ROOT_DIR=/usr/local/lib64
“, wenn es dort installiert ist). Ebenso setzen Sie für nicht standardmäßige (oder mehrere) GStreamer-Installationen die Umgebungsvariable GSTREAMER_ROOT_DIR auf das Verzeichnis, das das Verzeichnis „.../gstreamer-1.0/“ der gstreamer-Installation enthält, die UxPlay verwenden soll (wenn dies z. B. „~ /my_gstreamer/lib/gstreamer-1.0/“, legen Sie diesen Speicherort mit „ export GSTREAMER_ROOT_DIR=$HOME/my_gstreamer/lib
“ fest.
Wechseln Sie dann in einem Terminalfenster in das Quellverzeichnis des heruntergeladenen Quellcodes („UxPlay-*“, „*“ = „master“ oder das Release-Tag für Zipfile-Downloads, „UxPlay“ für „git clone“-Downloads). Befolgen Sie die nachstehenden Anweisungen:
Hinweis: Standardmäßig wird UxPlay mit einer Optimierung für den Computer erstellt, auf dem es erstellt wird. Wenn dies nicht der Fall ist, z. B. beim Packen einer Distribution, verwenden Sie die cmake-Option -DNO_MARCH_NATIVE=ON
.
Wenn Sie X11 Windows unter Linux oder *BSD verwenden und den Vollbildmodus mit einem Tastendruck (F11 oder Alt_L+Eingabetaste) ein-/ausschalten möchten, muss UxPlay mit einer Abhängigkeit von Ab UxPlay-1.59 erfolgt dies standardmäßig, WENN die X11-Entwicklungsbibliotheken installiert und erkannt werden. Installieren Sie diese mit „ sudo apt install libx11-dev
“. Wenn GStreamer < 1.20 erkannt wird, wird auch eine von Bildschirmfreigabe-Apps ( z . B. Zoom) benötigte Korrektur vorgenommen.
-DNO_X11_DEPS=ON
.sudo apt install libssl-dev libplist-dev
". ( es sei denn, Sie müssen OpenSSL und libplist aus dem Quellcode erstellen ).sudo apt install libavahi-compat-libdnssd-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
. (* Überspringen, wenn Sie Gstreamer aus dem Quellcode erstellt haben )cmake .
( Für einen saubereren Build, der nützlich ist, wenn Sie die Quelle ändern, ersetzen Sie dies durch „ mkdir build; cd build; cmake ..
„: Sie können dann bei Bedarf den Inhalt des build
-Verzeichnisses löschen, ohne dass dies Auswirkungen auf die Quelle hat. ) Außerdem Fügen Sie hier nach Bedarf alle cmake-Optionen „ -D
“ hinzu (z. B. -DNO_X11_DEPS=ON
oder -DNO_MARCH_NATIVE=ON
).make
sudo make install
(Sie können anschließend mit sudo make uninstall
im selben Verzeichnis deinstallieren, in dem dies ausgeführt wurde). Dies installiert die ausführbare Datei „ uxplay
“ nach /usr/local/bin
(und installiert eine Manpage an einen Standardort wie /usr/local/share/man/man1
und README-Dateien an einen Ort wie /usr/local/share/doc/uxplay
). (Wenn „man uxplay“ fehlschlägt, prüfen Sie, ob $MANPATH festgelegt ist: Wenn ja, muss der Pfad zur Manpage (normalerweise /usr/local/share/man/) zu $MANPATH hinzugefügt werden.) Die ausführbare Datei von uxplay kann ebenfalls vorhanden sein befindet sich nach dem Build-Vorgang im Build-Verzeichnis, wenn Sie es vor der Installation testen möchten (in diesem Fall müssen die GStreamer-Plugins zuerst installiert werden).
**Für diejenigen mit RPM-basierten Distributionen ist auch eine RPM-Spezifikationsdatei uxplay.spec verfügbar: siehe Erstellen eines installierbaren RPM-Pakets.
Red Hat oder Klone wie CentOS (jetzt weitergeführt als Rocky Linux oder Alma Linux): (sudo dnf install oder sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel gstreamer1-devel gstreamer1-plugins-base- devel (+libX11-devel für Vollbild-X11) (einige davon befinden sich möglicherweise im Add-on-Repository „CodeReady“, von Klonen „PowerTools“ genannt)
Mageia, PCLinuxOS, OpenMandriva: Wie Red Hat, außer Namensänderungen: (Mageia) „gstreamer1.0-devel“, „gstreamer-plugins-base1.0-devel“; (OpenMandriva) „libopenssl-devel“, „gstreamer-devel“, „libgst-plugins-base1.0-devel“. PCLinuxOS: wie Mageia, verwendet jedoch synaptic (oder apt) als Paketmanager.
openSUSE: (sudo zypper install) libopenssl-3-devel (ehemals libopenssl-devel) libplist-2_0-devel (ehemals libplist-devel) avahi-compat-mDNSResponder-devel gstreamer-devel gstreamer-plugins-base-devel (+ libX11- Entwicklung für Vollbild X11).
Arch Linux ( Auch als Paket in AUR verfügbar ): (sudo pacman -Syu) openssl libplist avahi gst-plugins-base.
FreeBSD: (sudo pkg install) libplist gstreamer1. Zur Bereitstellung der dns_sd-Bibliothek muss außerdem entweder avahi-libdns oder mDNSResponder installiert sein. OpenSSL ist bereits als Systembibliothek installiert.
Erstmalige RPM-Builder sollten zuerst die Pakete rpm-build und rpmdevtools installieren und dann den rpmbuild-Baum mit „ rpmdev-setuptree
“ erstellen. Laden Sie dann uxplay.spec herunter und kopieren Sie es nach ~/rpmbuild/SPECS
. Führen Sie in diesem Verzeichnis „ rpmdev-spectool -g -R uxplay.spec
“ aus, um die entsprechende Quelldatei uxplay-*.tar.gz
in ~/rpmbuild/SOURCES
herunterzuladen („rpmdev-spectool“ kann auch einfach „spectool“ heißen) ); Führen Sie dann „ rpmbuild -ba uxplay.spec
“ aus (Sie müssen alle in diesem Bericht erforderlichen Abhängigkeiten installieren). Dadurch sollte das uxplay RPM-Paket in einem Unterverzeichnis von ~/rpmbuild/RPMS
erstellt werden. ( uxplay.spec wurde auf Fedora 38, Rocky Linux 9.2, openSUSE Leap 15.5, Mageia 9, OpenMandriva, PCLinuxOS getestet; es kann leicht geändert werden, um Abhängigkeitslisten für andere RPM-basierte Distributionen einzuschließen.)
Als nächstes installieren Sie die benötigten GStreamer-Plugins mit sudo apt install gstreamer1.0-
. Die erforderlichen Werte für
sind:
Debian-basierte Distributionen teilen einige der Plugin-Pakete in kleinere Teile auf: Einige, die möglicherweise auch benötigt werden, umfassen „ gl “ für die OpenGL-Unterstützung (dies stellt den Videosink „-vs glimagesink“ bereit, der auf vielen Systemen (einschließlich Raspberry Pi) sehr nützlich sein kann ) und sollte immer verwendet werden, wenn die h264/h265-Dekodierung durch eine NVIDIA-GPU verwendet wird), „ gtk3 “ (das den Videosink „-vs gtksink“ bereitstellt) und „ x “ für X11-Unterstützung, obwohl diese möglicherweise bereits installiert sind; „ vaapi “ wird für die hardwarebeschleunigte h264-Videodekodierung durch Intel- oder AMD-Grafiken benötigt (jedoch nicht für die Verwendung mit NVIDIA unter Verwendung proprietärer Treiber). Wenn der Ton nicht funktioniert, müssen möglicherweise die Plugins „ alsa “, „ pulseaudio “ oder „ pipewire “ installiert werden, je nachdem, wie Ihr Audio eingerichtet ist.
In einigen Fällen ist die libav-Plugin-Funktion avdec_aac, die zum Dekodieren von AAC-Audio im Spiegelmodus erforderlich ist, aufgrund von Patentproblemen in der offiziellen Distribution nicht enthalten. Besorgen Sie sich diese aus den Community-Repositories für diese Distributionen.
Red Hat oder Klone wie CentOS (jetzt weitergeführt als Rocky Linux oder Alma Linux): Installieren Sie gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi für Intel/AMD-Grafik). Im aktuellen Fedora wurde gstreamer1-libav in gstreamer1-plugin-libav umbenannt. Um avdec_aac zu erhalten, installieren Sie Pakete von rpmfusion.org : (holen Sie sich ffmpeg-libs von rpmfusion; auf RHEL oder Klonen, aber nicht aktuellem Fedora, holen Sie sich auch gstreamer1-libav von dort).
Mageia, PCLinuxOS, OpenMandriva: Installieren Sie gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi für Intel/AMD-Grafik). Um auf Mageia avdec_aac zu erhalten, installieren Sie ffmpeg aus dem „tainted“-Repository (das auch ein vollständigeres gstreamer1.0-plugins-bad bereitstellt).
openSUSE: Installieren Sie gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi für Intel/AMD-Grafik). Um avdec_aac zu erhalten, installieren Sie libav*-Pakete für openSUSE von Packman „Essentials“ ; Empfehlung: Nach dem Hinzufügen des Packman-Repositorys nutzen Sie die Option in der YaST-Softwareverwaltung, um alle Systempakete für Multimedia auf Packman umzustellen.
Arch Linux Installieren Sie gst-plugins-good gst-plugins-bad gst-libav (+ gstreamer-vaapi für Intel/AMD-Grafik).
FreeBSD: Installieren Sie gstreamer1-libav, gstreamer1-plugins, gstreamer1-plugins-* (* = core, good, bad, x, gtk, gl, vulkan, pulse, v4l2, ...), (+ gstreamer1-vaapi für Intel/ AMD-Grafik).
Seit UxPlay-1.64 kann UxPlay mit Optionen gestartet werden, die aus einer Konfigurationsdatei gelesen werden. Dabei handelt es sich um die erste gefundene Datei (1) mit einem Pfad, der durch die Umgebungsvariable $UXPLAYRC
angegeben ist, (2) ~/.uxplayrc
im Zuhause des Benutzers Verzeichnis („~“), (3) ~/.config/uxplayrc
. Das Format ist eine Option pro Zeile, wobei das anfängliche "-"
der Befehlszeilenoption weggelassen wird. Zeilen in der Konfigurationsdatei, die mit "#"
beginnen, werden als Kommentare behandelt und ignoriert.
Führen Sie uxplay in einem Terminalfenster aus . Auf einigen Systemen können Sie den Vollbildmodus mit der Option -fs
festlegen oder mit F11 oder (links gedrückt gehaltener Alt-Taste)+Eingabetaste in den Vollbildmodus wechseln oder ihn verlassen. Verwenden Sie Strg-C (oder schließen Sie das Fenster), um es zu beenden, wenn Sie fertig sind. Wenn der UxPlay-Server im Dropdown-Feld „Bildschirmspiegelung“ des iOS-Clients nicht angezeigt wird, überprüfen Sie, ob Ihr DNS-SD-Server (normalerweise avahi-daemon) ausgeführt wird: Führen Sie dies in einem Terminalfenster mit systemctl status avahi-daemon
aus. Wenn dies zeigt, dass der avahi-daemon nicht läuft, steuern Sie ihn mit sudo systemctl [start,stop,enable,disable] avahi-daemon
(auf Nicht-Systemd-Systemen wie *BSD verwenden Sie sudo service avahi-daemon [status, start, stop, restart, ...]
). Wenn UxPlay angezeigt wird, der Client jedoch bei Auswahl keine Verbindung herstellen kann, gibt es möglicherweise eine Firewall auf dem Server, die verhindert, dass UxPlay Client-Verbindungsanfragen empfängt, es sei denn, einige Netzwerkports sind geöffnet: Wenn eine Firewall aktiv ist, öffnen Sie auch UDP-Port 5353 (für mDNS-Anfragen) wird von Avahi benötigt . Hilfe bei diesem oder anderen Problemen finden Sie weiter unten unter „Fehlerbehebung“.
Im Gegensatz zu einem Apple TV erfordert der UxPlay-Server standardmäßig nicht, dass Clients sich zunächst über einen vom Server angezeigten PIN-Code mit ihm „koppeln“ (danach „vertraut“ der Client dem Server und muss dies nicht wiederholen). Seit v1.67 bietet Uxplay eine solche „Pin-Authentifizierung“ als Option an: Einzelheiten finden Sie unter „ -pin
“ und „ -reg
“ in der Verwendung, wenn Sie sie verwenden möchten. Einige Clients mit MDM (Mobile Device Management, häufig auf arbeitgebereigenen Geräten vorhanden) müssen eine PIN-Authentifizierung verwenden: UxPlay bietet diese auch dann, wenn es ohne PIN-Option ausgeführt wird.
Standardmäßig ist UxPlay an seinen aktuellen Client gebunden, bis dieser Client die Verbindung trennt. Seit UxPlay-1.58 ändert die Option -nohold
dieses Verhalten, sodass, wenn ein neuer Client eine Verbindung anfordert, der aktuelle Client entfernt und übernimmt. UxPlay 1.66 führt einen Mechanismus ein ( -restrict
, -allow
, -block
), um mithilfe ihrer „Geräte-ID“ (die bei Apple-Geräten unveränderlich zu sein scheint) zu steuern, welche Clients eine Verbindung herstellen dürfen.
Im Mirror-Modus hat GStreamer die Wahl zwischen zwei Methoden zum Abspielen von Videos mit dem dazugehörigen Audio: Vor UxPlay-1.64 wurden die Video- und Audiostreams so schnell wie möglich nach ihrer Ankunft abgespielt (die GStreamer-Methode „ sync=false “). , wobei eine interne GStreamer-Uhr verwendet wird, um zu versuchen, sie synchron zu halten. Ab UxPlay-1.64 ist die andere Methode (GStreamers „ sync=true “-Modus), die Zeitstempel in den vom Client gesendeten Audio- und Videostreams verwendet, die neue Standardeinstellung . Auf UxPlay-Hosts mit geringer Dekodierungsleistung (z. B. Raspberry Pi Zero W oder 3 B+-Modelle) werden dadurch Videobilder gelöscht, die nicht rechtzeitig für die Wiedergabe mit dem Audio dekodiert werden können, wodurch das Video zwar ruckelt, aber dennoch synchronisiert ist.
Die ältere Methode, die keine späten Videobilder verwirft, funktionierte gut auf leistungsstärkeren Systemen und ist immer noch mit der UxPlay-Option „ -vsync no
“ verfügbar; Diese Methode ist an „Live-Streaming“ angepasst und eignet sich möglicherweise besser, wenn Sie UxPlay beispielsweise als zweiten Monitor für einen Mac-Computer verwenden, während die neue standardmäßige zeitstempelbasierte Methode am besten zum Ansehen eines Videos geeignet ist, um Lippenbewegungen und Stimmen beizubehalten synchronisiert. (Ohne die Verwendung von Zeitstempeln bleibt das Video irgendwann hinter dem Audio zurück, wenn es nicht schnell genug dekodiert werden kann: Die hardwarebeschleunigte Videodekodierung hat dazu beigetragen, dies zuvor zu verhindern, als keine Zeitstempel verwendet wurden.)
-async
Zeitstempel- basierende Option. (Ein Beispiel könnte sein, wenn Sie den Liedtexten von Apple Music auf dem Client folgen und gleichzeitig hervorragenden Sound auf dem UxPlay-Server hören möchten.) Dadurch wird das Video auf dem Client verzögert, um mit dem Audio auf dem Server übereinzustimmen, was zu einer leichten Verzögerung führt, bevor eine auf dem Client initiierte Pause oder ein Titelwechsel auf das vom Server abgespielte Audio wirksam wird. Die AirPlay-Lautstärkeregelung dämpft die Lautstärke (Verstärkung) um bis zu -30 dB: Der Dezibelbereich -30:0 kann mithilfe der Option -db
("-db Low " oder "-db) von Low :0 oder Low : High neu skaliert werden Low : High "), Low muss negativ sein. Die Neuskalierung erfolgt linear in Dezibel. Beachten Sie, dass das Audioformat von GStreamer jede Audioverstärkung über +20 dB „beschneidet“. Halten Sie daher „Hoch “ unter diesem Wert. Die Option -taper
bietet ein „konisches“ AirPlay-Lautstärkeregelungsprofil, das einige Benutzer möglicherweise bevorzugen.
Die Optionen -vsync und -async ermöglichen zur Feinabstimmung auch eine optionale positive (oder negative) Audioverzögerungsanpassung in Millisekunden : -vsync 20.5
verzögert Audio im Verhältnis zu Video um 0,0205 Sekunden; ein negativer Wert rückt es vor.)
Sie werden möglicherweise feststellen, dass Videos durch die Einstellung -fps 60 verbessert werden, die die Wiedergabe einiger Videos mit 60 Bildern pro Sekunde ermöglicht. (Sie können sehen, welche Framerate tatsächlich gestreamt wird, indem Sie -vs fpsdisplaysink und/oder -FPSdata verwenden.) Wenn Sie dies verwenden, sollten Sie die standardmäßige zeitstempelbasierte Synchronisierungsoption -vsync
verwenden.
Seit UxPlay-1.54 können Sie das zugehörige „Cover Art“ von Quellen wie Apple Music im Audio-Only-Modus (ALAC) anzeigen: Führen Sie „ uxplay -ca
“ im Hintergrund aus und führen Sie dann einen Bildbetrachter mit automatischem Neuladen aus Feature: Ein Beispiel ist „feh“: Führen Sie „ feh -R 1
“ im Vordergrund aus; Beenden Sie feh und dann Uxplay mit „ ctrl-C fg ctrl-C
“.
Standardmäßig verwendet GStreamer einen Algorithmus, um nach dem besten zu verwendenden „Videosink“ (GStreamers Bezeichnung für einen Grafiktreiber zum Anzeigen von Bildern) zu suchen. Sie können dies mit der uxplay-Option -vs
überschreiben. Welche Videosinks verfügbar sind, hängt von Ihrem Betriebssystem und Ihrer Grafikhardware ab: Verwenden Sie „ gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
“, um zu sehen, was verfügbar ist. Einige Möglichkeiten unter Linux/*BSD sind:
glimagesink (OpenGL), waylandsink
xvimagesink , ximagesink (X11)
kmssink , fbdevsink (Konsolengrafiken ohne X11)
vaapisink (für hardwarebeschleunigte Intel/AMD-Grafik); Verwenden Sie für NVIDIA-Hardwaregrafiken (mit CUDA) glimagesink kombiniert mit „ -vd nvh264dec
“ (oder „nvh264sldec“, eine neue Variante, die in GStreamer-1.24 zu „nvh264dec“ wird).
Wenn der Server „headless“ ist (kein angeschlossener Monitor, rendert nur Audio), verwenden Sie -vs 0
.
GStreamer sucht auch nach dem besten „Audiosink“; Überschreiben Sie die Auswahl mit -as
. Zu den Optionen unter Linux gehören Pulsesink, Alsasink, Pipewiresink und Oss4sink. Sehen Sie, was mit gst-inspect-1.0 | grep sink | grep -e audio -e Audio
verfügbar ist gst-inspect-1.0 | grep sink | grep -e audio -e Audio
.
Ein häufiges Problem besteht darin, dass GStreamer versucht, falsch konfigurierte oder fehlende beschleunigte Hardware-H264-Videodekodierung (z. B. VAAPI) zu verwenden. Versuchen Sie „ uxplay -avdec
“, um die Software-Videodekodierung zu erzwingen. Wenn dies funktioniert, können Sie versuchen, bei Bedarf die beschleunigte Hardware-Videodekodierung zu reparieren, oder einfach das GStreamer-Vapi-Plugin deinstallieren.
Weitere Laufzeitoptionen finden Sie unter Verwendung.
Für Framebuffer-Videos (für Raspberry Pi OS „Lite“ und andere Nicht-X11-Distributionen) verwenden Sie den KMS-Videosink „-vs kmssink“ (der DirectFB-Framebuffer-Videosink „dfbvideosink“ ist auf dem Pi defekt und führt zu Segfaults). In diesem Fall sollten Sie explizit die Option „-vs kmssink“ verwenden, da autovideosink sonst nicht den richtigen Videosink findet.
Raspberry Pi 5 bietet keine Hardware-H264-Dekodierung (und benötigt diese auch nicht).
Pi Zero 2 W, 3 Model B+ und 4 Model B sollten Hardware-H264-Dekodierung durch die Broadcom-GPU verwenden, erfordern aber ein nicht zum Mainstream gehörendes Kernelmodul bcm2835_codec, das im Raspberry Pi-Kernelbaum verwaltet wird; Zu den Distributionen, die es bekanntermaßen bereitstellen, gehören Raspberry Pi OS, Ubuntu und Manjaro-RPi4. Verwenden Sie die Software-Dekodierung (Option -avdec), wenn dieses Modul nicht verfügbar ist.
Uxplay verwendet das Video4Linux2 (v4l2)-Plugin von GStreamer-1.22 und höher, um auf die GPU zuzugreifen, wenn Hardware-H264-Dekodierung verwendet wird. Dies sollte automatisch geschehen. Die Option -v4l2 kann verwendet werden, aber normalerweise ist es am besten, GStreamer die beste Videopipeline einfach selbst finden zu lassen.
Bei älteren Distributionen (GStreamer < 1.22) benötigt das v4l2-Plugin einen Patch: siehe UxPlay-Wiki. Das ältere Raspberry Pi-Betriebssystem (Bullseye) verfügt über einen teilweise gepatchten GStreamer-1.18.4, der die uxplay-Option -bt709 benötigt (und nicht -v4l2 verwenden); In diesem Fall ist es immer noch besser, den vollständigen Patch aus dem UxPlay-Wiki anzuwenden.
Für das „doppelte Legacy“-Raspberry-Pi-Betriebssystem (Buster) gibt es keinen Patch für GStreamer-1.14. Erstellen Sie stattdessen zunächst mithilfe dieser Anweisungen einen vollständig neueren GStreamer-1.18.6 aus dem Quellcode, bevor Sie UxPlay erstellen.
Raspberry Pi 3 Model B+ mit einem 32-Bit-Betriebssystem kann auch mit dem GStreamer OMX-Plugin auf die GPU zugreifen (verwenden Sie die Option „ -vd omxh264dec
“), dies wird jedoch durch die Pi 4 Model B-Firmware unterbrochen. Die OMX-Unterstützung wurde vom Raspberry Pi OS (Bullseye) entfernt, ist aber in Buster vorhanden.
H265 (4K) -Video wird mit Hardware-Dekodierung durch die Broadcom-GPU auf Raspberry Pi 5-Modellen sowie auf Raspberry Pi 4 Modell B unterstützt . Während GStreamer diese Hardware-Dekodierung zu nutzen scheint, bietet UxPlay eine zufriedenstellende Rendergeschwindigkeit von 4K-Videos Diese Raspberry Pi-Modelle wurden noch nicht erreicht. Zur Aktivierung der h265-Unterstützung ist die Option „-h265“ erforderlich. In diesem Modus wird eine kabelgebundene Ethernet-Verbindung bevorzugt (und kann vom Client verlangt werden).
Selbst bei GPU-Videodekodierung können einige Frames von den Modellen mit geringerer Leistung ausgelassen werden, um Audio und Video mithilfe von Zeitstempeln synchron zu halten. In älteren Raspberry Pi-Betriebssystemen (Bullseye) können Sie mit den „Leistungsoptionen“ von raspi-config angeben, wie viel Speicher der GPU zugewiesen werden soll. In Bookworm scheint diese Einstellung jedoch nicht vorhanden zu sein (sie kann jedoch durch Hinzufügen einer Zeile immer noch auf z. B. 128 MB eingestellt werden). „gpu_mem=128“ in /boot/config.txt). Ein Pi Zero 2 W (mit 512 MB Speicher) funktionierte gut, als er in 32 Bit Bullseye oder Bookworm Lite mit 128 MB für die GPU getestet wurde (Standard scheint 64 MB zu sein).
Die grundlegenden uxplay-Optionen für R Pi sind uxplay [-vs
. Die Wahl
= glimagesink
ist manchmal nützlich. Verwenden Sie mit dem Wayland-Video-Compositor
= waylandsink
. Verwenden Sie bei Framebuffer-Video
= kmssink
.
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
Ton und Video werden auf dem Remote-Host abgespielt; „nohup“ lässt uxplay weiterlaufen, wenn die SSH-Sitzung geschlossen ist. Die Terminalausgabe wird in der Datei gespeichert (kann /dev/null sein, um sie zu verwerfen)
Hinweis: Eine native Airplay -Serverfunktion ist in MacOS 12 Monterey enthalten, ist jedoch auf die jüngste Hardware beschränkt. UxPlay kann auf älteren MacOS -Systemen ausgeführt werden, die Monterey nicht ausführen können oder Monterey, aber nicht Airplay ausführen können.
Diese Anweisungen für MacOS gehen davon aus, dass die Xcode-Befehlszeilenentwickler-Tools installiert sind (wenn Xcode installiert ist, öffnen Sie den Terminal, geben Sie "sudo xcode-select--installieren" ein und akzeptieren Sie die Bedingungen).
Es wird auch angenommen, dass CMake> = 3.13 installiert ist: Dies kann mit Paketmanagern Macports ( sudo port install cmake
), Homebrew ( brew install cmake
) oder durch einen Download von https://cmake.org/download/ erfolgen. Installieren Sie auch git
, wenn Sie es verwenden, um UXPlay zu holen.
Als nächstes installieren Sie Libplist und OpenSSL-3.x. Beachten Sie, dass statische Versionen dieser Bibliotheken in den MacOS -Builds verwendet werden, sodass sie nach dem Erstellen von UXPlay, wenn Sie möchten, deinstalliert werden.
Wenn Sie Homebrew: brew install libplist openssl@3
verwenden
Wenn Sie MacPorts verwenden: sudo port install libplist-devel openssl3
Ansonsten bauen Sie Libplist und OpenSSL aus Quelle: Siehe Anweisungen gegen Ende dieses Readme; Es müssen Entwicklungstools (Autoconf, Automake, Libtool usw. ) installiert werden.
Als nächstes erhalten Sie die neueste MacOS-Version von Gstreamer-1.0.
Verwenden von "offiziellen" GStreamer (empfohlen für MacPorts- und Homebrew -Benutzer) : Installieren Sie die GStreamer -Version für macOS von https://gstreamer.freedesktop.org/download/. (Diese Version enthält eine eigene PKG-Konfiguration, sodass Sie keine installieren müssen.) Installieren Sie sowohl die GStreamer-1.0- als auch die Gstreamer-1.0-Devel-Pakete. Nach dem Herunterladen klicken Sie auf sie, um sie zu installieren (sie installieren auf /library/frameworks/gstreamer.framework). Homebrew- oder MacPorts -Benutzer sollten den von ihrem Paketmanager gelieferten Gstreamer nicht installieren (oder deinstallieren), wenn sie die "offizielle" Version verwenden.
Mit Homebrews Gstreamer : PKG-Config wird benötigt: ("Brew Installation PKG-Config Gstreamer"). Dies führt dazu, dass eine große Anzahl zusätzlicher Pakete von Homebrew als Abhängigkeiten installiert werden. Die Homebrew Gstreamer -Installation wurde kürzlich in eine einzelne "Formel" namens gstreamer
überarbeitet, die jetzt funktioniert, ohne gst_plugin_path in der Umgebung festzulegen. Homebrew installiert gstreamer zu (HOMEBREW)/lib/gstreamer-1.0
wobei (HOMEBREW)/*
ist /opt/homebrew/*
auf Apple Silicon Macs und /usr/local/*
auf Intel Macs; Setzen Sie dort keine zusätzlichen Nicht-Homebrew-Plugins (Sie bauen Sie selbst) ein und setzen Sie stattdessen GST_PLUGIN_PATH so, dass sie auf ihren Standort verweisen (Homebrew liefert keinen vollständigen Gstreamer, aber scheint alles zu haben, was für UXPlay benötigt wird).
Verwenden von Gstreamer, die von MacPorts installiert wurden : Dies wird nicht empfohlen, da derzeit der Macports Gstreamer alt ist (v1.16.2), nicht gehörte und für die Verwendung von X11 gebaut wurde:
(Wenn Sie die Macports Gstreamer-1.16.2 wirklich verwenden möchten, installieren Sie PKGConf ("Sudo Port Installation PKGConf"), dann "sudo port installieren gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good gstream1-gst-plugins -Bad gstreamer1-GST-libav ". Für X11-Unterstützung bei macOS werden -DUSE_X11=ON
mit einer speziellen CMake-Option kompilieren. X11: uxplay -s 800x600
.)
Nach dem Installieren von Gstreamer erstellen und installieren Sie UXPlay: Öffnen Sie ein Terminal und wechseln Sie in das UxPlay-Source-Verzeichnis ("uxplay-Master" für Zipfile-Downloads, "uxplay" für "Git Clone" Downloads) und bauen/installieren Sie sie mit "cmake.; sudo make install "(wie für linux).
Ausführen von uxplay beim Überprüfen auf Gstreamer -Warnungen (tun Sie dies mit "exportieren gst_debug = 2" vor runnng uxplay) enthüllt, dass mit dem Standard (da uxPlay 1.64) die Verwendung von Zeitstempeln für die Video -Synchronisierung fallen gelassen wird, werden viele Videorahmen fallen (nur auf Macos). Vielleicht aufgrund eines weiteren Fehlers (über Videometa), der in den Gstreamer -Warnungen auftaucht. Empfehlung: Verwenden Sie das neue UXPLAY "No Timestamp" -Option " -vsync no
" (Sie können in der UXPlayRC -Konfigurationsdatei eine Zeile "vsync no" hinzufügen).
Auf macOS mit dieser Installation von Gstreamer scheinen die einzigen verfügbaren VideoSinks zu sehen, wie es sich um einen Glimagesink (Standardauswahl von AutoVideosink) und Osxvideosink erstellt. Der Fenstertitel zeigt den Airplay-Servernamen nicht an, das Fenster ist jedoch für Apps mit Bildschirmfreigabe (z. B. Zoom) sichtbar. Der einzige verfügbare Audiosink scheint Osxaudiosink zu sein.
Die Option -nc wird immer verwendet, unabhängig davon, ob sie ausgewählt ist oder nicht. Dies ist eine Problemumgehung für ein Problem mit Gstreamer -Videosinks auf macOS: Wenn die Gstreamer -Pipeline zerstört wird, während das Spiegelfenster noch geöffnet ist, tritt ein Segfault auf.
Im Falle von Glimagesink beeinflussen die Auflösungseinstellungen "-s WXH" nicht die (kleine) anfängliche OpenGL-Spiegelfenstergröße, das Fenster kann jedoch mit der Maus oder dem Trackpad erweitert werden. Im Gegensatz dazu ist ein Fenster mit "-VS OSXvideosink" anfangs groß, hat jedoch das falsche Seitenverhältnis (gestrecktes Bild). In diesem Fall ändert sich das Seitenverhältnis, wenn die Fensterbreite durch Ziehen der Seite geändert wird. Die Option -vs "osxvideosink force-aspect-ratio=true"
kann verwendet werden, damit das Fenster beim ersten Öffnen das richtige Seitenverhältnis aufweist.
Laden Sie Bonjour SDK für Windows v3.0 herunter und installieren Sie sie. Sie können die SDK ohne Registrierung bei Softpedia.com herunterladen oder von der offiziellen Apple -Website https://developer.apple.com/download abrufen (Apple macht Sie als Entwickler, um von ihrer Website auf darauf zuzugreifen). Dies sollte den Bonjour SDK als C:Program FilesBonjour SDK
installieren.
(Dies gilt für 64-Bit-Fenster; ein Build für 32-Bit-Fenster sollte möglich sein, wird jedoch nicht getestet.) Die Unix-ähnliche MSYS2-Build-Umgebung wird verwendet: Laden Sie MSYS2 von der offiziellen Website https: // www herunter und installieren Sie sie .msys2.org/. Akzeptieren Sie den Standard -Installationsort C:mysys64
.
MSYS2 -Pakete werden mit einer Variante des von Arch Linux verwendeten "Pacman" -Paketmanagers installiert. Öffnen Sie im Windows -Startmenü ein "MSYS2 MINGW64" -Anminal aus der Registerkarte MSYS2 und aktualisieren Sie die neue MSYS2 -Installation mit "Pacman -Syu". Installieren Sie dann den Mingw-64- Compiler und CMake
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
Der Compiler mit allen erforderlichen Abhängigkeiten wird im Verzeichnis MSYS64 mit Standardpfad C:/msys64/mingw64
installiert. Hier erstellen wir einfach UXPlay aus der Befehlszeile in der MSYS2 -Umgebung (in dieser Verwendung " ninja
" anstelle von " make
" für das Build -System).
Laden Sie das neueste UXPLY von GitHub herunter (um git
zu verwenden, installieren Sie es mit pacman -S git
, dann " git clone https://github.com/FDH2/UxPlay
") und installieren Sie dann UXPLAY -Abhängigkeiten (OpenSSL ist bereits mit MSYS2 installiert):
pacman -S mingw-w64-x86_64-libplist mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base
Wenn Sie ein anderes Windows-Build-System ausprobieren, sind MSVC-Versionen von Gstreamer für Windows über den offiziellen Gstreamer-Standort erhältlich, aber nur der 64-Bit-Aufbau von MSYS2 wurde getestet.
CD zum Uxplay -Quellverzeichnis, dann " mkdir build
" und " cd build
". Der Erstellungsprozess geht davon aus, dass der Bonjour SDK unter C:Program FilesBonjour SDK
installiert ist. Wenn es irgendwo anders ist, legen Sie die Umweltvariable bonjour_sdk_home so fest, dass sie auf seinen Standort verweist. Dann bauen Sie uxplay mit
cmake ..
ninja
Unter der Annahme, dass in keinem dieser Fehler das UXPLAY -Executable uxPlay.exe im aktuellen ("Build") Verzeichnis erstellt hat. Die in den anderen Builds angebotenen Funktionen "sudo make install" und "sudo make deinstallieren" sind unter Windows nicht verfügbar. Stattdessen hat die MSYS2 -Umgebung /mingw64/...
verfügbar, und Sie können die ausführbare Datei uxplay.exe in C:/msys64/mingw64/bin
(plus Manpage und Dokumentation in C:/msys64/mingw64/share/...
) mit
cmake --install . --prefix /mingw64
Um die Manpage anzusehen, müssen Sie den Hersteller von " pacman -S man
" installieren.
pacman -S mingw-w64-x86_64-gst-
uxplay.exe
Andere mögliche MSYS2 -GStreamer -Plugin -Pakete, die Sie möglicherweise verwenden, sind in MSYS2 -Paketen aufgeführt.
Sie müssen auch der uxplay -ausführbaren uxplay.exe die Berechtigung erteilen, um über die Windows -Firewall auf Daten zuzugreifen. Möglicherweise werden Ihnen automatisch die Wahl angeboten, dies zu tun, wenn Sie UxPlay zum ersten Mal ausführen, oder Sie müssen dies möglicherweise mit Windows-Einstellungen-> Aktualisieren und Sicherheit-> Windows Security-> Firewall & Network Protection-> eine App über Firewall zulassen . Wenn Ihr Virusschutz uxPlay.exe als "misstrauisch" (jedoch ohne echte Malware -Signatur) fällt, müssen Sie ihm möglicherweise eine Ausnahme abgeben.
Testen Sie nun, indem Sie " uxplay
" ausführen (in einem MSYS2 -Terminalfenster). Wenn Sie den AudioSink angeben müssen, gibt es zwei Hauptoptionen unter Windows: Das ältere DirectSound -Plugin " -as directsoundsink
" und die modernere Windows -Audiositzungs -API (WASAPI) Plugin " -as wasapisink
", die zusätzliche Optionen wie z.
uxplay -as 'wasapisink device=""'
wobei
ein verfügbares Audio-Gerät
seinem GUID angibt, das mit " gst-device-monitor-1.0 Audio
{0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
befindet {0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
. Wenn " device
" nicht angegeben ist, wird das Standard -Audiogerät verwendet.
Wenn Sie die VideoSink mit der Option -vs
angeben möchten, sind einige Auswahlmöglichkeiten für d3d11videosink
, d3dvideosink
, glimagesink
, gtksink
.
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
befinden oder die Möglichkeit erhalten, mit dem ALT-ENTER-Taste in den Vollbildmodus einzuschalten und aus dem Vollbildmodus auszuschalten. Kombination mit Option -vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
. Für den Einfachheit halber werden diese Optionen hinzugefügt, wenn nur -vs d3d11videosink
mit oder ohne die Vollbildoption "-fs" verwendet wird. (Windows -Benutzer möchten möglicherweise " vs d3d11videosink
" (no initial " -
") zur Datei der Uxplay -Startoptionen hinzufügen; siehe "Man uxplay" oder "uxplay -h".) Die ausführbare uxplay.exe kann auch ohne die MSYS2 -Umgebung im Windows -Terminal mit C:msys64mingw64binuxplay
ausgeführt werden.
Optionen:
-
" Zeichen) in der Uxplay -Startdatei (entweder durch Umgebungsvariable $UXPLAYRC
oder ~/.uxplayrc
oder ~/.config/uxplayrc
); Zeilen beginnen mit " #
" als Kommentare behandelt und ignoriert. Befehlszeilenoptionen ersetzen Optionen in der Startdatei.-n server_name (Standard: uxPlay); server_name@ hostname ist der Name, der angezeigt wird und AirPlay -Dienste für Ihr iPad, iPhone usw. anbietet, wobei Hostname der Name des Servers ist, das uxplay ausgeführt wird. Dies ist jetzt auch der Name, der über dem Fenster Spiegelanzeige (X11) gezeigt wird.
-nh nicht "@ hostname " am Ende des AirPlay -Servernamens anhängen.
-H265 Aktivieren Sie "screenMulticodec" Support (AirPlay "Features" Bit 42) zum Akzeptieren von H265 (4K/HEVC) -Video zusätzlich zu H264-Video (1080p) im Screen-Mirror-Modus. Wenn diese Option verwendet wird, werden zwei "Video -Pipelines" (einer für H264, einer für H265) erstellt. Wenn Gstreamer -Plugins in der Pipeline für H264 oder H265 spezifisch sind, wird die richtige Version in jeder Pipeline verwendet. Eine Kabel-Client-Server-Ethernet-Verbindung wird für 4K-Videos gegenüber WLAN bevorzugt und wird möglicherweise vom Client benötigt. Nur aktuelle Apple-Geräte (M1/M2-Macs oder iPads und einige iPhones) können H265-Videos senden, wenn eine Auflösung "-S WXH" mit H> 1080 angefordert wird. Die Option "-h265" ändert die Standardauflösung ("-s" -Option) von 1920x1080 bis 3840x2160 und verlässt die Standard-Maximum-Framerate ("-fps" -Option) bei 30 fps.
-pin [nnnn] : (Da v1.67) verwenden Der Bildschirm zeigt eine Anmeldeaufforderung an, damit dies eingegeben wird. Wenn "-pin" von selbst verwendet wird, wird für jede Authentifizierung ein neuer zufälliger PIN-Code ausgewählt. Wenn "-pin nnnn" (z. B. "-pin 3939") verwendet wird, wird ein unveränderlicher fester Code festgelegt. Die Authentifizierung fügt den Server der Liste der "vertrauenswürdigen Server" des Clients hinzu, und der Client muss nicht wieder authentifiziert, sofern die öffentlichen Client- und Server -Tasten unverändert bleiben. (Seit v1.68 wird standardmäßig der öffentliche Server -Taste aus der MAC -Adresse generiert, die mit der Option -m geändert werden kann; siehe die Option -ke für eine alternative Methode der Schlüsselgenerierung). (Fügen Sie eine Zeile "PIN" in die UXPLAY -Startdatei hinzu, wenn Sie möchten, dass der UXPLAY -Server das PIN -Authentifizierungsprotokoll verwendet.)
-reg [ Dateiname ] : (Da V1.68). Wenn "-pin" verwendet wird, behält diese Option ein Register mit pinauthentifizierten "vertrauenswürdigen Clients" in $ home/.uxPlay.register (oder optional in Dateiname ) bei. Ohne diese Option werden Kunden, die Pin-Authentifizierung überspringen, vertrauenswürdig und nicht überprüft. Diese Option kann nützlich sein, wenn UXPLY in einer öffentlichen Umgebung verwendet wird, um Kundendetails aufzuzeichnen. Das Register ist Text, eine Zeile pro Client mit öffentlichem Schlüssel (Basis-64-Format), Geräte-ID und Gerätename. Kommentieren (mit "#") oder Löschen einer Zeile Deregistern den entsprechenden Client (siehe Optionen -Einschränkung, -Block, -Blocken Sie mehr Möglichkeiten, um den Kundenzugriff zu steuern). (Fügen Sie in der Startdatei eine Zeile "Reg" hinzu, wenn Sie diese Funktion verwenden möchten.)
-VSYNC [X] (im Spiegelmodus :) Diese Option ( jetzt der Standard ) verwendet Zeitstempel, um Audio mit Video auf dem Server zu synchronisieren, mit einer optionalen Audioverzögerung in (Dezimal-) Millisekunden ( x = "20,5" bedeutet 0,0205 Sekunden Verzögerung: Es sind positive oder negative Verzögerungen von weniger als einer Sekunde zulässig.) Es ist bei Systemen mit geringer Leistung wie Raspberry Pi ohne Hardware-Video-Dekodierung erforderlich.
-VSYNC NEIN (im Mirror-Modus :) Dies schaltet die audio-video-Synchronisation von Zeitstempel aus und restauriert das Standardverhalten vor uxPlay-1.64. Standard -Desktop -Systeme scheinen ohne Verwendung von Zeitstempeln gut zu funktionieren: Dieser Modus ist für das "Live -Streaming" geeignet, z. Damit werden keine Videobrahmen fallen gelassen.
-Async [x] (im Audio-Nur-Audio-Modus (Nur-Audio). Diese Option verwendet Zeitstempel, um Audio auf dem Server mit Video auf dem Client zu synchronisieren, mit einer optionalen Audioverzögerung in (dezimaler) Millisekunden ( x = "20,5" bedeutet 0,0205. Sekundenverzögerung: Positive oder negative Verzögerungen weniger als eine Sekunde sind zulässig.) Da der Client eine Videoverzögerung hinzufügt, um die Latenz zu berücksichtigen Der Track-Change wird nicht sofort wirksam. Dies könnte im Prinzip durch die Verwendung der Einstellung -al
-Audio -Latenz gemindert werden, um die Latenz (Standard 0,25 Sekunden) zu ändern, die der Server an den Client meldet, die sich derzeit nicht ändern. Dies scheint jedoch keinen Effekt zu haben .
-async Nr . Dies ist immer noch das Standardverhalten im Audio-Modus, aber diese Option kann als -async
nützlich sein, um eine in einer "UXPlayRC" -Konfigurationsdatei festgelegte Option zu deaktivieren.
-db niedrig [: hohe ] Umrötet die AirPlay -Volumenkontrolle (Verstärkung) von -30 dB: 0 dB bis niedrig : 0 dB oder niedrig : Hoch . Die untere Grenze muss negativ sein (Dämpfung); Die Obergrenze hoch kann eines der beiden Vorzeichen sein. (Gstreamer beschränkt die Volumen-Augmentation um das Hoch , so dass es +20 dB nicht überschreiten kann). Die Umschließung ist "flach", so dass für -dB -50: 10 eine Änderung der Airplay -Dämpfung um -7 dB in eine –7 x (60/30) = -14 dB Dämpfung und das maximale Volumen (Airplay 0db) übersetzt wird ist eine 10 -dB -Augmentation, und AirPlay -30 dB wird -50 dB werden. Beachten Sie, dass der minimale Airplay-Wert (-30 dB genau) in "stumm" übersetzt wird.
-Taper stellt ein "sich verjüngter" Airplay-Lautstärkebrückungs-Profil (entspricht dem mit dem Namen "Dasl-Tapering" in Shairport-Sync): Jedes Mal, wenn die Länge des Volumenschiebers (oder die Anzahl der Schritte über den Stummschalter, wobei 16 Schritte = voll sind Volumen) wird um 50%reduziert, das wahrgenommene Volumen ist halbiert (eine Dämpfung von 10 dB). (Dies wird bei niedrigen Volumina modifiziert, um das "unermächtige" Volumen zu verwenden, wenn es lauter ist.)
-S WXH EG -S 1920x1080 (= "1080p"), die Standardbreite und Höhenauflösungen in Pixel für H264 -Video. (Die Standardeinstellung wird zu 3840x2160 (= "4K") Wenn die Option -h265 verwendet wird.) Dies ist nur eine Anfrage an den AirPlay -Client und wird möglicherweise nicht die endgültige Lösung sein, die Sie erhalten. W und H sind ganze Zahlen mit vier Ziffern oder weniger. Beachten Sie, dass die Höhe der Höhe der Höhe die vom Client verwendete Steuerung des Streaming -Formats ist. Die Breite wird dynamisch an die Form des Bildes angepasst (Porträt- oder Landschaftsformat, je nachdem, wie ein iPad gehalten wird).
-S wxh@r wie oben, informiert aber auch den AirPlay -Kunden über die Bildschirm -Aktualisierungsrate des Displays. Standard ist r = 60 (60 Hz); R muss eine ganze Zahl von weniger als 256 sein.
-O schaltet eine "überschaltete" Option für das Anzeigefenster ein. Dies reduziert die Bildauflösung, indem einige der von Option -S wxh (oder deren Standardwerte 1920x1080) angeforderten Pixel verwendet werden angezeigt von Gstreamer). Empfehlung: Verwenden Sie diese Option nicht, es sei denn, es gibt einen besonderen Grund, sie zu verwenden.
-Fs verwendet den Vollbildmodus, funktioniert jedoch nur mit X11, Wayland, VAAPI und D3D11 (Windows).
-P ermöglicht es Ihnen, die von UxPlay verwendeten Netzwerkports auszuwählen (diese müssen geöffnet werden, wenn sich der Server hinter einer Firewall befindet). -P setzt "Legacy" -Ports TCP 7100, 7000, 7001, UDP 6000, 6001, 7011. -Pn (z. -P -P 35000) Legt TCP- und UDP -Ports N, N+1, N+2 fest. -P N1, N2, N3 (von Kommas getrennte Werte) legt jeden Port separat fest; -P N1, N2 setzt die Ports N1, N2, N2+1. -P TCP N oder -P UDP N legt nur die TCP- oder UDP -Ports fest. Die Ports müssen im Bereich sein [1024-65535].
Wenn die Option -P nicht verwendet wird, werden die Ports dynamisch (zufällig) ausgewählt, was nicht funktioniert, wenn eine Firewall ausgeführt wird.
-AVDEC zwingt die Verwendung von Software H264 Decodierung mit Gstreamer -Element AVDEC_H264 (Libav H264 Decoder). Diese Option sollte verhindern, dass AutoVideosink ein mit Hardware beschleunigter VideoSink-Plugin wie VAAPIINK ausgewählt wird.
-VP Parser wählt das H264 -Parser -Element der Gstreamer -Pipeline aus. Der Standard ist H264Parse. Mit Anführungszeichen "..." können Optionen hinzugefügt werden.
-VD Decoder wählt das H264 -Decoderelement der Gstreamer -Pipeline anstelle des Standardwerts "Decodebin" aus, der es für Sie wählt. Die Software -Dekodierung erfolgt von AVDEC_H264; Verschiedene Hardware -Decoder umfassen: VAAPIH264DEC, NVDEC, NVH264DEC, V4L2H264DEC (diese erfordern, dass die entsprechende Hardware verfügbar ist). Durch die Verwendung von Zitaten "..." können einige Parameter in den Decodernamen enthalten sein.
-VC -Konverter wählt das Videokonverterelement der Gstreamer -Pipeline anstelle des Standardwerts "Videoconvert". Bei Verwendung von Video4Linux2 -Hardware -Dekodierung durch eine GPU verwendet -vc v4l2convert
auch die GPU zur Videokonvertierung. Durch die Verwendung von Zitaten "..." können einige Parameter in den Konverternamen aufgenommen werden.
-VS Videosink wählt den Gstreamer -Videosink anstelle des Standardwerts "AutoVideosink" aus, der ihn für Sie auswählt. Einige Videossink -Auswahlmöglichkeiten sind: Ximagesink, xvimagesink, vaapisink (für Intel -Grafiken), Gtksink, Glimagesink, WaylandSink, Osxvideosink (für macOS), kmssink (für Systeme ohne x11, wie Raspberry Pi OS Lite) oder FPSDISPLEIDE (das zeigt, dass der Streaming -Streaming -in den Streaming in den Streaming -Streaming in den Streaming -Streaming zeigt, in dem Streaming in den Streaming -Streaming -Streaming -In -Pi -OS -Lite) oder die Streaming -Streaming -Streaming -Prise). fps). Durch die Verwendung von Zitaten "..." können einige Parameter in den VideoSink -Namen aufgenommen werden. Beispielsweise wird der Vollbildmodus vom VAAPISINC -Plugin unterstützt und mit -vs "vaapisink fullscreen=true"
erhalten. Dies funktioniert auch mit waylandsink
. Die Syntax solcher Optionen ist spezifisch für ein bestimmtes Plugin (siehe Gstreamer -Dokumentation), und einige Auswahlmöglichkeiten von Videosink funktionieren möglicherweise nicht auf Ihrem System.
-VS 0 unterdrückt die Anzeige von gestreamtetem Video. Im Spiegelmodus wird der Bildschirm des Kunden immer noch mit einer reduzierten Rate von 1 Frame pro Sekunde gespiegelt, jedoch nicht gerendert oder angezeigt. Diese Option sollte immer verwendet werden, wenn der Server "kopflos" ist (ohne angehängte Bildschirm zum Anzeigen von Videos) und nur zum Rendern von Audio Apple Lustless Audio im AirPlay-Audio-Modus.
-V4L2 Videoeinstellungen für Hardware H264 Video -Decodierung in der GPU von Video4Linux2. Äquivalent zu -vd v4l2h264dec -vc v4l2convert
.
-BT709 Eine Problemumgehung für den Fehler des älteren Video4Linux2-Plugins zur Erkennung von Apple-Verwendung einer ungewöhnlichen (aber erlaubten) "Vollrangesfarbe" -Variante des BT709-Farbstandards für digitales Fernsehen. Dies wird von Gstreamer-1.20.4 und Backports nicht mehr benötigt.
-RPI entspricht "-v4l2" (nicht gültig für Raspberry Pi Model 5 und in uxplay 1.67 entfernt)
-Rpigl entsprechen "-rpi -vs glimagesink". (Seit uxplay 1.67 entfernt)
-RPIFB Äquivalent zu "-rpi -vs kmssink" (entfernt seit uxplay 1.67)
-rpiwl äquivalent zu "-rpi -vs WaylandSink". (Seit uxplay 1.67 entfernt)
-as AudioSink wählt den Gstreamer -Audisinkrek aus, anstatt ihn autoaudiosink für Sie auswählen zu lassen. Einige Audiosink -Auswahlmöglichkeiten sind: Pulsesink, AlSasink, PipeSink, Osssink, OSS4Sink, Jackaudiosink, Osxaudiosink (für macOS), Wasiapisink, DirectSoundSink (für Windows). Die Verwendung von Zitaten "..." ermöglicht möglicherweise einige optionale Parameter (z -as "alsasink device=..."
um ein nicht defektes Ausgabegerät anzugeben). Die Syntax solcher Optionen ist spezifisch für ein bestimmtes Plugin (siehe Gstreamer -Dokumentation), und einige Auswahlmöglichkeiten von Audiosink funktionieren möglicherweise nicht auf Ihrem System.
-as 0 (oder nur -a ) unterdrückt das Spielen von Streamed Audio, zeigt jedoch Streamed -Video an.
-Al X gibt eine Audio-Latenz X in (Dezimal-) Sekunden in Audio-Nur-Audio (Alac) an, die dem Kunden gemeldet wird. Werte im Bereich [0,0, 10,0] Sekunden sind zulässig und werden in eine ganze Anzahl von Mikrosekunden umgewandelt. Die Standardeinstellung beträgt 0,25 Sekunden (250000 USEC). (Der Kunde scheint diese gemeldete Latenz jedoch zu ignorieren, so dass diese Option nicht funktionsfähig erscheint.)
-CA- Dateiname enthält eine Datei (in der Dateiname einen vollständigen Pfad enthalten kann) im Audio-Alac-Modus nur für die Ausgabe von "Cover Art" (von Apple Music usw. ). Diese Datei wird mit dem neuesten Cover -Kunst überschrieben, wenn sie eintrifft. Cover Art (JPEG -Format) wird verworfen, wenn diese Option nicht verwendet wird. Verwenden Sie mit einem Image -Betrachter, der das Bild neu lädt, wenn es sich ändert, oder regelmäßig ( z. B. einmal pro Sekunde). Um dies zu erreichen, führen Sie " uxplay -ca [path/to/]filename &
" im Hintergrund aus und führen Sie dann den Bildbetrachter im Vordergrund aus. Beispiel: Verwenden Sie feh
als Betrachter: Führen Sie " feh -R 1 [path/to/]filename
" aus (im selben Terminalfenster, in dem UXPLY in den Hintergrund gesteckt wurde). Verwenden Sie zum Beenden, verwenden Sie ctrl-C fg ctrl-C
, um den Bildbetrachter zu beenden, uxplay
in den Vordergrund zu bringen und ihn auch zu beenden.
-Reset N legt ein Grenzwert für n aufeinanderfolgende Zeitüberschreitungsfehler des Clients fest, um auf NTP -Anfragen vom Server zu antworten (diese werden alle 3 Sekunden gesendet, um zu überprüfen, ob der Client noch vorhanden ist, und synchronisieren mit ihm). Nach N -Fehlern wird angenommen, dass der Kunde offline ist, und die Verbindung wird zurückgesetzt, um eine neue Verbindung zuzulassen. Der Standardwert von n beträgt 5; Der Wert n = 0 bedeutet "No Limit" bei Timeouts.
-Nofreeze schließt das Videofenster nach einem Reset aufgrund von NTP -Timeout (Standardeinstellung besteht darin, das Fenster offen zu lassen, um demselben Client eine reibungslosere Verwirkung zu ermöglichen). Diese Option kann im Vollbildmodus nützlich sein.
-NC behält das vorherige uxplay <1,45 -Verhalten bei, das das Videofenster nicht schließt, wenn der Client das Signal "Spiegelung stoppen" sendet. Diese Option wird derzeit standardmäßig in macOS verwendet, da das in macOS von Gstreamer erstellte Fenster nicht ordnungsgemäß endet (es verursacht einen Segfault), wenn sie noch geöffnet ist, wenn die Gstreamer -Pipeline geschlossen ist.
-Nohold löst die aktuelle Verbindung ab, wenn ein neuer Kunde eine Verbindung herstellt. Ohne diese Option unterhält der aktuelle Kunde das exklusive Eigentum an UXPLay, bis er sich trennen.
-Beschränken Sie die Kunden, die eine Verbindung zu den von -allow
eingerichteten Einschränkungen erhalten haben. Die Geräte -ID hat die Form einer MAC -Adresse, die von uxplay angezeigt wird, wenn der Client eine Verbindung herstellt, und scheint unveränderlich zu sein. Es hat das Format XX:XX:XX:XX:XX:XX
, x = 0-9, af und ist möglicherweise die "wahre" Hardware-MAC-Adresse des Geräts. Beachten Sie, dass iOS -Clients im Allgemeinen verschiedene zufällige "private WI_FI -Adressen" ("gefälschte" MAC -Adressen in verschiedenen Netzwerken (aus Datenschutzgründen, um Nachverfolgung) zu verhindern, die sich ändern und nicht mit der Geräte -ID korrigieren können.
-Beschränken Sie keine Einschränkungen (Standard). Dies ist nützlich als Befehlszeilenargument, um die in der Startdatei festgelegten Überzeitungsbeschränkungen zu übergeben.
-Allow ID fügt der Liste der zulässigen Clients die DeviceID = ID hinzu, wenn Kundenbeschränkungen durchgesetzt werden. Normalerweise ist dies ein Eintrag in der UXPlayRC -Startdatei.
-Block -ID blockieren Clients immer mit DeviceID = ID , auch wenn Kundenbeschränkungen im Allgemeinen nicht durchgesetzt werden. Normalerweise ist dies ein Eintrag in der UXPlayRC -Startdatei.
-FpsData Die Überwachung regelmäßiger Berichte über Video -Streaming -Leistung, die vom Client gesendet werden. Diese werden im Terminalfenster angezeigt, wenn diese Option verwendet wird. Die Daten werden vom Client in Intervallen von 1 Sekunden aktualisiert.
-FPS N legt eine maximale Bildrate (in Frames pro Sekunde) für den AirPlay -Client zum Streamen von Videos. N muss eine ganze Zahl von weniger als 256 sein. (Der Client kann sich für eine beliebige Bildrate als diese als diese servieren. Standard ist 30 fps.) Eine Einstellung von 60 fps bietet Ihnen möglicherweise ein verbessertes Video, wird jedoch auf Raspberry Pi nicht empfohlen. Eine Einstellung unter 30 fps ist möglicherweise nützlich, um die Latenz zu reduzieren, wenn Sie mehr als eine Instanz von UXPLAY gleichzeitig ausführen. Diese Einstellung ist nur ein Hinweis auf das Client -Gerät, sodass das Einstellen eines hohen Wertes keine hohe Framerate erzwingt. (Sie können mit "-VS fpsDisplaySink" testen, um zu sehen, was Framerate empfangen wird, oder die Option-fpsdata verwenden, die Video-Stream-Leistungsdaten anweist, die während des Video-Streaming kontinuierlich gesendet werden.)
-f {h | v | i} implementiert "videoflip" Bild transformiert: h = horizontales Flip (rechter linker Flip oder Spiegelbild); V = vertikaler Flip; I = 180 Grad Rotation oder Inversion (was die Kombination von H mit V ist).
-r {r | l} 90 Grad rechts (im Uhrzeigersinn) oder links (gegen den Uhrzeigersinn); Diese Bildtransformationen werden nach jeder --F -Transformationen durchgeführt.
-M [MAC] ändert die von UXPlay verwendete MAC -Adresse (Geräte -ID) (Standardeinstellung besteht darin, die von der Netzwerkkarte des Host -Computers gemeldete wahre Hardware -MAC -Adresse zu verwenden). (Verschiedene Server_Name, MAC -Adressen und Netzwerkports sind für jedes laufende UXPLAY erforderlich, wenn Sie versuchen, mehr als eine Instanz von UXPLAY auf demselben Computer auszuführen.) Wenn [Mac] (in Form xx: xx: xx: xx: xx: xx: XX, 6 Hex -Oktette) wird nicht angegeben, eine zufällige MAC -Adresse wird generiert. Wenn UXPLY die wahre MAC -Adresse einer Netzwerkkarte nicht ermittelt (insbesondere die von der erste aktivierte aktiven Netzwerkschnittstelle verwendete MAC -Adresse), wird eine zufällige MAC -Adresse verwendet, auch wenn die Option -M nicht angegeben wurde. (Beachten Sie, dass eine zufällige MAC -Adresse jedes Mal unterschiedlich ist, wenn UXPlay gestartet wird).
-Key [ Dateiname ] : Diese (sicherere) Option zum Generieren und Speichern eines anhaltenden öffentlichen Schlüssels (für die Option -pin benötigt) wurde standardmäßig durch eine (weniger sicher "(MAC -Adresse, die mit der Option -m als Startdateioption geändert werden kann). Wenn die Option -kee verwendet wird, wird ein sicher erzeugtes Tastatur generiert und in $HOME/.uxplay.pem
gespeichert, wenn diese Datei nicht vorhanden oder daraus gelesen wird, wenn sie vorhanden ist. (Optional kann der Schlüssel in Dateiname gespeichert werden.) Diese Methode ist sicherer als die neue Standardmethode (da die Geräte -ID in der Ankündigung dns_sd ausgestrahlt wird), lässt jedoch den privaten Schlüssel, der jedem zugreifen kann, der auf die PEM -Datei zugreifen kann . Diese Option sollte in der UXPLay-Startdatei als Zeile "Schlüssel" oder "Schlüssel Dateiname " (no anfänglich "-") festgelegt werden, wobei der Dateiname ein vollständiger Pfad ist, der in Anführungszeichen ( "...."
) eingeschlossen sein sollte, wenn Es enthält alle leeren Räume. Da die Standardmethode einfacher ist und die Sicherheit des Kundenzugriffs auf UXPLY ein wichtiges Problem ist, wird die Option -kee nicht mehr empfohlen .
-DACP [ Dateiname ] : Aktuelle Client-DACP-ID und Active-Remote-Schlüssel zur Datei exportieren: Standard ist $ home/.uxPlay.dacp. (Optional kann in Dateiname geändert werden). Kann von Fernbedienungsanwendungen verwendet werden. Die Datei ist vorübergehend: Es gibt nur, während der Client verbunden ist.
-VDMP Dumps H264 Video zu Datei Videodump.h264. -VDMP n Dumps nicht mehr als n nal Einheiten zu siehe Videodump.x.h264; x = 1,2, ... erhöht jedes Mal, wenn eine SPS/PPS -NAL -Einheit eintrifft. Verwenden Sie , um den Namen Videodump zu ändern.
-Admp Dumps Audio in Datei audiodUp.x.aac (AAC-DELD-Format-Audio), audiodUp.x.alac (ALAC-Format Audio) oder AudioDump.x.aud (Other-Format-Audio), wobei x = 1,2,3 ... erhöht sich jedes Mal, wenn sich das Audioformat ändert. -Admp n begrenzt die Anzahl der Pakete, die in eine Datei abgeladen sind, auf n oder weniger. Verwenden Sie , um den Namen AudioDump zu ändern. Beachten Sie, dass (im Gegensatz zu Dumped Video) das Dumpd -Audio derzeit nur zum Debugging nützlich ist, da es nicht Containerie ist, um es mit Standard -Audio -Playern spielbar zu machen.
-D Aktivieren Sie die Debug -Ausgabe. Hinweis: Dies zeigt keinen Gstreamer -Fehler oder Debug -Nachrichten. Um Gstreamer -Fehler und Warnmeldungen anzuzeigen, setzen Sie die Umgebungsvariable gst_debug mit "exportieren gst_debug = 2", bevor Sie uxplay ausgeführt werden. Setzen Sie gst_debug = 4; Für Debug -Nachrichten gst_debug = 5; Erhöhen Sie dies, um noch mehr von der Gstreamer -Innenarbeit zu sehen.
HINWEIS: uxplay
wird aus einer Terminalbefehlszeile ausgeführt, und Informationsnachrichten werden an das Terminal geschrieben.
Ein Benutzer (auf Ubuntu) fand die Kompilierung mit Nachrichten über die Verknüpfung mit "usr/local/lib/libcrypto.a" und "zlib" fehl. Dies lag (zusätzlich zur Standard-Ubuntu-Installation von LIBSSL-dev), dass der Benutzer nicht wusste, dass eine zweite Installation mit Libcrypto in /usr /Local vorhanden war. Lösung: Wenn mehr als eine Installation von OpenSSL vorhanden ist, setzen Sie die Umgebungsvariable open_SSL_ROOT_DIR so, dass sie auf die richtige zeigen. Auf 64-Bit-Ubuntu erfolgt dies durch Ausführen export OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
bevor CMake ausgeführt wird.
Der Service DNS_SD Service-Discovery ("Bonjour" oder "Zeroconf") ist für UXPlay erforderlich. Unter Linux wird es normalerweise von Avahi bereitgestellt, und um dies zu beheben, sollten Sie das Werkzeug avahi-browse
verwenden. (Möglicherweise müssen Sie ein separates Paket mit einem Namen wie avahi-utils
installieren, um dies zu erhalten.)
Stellen Sie unter Linux sicher, dass Avahi installiert ist, und starten sudo service avahi-daemon
den Avahi sudo systemctl
Daemon-Dienst auf dem uxPlay ausgeführten System (Ihre Verteilung wird dokumentieren sudo service avahi-daemon
Mit
einer von Aktiv, Deaktivieren sudo find /etc -name avahi-daemon.conf
Start, Stop, Status. sudo find /etc -name avahi-daemon.conf
"): Stellen Sie sicher, dass" Deaktivierung der Veröffentlichung " keine ausgewählte Option ist). Einige Systeme können stattdessen den MDNSD-Daemon als Alternative verwenden, um den DNS-SD-Service zu bieten. (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