Catatan: Streaming audio multi-ruangan AirPlay2 tidak didukung: gunakan sinkronisasi shairport untuk itu.
.
Instal uxplay pada sistem Linux berbasis Debian dengan " sudo apt install uxplay
"; di FreeBSD dengan " sudo pkg install uxplay
". Juga tersedia pada sistem berbasis Arch melalui AUR. Sejak v. 1.66, uxplay kini juga dikemas dalam format RPM oleh Fedora 38 (" sudo dnf install uxplay
").
Untuk distribusi berbasis RPM lainnya yang belum mengemas UxPlay, "specfile" RPM uxplay.spec kini disediakan dengan rilis terkini (lihat "Aset" mereka), dan juga dapat ditemukan di direktori teratas sumber UxPlay. Lihat bagian tentang penggunaan file spesifikasi ini untuk membuat paket RPM yang dapat diinstal.
Setelah instalasi:
(Di Linux dan *BSD): jika firewall aktif di server hosting UxPlay, pastikan port jaringan default (UDP 5353) untuk kueri mDNS/DNS-SD terbuka (lihat Pemecahan Masalah di bawah untuk detail lebih lanjut); buka juga tiga port UDP dan tiga port TCP untuk Uxplay, dan gunakan opsi "uxplay -p" (lihat " man uxplay
" atau " uxplay -h
").
Bahkan jika Anda menginstal paket biner uxplay distribusi Anda yang telah dikompilasi sebelumnya, Anda mungkin perlu membaca petunjuk di bawah ini untuk menjalankan UxPlay guna melihat paket plugin GStreamer distribusi mana yang juga harus Anda instal.
Untuk mode Audio saja (Apple Music, dll.) kualitas terbaik diperoleh dengan opsi "uxplay -async", tetapi ada latensi 2 detik yang diberlakukan oleh iOS.
Tambahkan opsi UxPlay apa pun yang ingin Anda gunakan sebagai default ke file startup ~/.uxplayrc
(lihat " man uxplay
" atau " uxplay -h
" untuk format dan kemungkinan lokasi lainnya). Khususnya, jika sistem Anda menggunakan sistem audio PipeWire atau video Wayland, Anda mungkin ingin menambahkan "as pipewiresink" atau "vs waylandsink" sebagai default pada file. (Output dari perintah terminal "ps waux | grep pulse" atau "pactl info" akan berisi "pipewire" jika sistem Linux/BSD Anda menggunakannya).
Di Raspberry Pi: Jika Anda menggunakan Ubuntu 22.10 atau versi lebih lama, GStreamer harus di-patch untuk menggunakan decoding video perangkat keras oleh GPU Broadcom (juga disarankan tetapi opsional untuk Raspberry Pi OS (Bullseye): gunakan opsi " uxplay -bt709
" jika Anda tidak menggunakan tambalannya).
Untuk (dengan mudah) mengkompilasi UxPlay terbaru dari sumber, lihat bagian Mendapatkan UxPlay.
Proyek ini adalah server AirPlay2 Mirror unix open source GPLv3 untuk Linux, macOS, dan *BSD. Ini awalnya dikembangkan oleh antimof menggunakan kode dari RPiPlay berbasis OpenMAX, yang berasal dari AirplayServer, shairplay, dan playfair. (Situs antimof tidak lagi terlibat dalam pengembangan, tetapi secara berkala memposting pembaruan yang diambil dari situs utama UxPlay yang baru).
UxPlay diuji pada sejumlah sistem, termasuk (antara lain) Debian (10 "Buster", 11 "Bullseye", 12 "Bookworm"), Ubuntu (20.04 LTS, 22.04 LTS, 23.04 (juga turunan Ubuntu Linux Mint, Pop! _OS), Red Hat dan klonnya (Fedora 38, Rocky Linux 9.2), openSUSE Leap 15.5, Mageia 9, OpenMandriva "ROME", PCLinuxOS, Arch Linux, Manjaro, dan juga dapat dijalankan di sistem Linux apa pun (Intel) dan Sonoma (M2), FreeBSD 14.0, Windows 10 dan 11 (64 bit).
Pada Raspberry Pi 4 model B, diuji pada Raspberry Pi OS (Bullseye dan Bookworm) (32- dan 64-bit), Ubuntu 22.04 LTS dan 23.04, Manjaro RPi4 23.02, dan (tanpa decoding video perangkat keras) pada openSUSE 15.5. Juga diuji pada Raspberry Pi Zero 2 W, 3 model B+, dan sekarang 5.
Kegunaan utamanya adalah bertindak seperti AppleTV untuk pencerminan layar (dengan audio) klien iOS/iPadOS/macOS (iPhone, iPod Touch, iPad, komputer Mac) pada tampilan server host yang menjalankan Linux, macOS, atau unix lainnya (dan sekarang juga Microsoft Windows). UxPlay mendukung protokol AirPlay2 Apple menggunakan "Protokol Lama", tetapi beberapa fitur tidak ada. (Detail tentang apa yang diketahui publik tentang protokol AirPlay 2 Apple dapat ditemukan di sini, di sini, dan di sini; lihat juga pyatv yang dapat menjadi sumber untuk menambahkan protokol modern.) Meskipun tidak ada jaminan bahwa rilis iOS di masa mendatang akan tetap mendukung "Protokol Warisan ", iOS 17 terus mendukung.
Server UxPlay dan kliennya harus berada di jaringan area lokal yang sama, di mana server mDNS/DNS-SD Bonjour/Zeroconf juga berjalan (hanya layanan "Service Discovery" DNS-SD yang benar-benar diperlukan, tidak perlu bahwa jaringan lokal juga bertipe berbasis mDNS ".local"). Di server Linux dan BSD Unix, ini biasanya disediakan oleh Avahi, melalui layanan avahi-daemon, dan disertakan di sebagian besar distribusi Linux (layanan ini juga dapat disediakan oleh server macOS, iOS, atau Windows).
Koneksi ke server UxPlay oleh klien iOS/MacOS dapat dimulai baik dalam mode AirPlay Mirror (yang mengalirkan audio AAC yang dikompresi secara lossy saat mencerminkan layar klien, atau dalam mode AirPlay Audio alternatif yang mengalirkan audio Apple Lossless (ALAC) tanpa pencerminan layar . Dalam mode Audio , metadata ditampilkan di terminal uxplay; jika opsi UxPlay -ca
digunakan, sampul yang menyertainya juga ditampilkan ke file yang diperbarui secara berkala
, dan dapat dilihat dengan (memuat ulang) penampil grafis pilihan Anda. Beralih antara mode Cermin dan Audio selama koneksi aktif dimungkinkan: dalam mode Cermin , hentikan pencerminan (atau tutup jendela cermin) dan mulai koneksi mode Audio , beralih kembali dengan memulai koneksi mode Cermin ; tampilan seni berhenti/dimulai ulang saat Anda keluar/masuk kembali ke mode Audio .
Perhatikan bahwa video-DRM Apple (seperti yang ditemukan di konten "aplikasi Apple TV" di klien) tidak dapat didekripsi oleh UxPlay, dan aplikasi Apple TV tidak dapat ditonton menggunakan mode AirPlay Mirror UxPlay (hanya audio yang tidak dilindungi yang akan dialirkan, dalam AAC format), namun konten video dan audio dari aplikasi bebas DRM seperti "aplikasi YouTube" akan dialirkan oleh UxPlay dalam mode Cermin.
Karena UxPlay saat ini tidak mendukung streaming video non-Mirror AirPlay (di mana klien mengontrol server web di server AirPlay yang secara langsung menerima konten HLS untuk menghindarinya didekodekan dan dikodekan ulang oleh klien), gunakan ikon untuk video AirPlay di aplikasi seperti aplikasi YouTube hanya akan mengirimkan audio (dalam format ALAC lossless) tanpa video yang menyertainya (ada rencana untuk mendukung video HLS di rilis UxPlay mendatang)
UxPlay menggunakan "plugin" GStreamer untuk merender audio dan video. Ini berarti video dan audio didukung secara langsung, menggunakan pilihan plugin. AirPlay mengalirkan video dalam format h264: dekode gstreamer bersifat agnostik plugin, dan menggunakan dekoder h264 perangkat keras GPU yang dipercepat jika tersedia; jika tidak, decoding perangkat lunak digunakan.
VAAPI untuk grafis terintegrasi Intel dan AMD, NVIDIA dengan driver sumber terbuka "Nouveau".
Dengan GPU Intel atau AMD, decoding perangkat keras dengan plugin gstreamer VAAPI sumber terbuka lebih disukai. Driver sumber terbuka "Nouveau" untuk grafis NVIDIA juga pada prinsipnya didukung: lihat di sini, namun hal ini memerlukan VAAPI untuk dilengkapi dengan firmware yang diekstraksi dari driver milik NVIDIA.
NVIDIA dengan driver berpemilik
Plugin nvh264dec
(disertakan dalam gstreamer1.0-plugins-bad sejak GStreamer-1.18.0) dapat digunakan untuk mempercepat decoding video pada GPU NVIDIA setelah driver CUDA NVIDIA libcuda.so
diinstal. Untuk GStreamer-1.16.3 atau versi lebih lama, plugin ini disebut nvdec
, dan harus dibuat oleh pengguna.
Dukungan Video4Linux2 untuk decoding perangkat keras h264 pada Raspberry Pi (Pi 4B dan lebih lama)
Komputer Raspberry Pi (RPi) (diuji pada Pi 4 Model B) sekarang dapat menjalankan UxPlay menggunakan decoding video perangkat lunak, tetapi decoding h264/h265 yang dipercepat perangkat keras dengan firmware di GPU Broadcom 2835 Pi lebih disukai. UxPlay mengaksesnya menggunakan plugin GStreamer-1.22 Video4Linux2 (v4l2); Menggunakan modul kernel Linux out-of-mainline bcm2835-codec yang dikelola oleh Raspberry Pi, sejauh ini hanya disertakan dalam OS Raspberry Pi, dan dua distribusi lain (Ubuntu, Manjaro) tersedia dengan Raspberry Pi Imager. (Untuk GStreamer <1.22, lihat UxPlay Wiki) .
(Baru): Dukungan untuk decoding perangkat keras h265 (HEVC) pada Raspberry Pi (Pi 4 model B dan Pi 5)
Dukungan memang ada, namun sejauh ini belum diperoleh hasil yang memuaskan. Pi model 5 hanya menyediakan decoding yang dipercepat perangkat keras (GPU) untuk video h265, tetapi tidak untuk H264, karena CPU-nya cukup kuat untuk decoding perangkat lunak H264 yang memuaskan
Lisensi GPLv3 UxPlay tidak memiliki tambahan "pengecualian GPL" yang secara eksplisit mengizinkannya untuk didistribusikan dalam bentuk terkompilasi ketika ditautkan ke versi OpenSSL sebelum v. 3.0.0 (versi OpenSSL yang lebih lama memiliki klausa lisensi yang tidak kompatibel dengan GPL kecuali OpenSSL dapat dianggap sebagai "Perpustakaan Sistem", yang ada di *BSD). Banyak distribusi Linux memperlakukan OpenSSL sebagai "Perpustakaan Sistem", namun beberapa (misalnya Debian) tidak: dalam hal ini, masalah diselesaikan dengan menghubungkan ke OpenSSL-3.0.0 atau yang lebih baru.
Unduh dan unzip UxPlay-master.zip, atau (jika git diinstal): "git clone https://github.com/FDH2/UxPlay". Anda juga dapat mengunduh versi terbaru atau sebelumnya yang tercantum di Rilis.
(Sesuaikan instruksi ini untuk Linux berbasis non-Debian atau *BSD; untuk macOS, lihat instruksi spesifik di bawah). Lihat Pemecahan Masalah di bawah untuk bantuan jika ada kesulitan.
Anda memerlukan kompiler C/C++ (misalnya g++) dengan perpustakaan pengembangan standar yang diinstal. Sistem berbasis Debian menyediakan paket "build-essential" untuk digunakan dalam kompilasi perangkat lunak. Anda juga memerlukan pkg-config: jika tidak ditemukan oleh " which pkg-config
", instal pkg-config atau pkgconf penggantinya yang berfungsi sama. Pastikan juga cmake>=3.5 diinstal: " sudo apt install cmake
" (tambahkan build-essential
dan pkg-config
(atau pkgconf
) ke dalamnya jika diperlukan).
Pastikan distribusi Anda menyediakan OpenSSL 1.1.1 atau lebih baru, dan libplist 2.0 atau lebih baru. (Ini berarti sistem berbasis Debian 10 "Buster" (misalnya Ubuntu 18.04) atau yang lebih baru; pada sistem Debian 10 "libplist" adalah versi yang lebih lama, Anda memerlukan "libplist3".) Jika tidak, Anda mungkin perlu membangun dan menginstal ini dari sumber (lihat instruksi di akhir README ini).
Jika Anda memiliki instalasi OpenSSL non-standar, Anda mungkin perlu mengatur variabel lingkungan OPENSSL_ROOT_DIR ( misalnya , " export OPENSSL_ROOT_DIR=/usr/local/lib64
" jika di sanalah instalasinya). Demikian pula, untuk instalasi GStreamer non-standar (atau beberapa), setel variabel lingkungan GSTREAMER_ROOT_DIR ke direktori yang berisi direktori ".../gstreamer-1.0/" dari instalasi gstreamer yang harus digunakan UxPlay (jika ini misalnya "~ /my_gstreamer/lib/gstreamer-1.0/", setel lokasi ini dengan " export GSTREAMER_ROOT_DIR=$HOME/my_gstreamer/lib
").
Di jendela terminal, ubah direktori ke direktori sumber dari kode sumber yang diunduh ("UxPlay-*", "*" = "master" atau tag rilis untuk unduhan zipfile, "UxPlay" untuk unduhan "git clone"), lalu ikuti petunjuk di bawah ini:
Catatan: Secara default, UxPlay akan dibuat dengan pengoptimalan untuk komputer tempat UxPlay dibuat; jika hal ini tidak terjadi, seperti saat Anda mengemas untuk distribusi, gunakan opsi cmake -DNO_MARCH_NATIVE=ON
.
Jika Anda menggunakan Windows X11 di Linux atau *BSD, dan ingin beralih masuk/keluar mode layar penuh dengan menekan tombol (F11 atau Alt_L+Enter) UxPlay perlu dibangun dengan ketergantungan pada X11. Dimulai dengan UxPlay-1.59, ini akan dilakukan secara default JIKA pustaka pengembangan X11 diinstal dan terdeteksi. Instal ini dengan " sudo apt install libx11-dev
". Jika GStreamer <1.20 terdeteksi, perbaikan yang diperlukan oleh aplikasi berbagi layar ( misalnya Zoom) juga akan dilakukan.
-DNO_X11_DEPS=ON
.sudo apt install libssl-dev libplist-dev
". ( kecuali Anda perlu membuat OpenSSL dan libplist dari sumber ).sudo apt install libavahi-compat-libdnssd-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
. (* Lewati jika Anda membuat Gstreamer dari sumber )cmake .
( Untuk build yang lebih bersih, yang berguna jika Anda memodifikasi sumbernya, ganti dengan " mkdir build; cd build; cmake ..
": Anda kemudian dapat menghapus konten direktori build
jika diperlukan, tanpa memengaruhi sumbernya. ) Juga tambahkan opsi cmake " -D
" apa pun di sini sesuai kebutuhan (misalnya, -DNO_X11_DEPS=ON
atau -DNO_MARCH_NATIVE=ON
).make
sudo make install
(Anda kemudian dapat menghapusnya dengan sudo make uninstall
di direktori yang sama tempat ini dijalankan). Ini menginstal file yang dapat dieksekusi " uxplay
" ke /usr/local/bin
, (dan menginstal halaman manual ke suatu tempat standar seperti /usr/local/share/man/man1
dan file README ke suatu tempat seperti /usr/local/share/doc/uxplay
). (Jika "man uxplay" gagal, periksa apakah $MANPATH sudah disetel: jika demikian, jalur ke halaman manual (biasanya /usr/local/share/man/) perlu ditambahkan ke $MANPATH .) Uxplay yang dapat dieksekusi juga bisa ditemukan di direktori build setelah proses build, jika Anda ingin menguji sebelum menginstal (dalam hal ini plugin GStreamer harus diinstal terlebih dahulu).
**Bagi mereka yang memiliki distribusi berbasis RPM, file spesifikasi RPM uxplay.spec juga tersedia: lihat Membuat paket rpm yang dapat diinstal.
Red Hat, atau klon seperti CentOS (sekarang dilanjutkan sebagai Rocky Linux atau Alma Linux): (sudo dnf install, atau sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel gstreamer1-devel gstreamer1-plugins-base- devel (+libX11-devel untuk layar penuh X11) (beberapa di antaranya mungkin ada di repositori add-on "CodeReady", yang disebut "PowerTools" oleh klon)
Mageia, PCLinuxOS, OpenMandriva: Sama seperti Red Hat, kecuali perubahan nama: (Mageia) "gstreamer1.0-devel", "gstreamer-plugins-base1.0-devel"; (OpenMandriva) "libopenssl-devel", "gstreamer-devel", "libgst-plugins-base1.0-devel". PCLinuxOS: sama seperti Mageia, tetapi menggunakan synaptic (atau apt) sebagai manajer paketnya.
openSUSE: (sudo zypper install) libopenssl-3-devel (sebelumnya libopenssl-devel) libplist-2_0-devel (sebelumnya libplist-devel) avahi-compat-mDNSResponder-devel gstreamer-devel gstreamer-plugins-base-devel (+ libX11- pengembangan untuk layar penuh X11).
Arch Linux ( Juga tersedia sebagai paket di AUR ): (sudo pacman -Syu) openssl libplist avahi gst-plugins-base.
FreeBSD: (sudo pkg install) libplist gstreamer1. Avahi-libdns atau mDNSResponder juga harus diinstal untuk menyediakan perpustakaan dns_sd. OpenSSL sudah diinstal sebagai System Library.
Pembuat RPM yang baru pertama kali harus menginstal paket rpm-build dan rpmdevtools terlebih dahulu, lalu membuat pohon rpmbuild dengan " rpmdev-setuptree
". Kemudian unduh dan salin uxplay.spec ke ~/rpmbuild/SPECS
. Di direktori itu, jalankan " rpmdev-spectool -g -R uxplay.spec
" untuk mengunduh file sumber terkait uxplay-*.tar.gz
ke ~/rpmbuild/SOURCES
("rpmdev-spectool" mungkin juga disebut "spectool" ); lalu jalankan " rpmbuild -ba uxplay.spec
" (Anda perlu menginstal semua dependensi yang diperlukan dalam laporan ini). Ini harus membuat paket RPM uxplay di subdirektori ~/rpmbuild/RPMS
. ( uxplay.spec diuji pada Fedora 38, Rocky Linux 9.2, openSUSE Leap 15.5, Mageia 9, OpenMandriva, PCLinuxOS; dapat dengan mudah dimodifikasi untuk menyertakan daftar ketergantungan untuk distribusi berbasis RPM lainnya.)
Selanjutnya install plugin GStreamer yang diperlukan dengan sudo apt install gstreamer1.0-
. Nilai
yang diperlukan adalah:
Distribusi berbasis Debian membagi beberapa paket plugin menjadi bagian-bagian yang lebih kecil: beberapa yang mungkin juga diperlukan termasuk " gl " untuk dukungan OpenGL (ini menyediakan videoink "-vs glimagesink", yang bisa sangat berguna di banyak sistem (termasuk Raspberry Pi ), dan harus selalu digunakan saat menggunakan decoding h264/h265 oleh GPU NVIDIA), " gtk3 " (yang menyediakan videoink "-vs gtksink"), dan " x " untuk dukungan X11, meskipun ini mungkin sudah diinstal; " vaapi " diperlukan untuk decoding video h264 yang dipercepat perangkat keras oleh grafis Intel atau AMD (tetapi tidak untuk digunakan dengan NVIDIA yang menggunakan driver berpemilik). Jika suara tidak berfungsi, plugin " alsa "", " pulseaudio ", atau " pipewire " mungkin perlu dipasang, bergantung pada cara pengaturan audio Anda.
Dalam beberapa kasus, karena masalah paten, fitur plugin libav avdec_aac yang diperlukan untuk mendekode audio AAC dalam mode cermin tidak disediakan dalam distribusi resmi: dapatkan dari repositori komunitas untuk distribusi tersebut.
Red Hat, atau klon seperti CentOS (sekarang dilanjutkan sebagai Rocky Linux atau Alma Linux): Instal gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi untuk grafis Intel/AMD). Di Fedora baru-baru ini, gstreamer1-libav diganti namanya menjadi gstreamer1-plugin-libav. Untuk mendapatkan avdec_aac, instal paket dari rpmfusion.org : (dapatkan ffmpeg-libs dari rpmfusion; di RHEL atau klon, tetapi bukan Fedora terbaru, dapatkan juga gstreamer1-libav dari sana).
Mageia, PCLinuxOS, OpenMandriva: Instal gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi untuk grafis Intel/AMD). Di Mageia, untuk mendapatkan avdec_aac, instal ffmpeg dari repositori "tercemar" , (yang juga menyediakan gstreamer1.0-plugins-bad yang lebih lengkap).
openSUSE: Instal gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi untuk grafis Intel/AMD). Untuk mendapatkan avdec_aac, instal paket libav* untuk openSUSE dari Packman "Essentials" ; rekomendasi: setelah menambahkan repositori Packman, gunakan opsi di Manajemen Perangkat Lunak YaST untuk mengalihkan semua paket sistem untuk multimedia ke Packman).
Arch Linux Instal gst-plugins-good gst-plugins-bad gst-libav (+ gstreamer-vaapi untuk grafis Intel/AMD).
FreeBSD: Instal gstreamer1-libav, gstreamer1-plugins, gstreamer1-plugins-* (* = core, good, bad, x, gtk, gl, vulkan, pulse, v4l2, ...), (+ gstreamer1-vaapi untuk Intel/ grafis AMD).
Sejak UxPlay-1.64, UxPlay dapat dimulai dengan opsi yang dibaca dari file konfigurasi, yang akan menjadi yang pertama ditemukan dari (1) file dengan jalur yang diberikan oleh variabel lingkungan $UXPLAYRC
, (2) ~/.uxplayrc
di rumah pengguna direktori ("~"), (3) ~/.config/uxplayrc
. Formatnya adalah satu opsi per baris, menghilangkan awal "-"
dari opsi baris perintah. Baris dalam file konfigurasi yang dimulai dengan "#"
dianggap sebagai komentar dan diabaikan.
Jalankan uxplay di jendela terminal . Pada beberapa sistem, Anda dapat menentukan mode layar penuh dengan opsi -fs
, atau beralih masuk dan keluar dari mode layar penuh dengan tombol F11 atau (ditahan Alt kiri)+Enter. Gunakan Ctrl-C (atau tutup jendela) untuk menghentikannya setelah selesai. Jika server UxPlay tidak terlihat oleh panel drop-down "Screen Mirroring" klien iOS, periksa apakah server DNS-SD Anda (biasanya avahi-daemon) sedang berjalan: lakukan ini di jendela terminal dengan systemctl status avahi-daemon
. Jika ini menunjukkan avahi-daemon tidak berjalan, kendalikan dengan sudo systemctl [start,stop,enable,disable] avahi-daemon
(pada sistem non-systemd, seperti *BSD, gunakan sudo service avahi-daemon [status, start, stop, restart, ...]
). Jika UxPlay terlihat, tetapi klien gagal terhubung saat dipilih, mungkin ada firewall di server yang mencegah UxPlay menerima permintaan koneksi klien kecuali beberapa port jaringan dibuka: jika firewall aktif, buka juga port UDP 5353 (untuk pertanyaan mDNS) dibutuhkan oleh Avahi . Lihat Pemecahan Masalah di bawah untuk bantuan mengenai masalah ini atau masalah lainnya.
Berbeda dengan Apple TV, server UxPlay tidak secara default mengharuskan klien untuk "memasangkan" terlebih dahulu menggunakan kode pin yang ditampilkan oleh server (setelah itu klien "mempercayai" server, dan tidak perlu mengulanginya). Sejak v1.67, Uxplay menawarkan "autentikasi pin" sebagai opsi: lihat " -pin
" dan " -reg
" di Penggunaan untuk detailnya, jika Anda ingin menggunakannya. Beberapa klien dengan MDM (Manajemen Perangkat Seluler, sering kali ada di perangkat milik perusahaan) diharuskan menggunakan autentikasi pin: UxPlay akan menyediakan ini bahkan ketika dijalankan tanpa opsi pin.
Secara default, UxPlay dikunci untuk kliennya saat ini hingga klien tersebut memutuskan koneksi; sejak UxPlay-1.58, opsi -nohold
mengubah perilaku ini sehingga ketika klien baru meminta koneksi, klien saat ini akan dihapus dan mengambil alih. UxPlay 1.66 memperkenalkan mekanisme ( -restrict
, -allow
, -block
) untuk mengontrol klien mana yang diizinkan untuk terhubung, menggunakan "deviceID" mereka (yang di perangkat Apple tampaknya tidak dapat diubah).
Dalam mode Cermin, GStreamer memiliki dua pilihan metode untuk memutar video dengan audio yang menyertainya: sebelum UxPlay-1.64, streaming video dan audio diputar sesegera mungkin setelah tiba (metode GStreamer " sync=false ") , dengan jam internal GStreamer yang digunakan untuk mencoba menyinkronkannya. Dimulai dengan UxPlay-1.64, metode lain (mode " sync=true " GStreamer), yang menggunakan stempel waktu dalam aliran audio dan video yang dikirim oleh klien, adalah default baru . Pada host UxPlay dengan daya decoding rendah (seperti model Raspberry Pi Zero W atau 3 B+) hal ini akan menghapus frame video yang tidak dapat didekode pada waktunya untuk diputar dengan audio, membuat video tersentak-sentak, namun tetap tersinkronisasi.
Metode lama yang tidak menghilangkan frame video akhir bekerja dengan baik pada sistem yang lebih kuat, dan masih tersedia dengan opsi UxPlay " -vsync no
"; metode ini diadaptasi untuk "live streaming", dan mungkin lebih baik bila menggunakan UxPlay sebagai monitor kedua untuk komputer Mac, misalnya, sedangkan metode berbasis stempel waktu default yang baru paling baik untuk menonton video, untuk menjaga gerakan bibir dan suara. disinkronkan. (Tanpa penggunaan stempel waktu, video pada akhirnya akan tertinggal dari audio jika tidak dapat didekodekan dengan cukup cepat: decoding video yang dipercepat perangkat keras membantu mencegah hal ini sebelumnya ketika stempel waktu tidak digunakan.)
-async
timestamp- opsi berbasis. (Contohnya mungkin jika Anda ingin mengikuti lirik Apple Music di klien sambil mendengarkan suara superior di server UxPlay). Hal ini menunda video di klien untuk mencocokkan audio di server, sehingga menyebabkan sedikit penundaan sebelum jeda atau perubahan trek yang dimulai di klien berdampak pada audio yang diputar oleh server. Kontrol volume AirPlay melemahkan volume (penguatan) hingga -30dB: rentang desibel -30:0 dapat diubah skalanya dari Rendah :0, atau Rendah : Tinggi , menggunakan opsi -db
("-db Low " atau "-db Rendah : Tinggi "), Rendah harus negatif. Penskalaan ulang bersifat linier dalam desibel. Perhatikan bahwa format audio GStreamer akan "memotong" penguatan audio apa pun di atas +20dB, jadi pertahankan Tinggi di bawah level tersebut. Opsi -taper
menyediakan profil kontrol volume AirPlay "meruncing" yang mungkin disukai beberapa pengguna.
Opsi -vsync dan -async juga memungkinkan penyesuaian penundaan audio positif (atau negatif) opsional dalam milidetik untuk penyesuaian: -vsync 20.5
menunda audio relatif terhadap video sebesar 0,0205 detik; nilai negatif memajukannya.)
Anda mungkin menemukan video ditingkatkan dengan pengaturan -fps 60 yang memungkinkan beberapa video diputar pada 60 frame per detik. (Anda dapat melihat framerate yang sebenarnya streaming dengan menggunakan -vs fpsdisplaysink, dan/atau -FPSdata.) Saat menggunakan ini, Anda harus menggunakan opsi sinkronisasi berbasis stempel waktu default -vsync
.
Sejak UxPlay-1.54, Anda dapat menampilkan "Cover Art" yang menyertainya dari sumber seperti Apple Music dalam mode Audio-Only (ALAC): jalankan " uxplay -ca
" di latar belakang, lalu jalankan penampil gambar dengan autoreload fitur: contohnya adalah "feh": jalankan " feh -R 1
" di latar depan; akhiri feh lalu Uxplay dengan " ctrl-C fg ctrl-C
".
Secara default, GStreamer menggunakan algoritme untuk mencari "videosink" (istilah GStreamer untuk driver grafis untuk menampilkan gambar) terbaik untuk digunakan. Anda dapat mengatasinya dengan opsi uxplay -vs
. Videosink mana yang tersedia bergantung pada sistem operasi dan perangkat keras grafis Anda: gunakan " gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
" untuk melihat apa yang tersedia. Beberapa kemungkinan di Linux/*BSD adalah:
glimagesink (OpenGL), waylandsink
xvimagesink , ximagesink (X11)
kmssink , fbdevsink (grafis konsol tanpa X11)
vaapisink (untuk grafis yang dipercepat perangkat keras Intel/AMD); untuk grafis perangkat keras NVIDIA (dengan CUDA) gunakan glimagesink yang digabungkan dengan " -vd nvh264dec
" (atau "nvh264sldec", varian baru yang akan menjadi "nvh264dec" di GStreamer-1.24).
Jika server "tanpa kepala" (tidak ada monitor yang terpasang, hanya menampilkan audio) gunakan -vs 0
.
GStreamer juga mencari "audiosink" terbaik; timpa pilihannya dengan -as
. Pilihan di Linux termasuk pulsesink, alsasink, pipewiresink, oss4sink; lihat apa yang tersedia dengan gst-inspect-1.0 | grep sink | grep -e audio -e Audio
.
Salah satu masalah umum melibatkan GStreamer yang mencoba menggunakan decoding video h264 perangkat keras yang tidak dikonfigurasi dengan benar atau tidak ada (misalnya, VAAPI). Coba " uxplay -avdec
" untuk memaksa decoding video perangkat lunak; jika ini berhasil, Anda dapat mencoba memperbaiki decoding video perangkat keras yang dipercepat jika Anda memerlukannya, atau cukup hapus instalan plugin GStreamer vaapi.
Lihat Penggunaan untuk opsi run-time lainnya.
Untuk video Framebuffer (untuk Raspberry Pi OS "Lite" dan distribusi non-X11 lainnya) gunakan KMS videosink "-vs kmssink" (framebuffer videosink DirectFB "dfbvideosink" rusak pada Pi, dan segfaults). Dalam hal ini Anda harus secara eksplisit menggunakan opsi "-vs kmssink", karena tanpanya, autovideosink tidak akan menemukan videosink yang benar.
Raspberry Pi 5 tidak menyediakan decoding perangkat keras H264 (dan tidak memerlukannya).
Pi Zero 2 W, 3 Model B+, dan 4 Model B harus menggunakan decoding perangkat keras H264 oleh GPU Broadcom, tetapi memerlukan modul kernel out-of-mainstream bcm2835_codec yang dipelihara di pohon kernel Raspberry Pi; distro yang diketahui memasoknya antara lain Raspberry Pi OS, Ubuntu, dan Manjaro-RPi4. Gunakan decoding perangkat lunak (opsi -avdec) jika modul ini tidak tersedia.
Uxplay menggunakan plugin Video4Linux2 (v4l2) dari GStreamer-1.22 dan yang lebih baru untuk mengakses GPU, jika decoding perangkat keras H264 digunakan. Ini seharusnya terjadi secara otomatis. Opsi -v4l2 dapat digunakan, tetapi biasanya yang terbaik adalah membiarkan GStreamer menemukan saluran video terbaiknya sendiri.
Pada distribusi lama (GStreamer <1.22), plugin v4l2 memerlukan patch: lihat UxPlay Wiki. OS Raspberry Pi lama (Bullseye) memiliki GStreamer-1.18.4 yang telah ditambal sebagian dan memerlukan opsi uxplay -bt709 (dan jangan gunakan -v4l2); masih lebih baik menerapkan patch lengkap dari UxPlay Wiki dalam kasus ini.
Untuk Raspberry Pi OS (Buster) "warisan ganda", tidak ada patch untuk GStreamer-1.14. Sebagai gantinya, pertama-tama buat GStreamer-1.18.6 yang lebih baru dari sumber menggunakan petunjuk ini sebelum membuat UxPlay.
Raspberry Pi 3 Model B+ yang menjalankan OS 32 bit juga dapat mengakses GPU dengan plugin GStreamer OMX (gunakan opsi " -vd omxh264dec
"), tetapi ini dirusak oleh firmware Pi 4 Model B. Dukungan OMX telah dihapus dari Raspberry Pi OS (Bullseye), tetapi hadir di Buster.
Video H265 (4K) didukung dengan decoding perangkat keras oleh GPU Broadcom pada model Raspberry Pi 5, serta pada Raspberry Pi 4 model B. Meskipun GStreamer tampaknya memanfaatkan decoding perangkat keras ini, kecepatan rendering video 4K yang memuaskan oleh UxPlay di model Raspberry Pi ini belum tercapai. Opsi "-h265" diperlukan untuk mengaktifkan dukungan h265. Koneksi ethernet kabel lebih disukai dalam mode ini (dan mungkin diperlukan oleh klien).
Bahkan dengan decoding video GPU, beberapa frame mungkin dihilangkan oleh model berdaya rendah untuk menjaga sinkronisasi audio dan video menggunakan stempel waktu. Di Legacy Raspberry Pi OS (Bullseye), raspi-config "Performance Options" memungkinkan menentukan berapa banyak memori yang akan dialokasikan ke GPU, tetapi pengaturan ini tampaknya tidak ada di Bookworm (tetapi masih dapat diatur ke misalnya 128MB dengan menambahkan baris "gpu_mem=128" di /boot/config.txt). Pi Zero 2 W (yang memiliki memori 512MB) bekerja dengan baik saat diuji di Bullseye 32 bit atau Bookworm Lite dengan alokasi 128MB untuk GPU (defaultnya sepertinya 64MB).
Opsi uxplay dasar untuk R Pi adalah uxplay [-vs
. Pilihan
= glimagesink
terkadang berguna. Dengan kompositor video Wayland, gunakan
= waylandsink
. Dengan video framebuffer, gunakan
= kmssink
.
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
Suara dan video akan diputar di host jarak jauh; "nohup" akan tetap menjalankan uxplay jika sesi ssh ditutup. Output terminal disimpan ke FILE (yang dapat berupa /dev/null untuk membuangnya)
Catatan: Fitur server AirPlay asli termasuk dalam MacOS 12 Monterey, tetapi terbatas pada perangkat keras terbaru. UXPlay dapat berjalan pada sistem macOS yang lebih lama yang tidak akan dapat menjalankan Monterey, atau dapat menjalankan Monterey tetapi tidak diputar.
Instruksi untuk macOS ini mengasumsikan bahwa alat pengembang baris xcode diinstal (jika Xcode diinstal, buka terminal, ketik "sudo xcode-select --instal" dan terima persyaratannya).
Juga diasumsikan bahwa cmake> = 3.13 diinstal: Ini dapat dilakukan dengan manajer paket MacPorts ( sudo port install cmake
), homebrew ( brew install cmake
), atau dengan unduhan dari https://cmake.org/download/. Juga instal git
jika Anda akan menggunakannya untuk mengambil UXPlay.
Selanjutnya instal Libplist dan OpenSSL-3.x. Perhatikan bahwa versi statis dari perpustakaan ini akan digunakan dalam build macOS, sehingga dapat dihapus setelah membangun UXPlay, jika Anda mau.
Jika Anda menggunakan Homebrew: brew install libplist openssl@3
Jika Anda menggunakan macports: sudo port install libplist-devel openssl3
Kalau tidak, bangun libplist dan openssl dari sumber: lihat instruksi di dekat akhir readme ini; Membutuhkan alat pengembangan (autoconf, automake, libtool, dll. ) Untuk diinstal.
Selanjutnya dapatkan rilis macOS terbaru dari GStreamer-1..0.
Menggunakan "Resmi" GStreamer (direkomendasikan untuk pengguna MacPorts dan Homebrew) : Instal rilis GStreamer untuk macOS dari https://gstreamer.freedesktop.org/download/. (Rilis ini berisi pkg-config-nya sendiri, jadi Anda tidak perlu menginstal satu.) Pasang paket GStreamer-1.0 dan GStreamer-1.0-devel. Setelah mengunduh, klik-klik pada mereka untuk menginstal (mereka menginstal ke /library/frameworks/gstreamer.framework). Pengguna Homebrew atau MacPorts tidak boleh menginstal (atau harus menghapus) gstreamer yang disediakan oleh manajer paket mereka, jika mereka menggunakan rilis "resmi".
Menggunakan GStreamer Homebrew : PKG-Config Diperlukan: ("BREW INSTAL PKG-Config GStreamer"). Ini menyebabkan sejumlah besar paket tambahan dipasang oleh homebrew sebagai dependensi. Instalasi homebrew GStreamer baru -baru ini telah dikerjakan ulang menjadi "formula" tunggal bernama gstreamer
, yang sekarang berfungsi tanpa memerlukan GST_PLUGIN_PATH untuk diatur dalam lingkungan. Homebrew Memasang GStreamer ke (HOMEBREW)/lib/gstreamer-1.0
di mana (HOMEBREW)/*
is /opt/homebrew/*
pada mac silikon apel, dan /usr/local/*
di mac intel; Jangan meletakkan plugin non-homebrew tambahan (yang Anda bangun sendiri) di sana, dan sebaliknya mengatur gst_plugin_path untuk menunjuk ke lokasi mereka (homebrew tidak menyediakan gstreamer lengkap, tetapi tampaknya memiliki segala yang dibutuhkan untuk UXPlay).
Menggunakan GStreamer yang diinstal dari MacPorts : Ini tidak disarankan, karena saat ini MacPorts GStreamer sudah lama (v1.16.2), tidak terawat, dan dibangun untuk menggunakan x11:
(Jika Anda benar-benar ingin menggunakan macports gstreamer-1.16.2, instal pkgconf ("port sudo instal pkgconf"), lalu "port sudo instal gstreamer1-gst-plugins-base-base gstreamer1-gst-plugins-greamer1-gst-plugins Gstreamer1-gst-plugins-greamer1-gst-plugins -BAD GStreamer1-GST-Libav ". Untuk dukungan X11 pada macOS, kompilasi UXPlay menggunakan opsi cmake khusus -DUSE_X11=ON
, dan jalankannya dari terminal xquartz dengan -Vs ximageSink; mac non-retina yang lebih tua memerlukan resolusi yang lebih rendah saat menggunakan X11: uxplay -s 800x600
.)
Setelah menginstal GStreamer, Bangun dan Instal UXPlay: Buka terminal dan ubah ke direktori sumber UXPlay ("UXPlay-Master" untuk unduhan zipfile, "UXPlay" untuk unduhan "Git Clone") dan membangun/menginstal dengan "CMake .; Make; sudo membuat instal "(sama untuk linux).
Menjalankan UXPlay saat memeriksa peringatan GStreamer (lakukan ini dengan "Ekspor GST_DEBUG = 2" sebelum runnng uxplay) mengungkapkan bahwa dengan default (karena UXPlay 1.64) penggunaan stempel waktu untuk sinkronisasi video, banyak bingkai video sedang dijatuhkan (hanya pada macOS), Mungkin karena kesalahan lain (tentang Videometa) yang muncul dalam peringatan GStreamer. Rekomendasi: Gunakan opsi UXPlay "no timestamp" baru -vsync no
" (Anda dapat menambahkan baris" vsync no "di file konfigurasi UXPlayRC).
Pada macOS dengan instalasi GStreamer ini, satu -satunya video yang tersedia tampaknya adalah GleMageSink (pilihan default yang dibuat oleh autovideosink) dan OsXvideosink. Judul jendela tidak menunjukkan nama server AirPlay, tetapi jendela terlihat oleh aplikasi berbagi layar (misalnya, zoom). Satu -satunya audiosink yang tersedia tampaknya adalah Osxaudiosink.
Opsi -NC selalu digunakan, apakah itu dipilih atau tidak. Ini adalah solusi untuk masalah dengan video gstreamer pada macOS: jika pipa gstreamer dihancurkan saat jendela cermin masih terbuka, sebuah segfault terjadi.
Dalam kasus kelam, pengaturan resolusi "-s wxh" tidak mempengaruhi ukuran jendela cermin terbuka awal (kecil), tetapi jendela dapat diperluas menggunakan mouse atau trackpad. Sebaliknya, jendela yang dibuat dengan "-vs osxvideosink" awalnya besar, tetapi memiliki rasio aspek yang salah (gambar peregangan); Dalam hal ini rasio aspek berubah ketika lebar jendela diubah dengan menyeret sisi; Opsi -vs "osxvideosink force-aspect-ratio=true"
dapat digunakan untuk membuat jendela memiliki rasio aspek yang benar saat pertama kali terbuka.
Unduh dan instal Bonjour SDK untuk Windows v3.0 . Anda dapat mengunduh SDK tanpa pendaftaran di softpedia.com, atau mendapatkannya dari situs resmi Apple https://developer.apple.com/download (Apple membuat Anda mendaftar sebagai pengembang untuk mengaksesnya dari situs mereka). Ini harus menginstal Bonjour SDK sebagai C:Program FilesBonjour SDK
.
(Ini untuk jendela 64-bit; build untuk jendela 32-bit harus dimungkinkan, tetapi tidak diuji.) Lingkungan build MSYS2 seperti UNIX akan digunakan: Unduh dan instal MSYS2 dari situs resmi https: // www .msys2.org/. Terima Lokasi Instalasi Default C:mysys64
.
Paket MSYS2 diinstal dengan varian dari Paket Manajer "Pacman" yang digunakan oleh Arch Linux. Buka terminal "msys2 mingw64" dari tab msys2 di menu start windows, dan perbarui instalasi msys2 baru dengan "pacman -syu". Kemudian pasang kompiler mingw-64 dan cmake
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
Kompiler dengan semua dependensi yang diperlukan akan diinstal di direktori MSYS64, dengan jalur default C:/msys64/mingw64
. Di sini kita hanya akan membangun UXPlay dari baris perintah di lingkungan MSYS2 (ini menggunakan " ninja
" sebagai pengganti " make
" untuk sistem build).
Unduh UXPlay terbaru dari GitHub (untuk menggunakan git
, instal dengan pacman -S git
, lalu " git clone https://github.com/FDH2/UxPlay
") , lalu instal ketergantungan UXPlay (OpenSSL sudah diinstal dengan MSYS2):
pacman -S mingw-w64-x86_64-libplist mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base
Jika Anda mencoba sistem build windows yang berbeda, versi MSVC dari Gstreamer untuk Windows tersedia dari situs GStreamer resmi, tetapi hanya build MINGW 64-bit pada MSYS2 yang telah diuji.
CD ke Direktori Sumber UXPlay, lalu " mkdir build
" dan " cd build
". Proses Build mengasumsikan bahwa Bonjour SDK diinstal di C:Program FilesBonjour SDK
. Jika ada di tempat lain, atur variabel enviroment bonjour_sdk_home untuk menunjuk ke lokasinya. Kemudian bangun UXPlay dengan
cmake ..
ninja
Dengan asumsi tidak ada kesalahan di salah satu dari ini, Anda akan membangun UXPlay uxplay.exe yang dapat dieksekusi di direktori saat ini ("build"). Fitur "Sudo Make Make Instal" dan "Sudo Make Make Install" yang ditawarkan dalam bangunan lain tidak tersedia di Windows; Sebagai gantinya, lingkungan msys2 memiliki /mingw64/...
tersedia, dan Anda dapat menginstal executable uxplay.exe di C:/msys64/mingw64/bin
(plus manpage dan dokumentasi di C:/msys64/mingw64/share/...
) dengan
cmake --install . --prefix /mingw64
Untuk dapat melihat manpage, Anda perlu menginstal penampil manpage dengan " pacman -S man
".
Untuk menjalankan uxplay.exe, Anda perlu menginstal beberapa paket plugin GStreamer dengan pacman -S mingw-w64-x86_64-gst-
, di mana yang diperlukan
diberikan oleh
Paket plugin Gstreamer MSYS2 yang mungkin Anda gunakan terdaftar dalam paket MSYS2.
Anda juga perlu memberikan izin kepada UXPlay uxplay.exe yang dapat dieksekusi untuk mengakses data melalui firewall Windows. Anda dapat secara otomatis ditawari pilihan untuk melakukan ini ketika Anda pertama kali menjalankan UXPlay, atau Anda mungkin perlu melakukannya menggunakan Windows Settings-> UPDATE dan Security-> Windows Security-> Firewall & Network Protection-> Izinkan aplikasi melalui firewall . Jika perlindungan virus Anda menandai uxplay.exe sebagai "mencurigakan" (tetapi tanpa tanda tangan malware yang sebenarnya), Anda mungkin perlu memberikannya pengecualian.
Sekarang tes dengan menjalankan " uxplay
" (di jendela terminal MSYS2). Jika Anda perlu menentukan audioSink, ada dua pilihan utama di Windows: plugin -as directsoundsink
"-seasedsoundSink", dan plugin Windows Audio Audio Sesi (WASAPI) yang lebih modern " -as wasapisink
", yang mendukung opsi tambahan seperti
uxplay -as 'wasapisink device=""'
di mana
Menentukan perangkat audio yang tersedia oleh GUID, yang dapat ditemukan menggunakan " gst-device-monitor-1.0 Audio
":
memiliki bentuk seperti {0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
. Jika " device
" tidak ditentukan, perangkat audio default digunakan.
Jika Anda ingin menentukan VideoSink menggunakan opsi -vs
, beberapa pilihan untuk
adalah d3d11videosink
, d3dvideosink
, glimagesink
, gtksink
.
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
, atau dapatkan kemampuan untuk beralih masuk dan keluar dari mode fullscreen menggunakan tombol alt-enter " Kombinasi dengan opsi -vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
. Untuk kenyamanan, opsi ini akan ditambahkan jika hanya -vs d3d11videosink
dengan atau tanpa opsi layar penuh "-FS" digunakan. (Pengguna Windows mungkin ingin menambahkan " vs d3d11videosink
" (tidak ada awal " -
") ke file opsi startup UXPlay; lihat "Man UXPlay" atau "UXPlay -H".) UXPlay.exe yang dapat dieksekusi juga dapat dijalankan tanpa lingkungan MSYS2, di terminal Windows, dengan C:msys64mingw64binuxplay
.
Pilihan:
-
") dalam file startup UXplay (baik diberikan oleh variabel lingkungan $UXPLAYRC
, atau ~/.uxplayrc
atau ~/.config/uxplayrc
); Baris yang dimulai dengan " #
" diperlakukan sebagai komentar, dan diabaikan. Opsi baris perintah opsi superse di file startup.-n server_name (default: uxplay); server_name@ hostname akan menjadi nama yang tampaknya menawarkan layanan AirPlay ke iPad Anda, iPhone dll, di mana nama host adalah nama server yang menjalankan UXPlay. Ini juga sekarang akan menjadi nama yang ditunjukkan di atas jendela tampilan cermin (x11).
-nh Jangan menambahkan "@ hostname " di akhir nama server AirPlay.
-H265 Aktifkan Dukungan "ScreenMulticodec" (AirPlay "fitur" BIT 42) untuk menerima video H265 (4K/HEVC) selain video H264 (1080p) dalam mode layar-mirror. Ketika opsi ini digunakan, dua "pipa video" (satu untuk H264, satu untuk H265) dibuat. Jika ada plugin Gstreamer dalam pipa yang spesifik untuk H264 atau H265, versi yang benar akan digunakan di setiap pipa. Koneksi Ethernet klien-server kabel lebih disukai daripada WiFi untuk video 4K, dan mungkin diperlukan oleh klien. Hanya perangkat Apple baru-baru ini (Mac atau iPad M1/M2, dan beberapa iPhone) yang dapat mengirim video H265 jika resolut "-s wxh" dengan H> 1080 diminta. Opsi "-H265" mengubah resolusi default ("-s" opsi) dari 1920x1080 menjadi 3840x2160, dan meninggalkan opsi framerate maksimum default ("-fps") pada 30fps.
-Pin [nnnn] : (Sejak v1.67) Gunakan otentikasi "pin" gaya Apple (satu kali) ketika klien baru terhubung untuk pertama kalinya: kode pin empat digit ditampilkan di terminal, dan klien Layar menunjukkan prompt login untuk dimasukkan. Ketika "-pin" digunakan dengan sendirinya, kode pin acak baru dipilih untuk setiap otentikasi; Jika "-pin nnnn" (misalnya, "-Pin 3939") digunakan, ini akan menetapkan kode tetap yang tidak berubah. Otentikasi menambahkan server ke daftar "server tepercaya" klien dan klien tidak perlu realutenticate asalkan kunci publik klien dan server tetap tidak berubah. (Secara default sejak v1.68, kunci publik server dihasilkan dari alamat MAC, yang dapat diubah dengan opsi -m; lihat opsi -Key untuk metode alternatif pembuatan kunci). (Tambahkan garis "pin" di file startup UXPlay jika Anda ingin server UXPlay menggunakan protokol otentikasi pin).
-Reg [ nama file ] : (Sejak v1.68). Jika "-pin" digunakan, opsi ini memelihara daftar "klien tepercaya" pin-authentikasi dalam $ home/.uxplay.register (atau secara opsional, dalam nama file ). Tanpa opsi ini, mengembalikan klien yang melewatkan otentikasi pin dipercaya dan tidak diperiksa. Opsi ini mungkin berguna jika UXplay digunakan dalam lingkungan yang lebih publik, untuk merekam detail klien; Registernya adalah teks, satu baris per klien, dengan kunci publik klien (format base-64), ID perangkat, dan nama perangkat; Mengomentari (dengan "#") atau menghapus line Deregisters klien yang sesuai (lihat opsi -restrict, -block, -papat lebih banyak cara untuk mengontrol akses klien). (Tambahkan baris "Reg" di file startup jika Anda ingin menggunakan fitur ini.)
-vsync [x] (dalam mode mirror :) Opsi ini ( sekarang default ) menggunakan cap waktu untuk menyinkronkan audio dengan video di server, dengan penundaan audio opsional dalam (desimal) milidetik ( x = "20.5" berarti penundaan 0,0205 detik: Penundaan positif atau negatif kurang dari satu detik diperbolehkan.) Ini diperlukan pada sistem daya rendah seperti Raspberry Pi tanpa decoding video perangkat keras.
-Vsync no (dalam mode mirror :) Ini mematikan sinkronisasi audio-video berbasis waktu, memulihkan perilaku default sebelum UXPlay-1.64. Sistem desktop standar tampaknya bekerja dengan baik tanpa menggunakan cap waktu: Mode ini sesuai untuk "streaming langsung" seperti menggunakan UXplay sebagai monitor kedua untuk komputer Mac, atau memantau webcam; Dengan itu, tidak ada bingkai video yang dijatuhkan.
-Async [x] (dalam mode audio-only (ALAC) :) Opsi ini menggunakan cap waktu untuk menyinkronkan audio pada server dengan video pada klien, dengan penundaan audio opsional dalam milidetik (desimal) ( x = "20.5" berarti 0,0205 detik penundaan: penundaan positif atau negatif kurang dari satu detik diizinkan.) Karena klien menambahkan penundaan video untuk memperhitungkan latensi, server dalam mode -Async menambahkan penundaan audio yang setara, yang berarti bahwa perubahan audio seperti jeda atau a Pergantian trek tidak akan segera berlaku. Ini mungkin pada prinsipnya dimitigasi dengan menggunakan pengaturan latensi audio -al
untuk mengubah latensi (default 0,25 detik) yang dilaporkan server ke klien, tetapi saat ini mengubah ini tampaknya tidak memiliki efek apa pun .
-Async no . Ini masih perilaku default dalam mode hanya audio, tetapi opsi ini mungkin berguna sebagai opsi baris perintah untuk mematikan opsi -async
yang diatur dalam file konfigurasi "UXPlayRC".
-DB Low [: tinggi ] Menghidupkan kembali atenuasi pengendalian volume Airplay (gain) dari -30dB: 0db ke rendah : 0db atau rendah : tinggi . Batas bawah rendah harus negatif (atenuasi); Batas atas tinggi bisa menjadi tanda. (GStreamer membatasi volume-augmentasi dengan tinggi sehingga tidak dapat melebihi +20dB). Penyimpanan itu "datar", sehingga untuk -db -50: 10, perubahan atenuasi pemutaran oleh -7dB diterjemahkan ke -7 x (60/30) = -14dB atenuasi, dan volume maksimum (AirPlay 0DB) adalah augmentasi 10dB, dan AirPlay -30dB akan menjadi -50dB. Perhatikan bahwa nilai AirPlay minimum (-30db tepatnya) diterjemahkan ke "Mute".
-Taper menyediakan profil kontrol volume udara "meruncing" (cocok dengan yang disebut "dasl-tapering" dalam shairport-sync): setiap kali panjang volume slider (atau jumlah langkah di atas bisu, di mana 16 langkah = penuh Volume) dikurangi 50%, volume yang dirasakan dibelah dua (atenuasi 10dB). (Ini dimodifikasi pada volume rendah, untuk menggunakan volume "tidak terperangkap" jika lebih keras.)
-S WXH EG -S 1920X1080 (= "1080p"), resolusi lebar dan tinggi default dalam piksel untuk video H264. (Standarnya menjadi 3840x2160 (= "4K") ketika opsi -H265 digunakan.) Ini hanya permintaan yang dibuat untuk klien AirPlay, dan mungkin tidak akan menjadi resolusi akhir yang Anda dapatkan. W dan H adalah bilangan bulat dengan empat digit atau kurang. Perhatikan bahwa ukuran piksel tinggi adalah pengontrol yang digunakan oleh klien untuk menentukan format streaming; Lebar disesuaikan secara dinamis dengan bentuk gambar (format potret atau lansekap, tergantung pada bagaimana iPad diadakan, misalnya).
-s wxh@r seperti di atas, tetapi juga memberi tahu klien AirPlay tentang laju penyegaran layar tampilan. Default adalah R = 60 (60 Hz); R harus menjadi bilangan bulat kurang dari 256.
-O menyalakan opsi "overscerned" untuk jendela tampilan. Ini mengurangi resolusi gambar dengan menggunakan beberapa piksel yang diminta oleh opsi -s wxh (atau nilai default mereka 1920x1080) dengan menambahkan bingkai batas piksel yang tidak digunakan (yang akan hilang dalam layar layar penuh yang berlebihan, dan tidak ada ditampilkan oleh gstreamer). Rekomendasi: Jangan gunakan opsi ini kecuali ada beberapa alasan khusus untuk menggunakannya.
-FS menggunakan mode layar penuh, tetapi hanya berfungsi dengan X11, Wayland, Vaapi, dan D3D11 (Windows).
-P memungkinkan Anda untuk memilih port jaringan yang digunakan oleh UXPlay (ini perlu dibuka jika server berada di belakang firewall). Dengan sendirinya, -P menetapkan "Legacy" port TCP 7100, 7000, 7001, UDP 6000, 6001, 7011. -PN (misalnya -P 35000) mengatur port TCP dan UDP n, n+1, n+2. -P N1, N2, N3 (nilai-nilai yang dipisahkan koma) mengatur setiap port secara terpisah; -p N1, N2 Mengatur port N1, N2, N2+1. -p tcp n atau -p udp n set hanya port TCP atau UDP. Port harus dalam kisaran [1024-65535].
Jika opsi -p tidak digunakan, port dipilih secara dinamis (secara acak), yang tidak akan berfungsi jika firewall berjalan.
-Avdec Pasukan Penggunaan perangkat lunak H264 Decoding Menggunakan elemen gstreamer AVDEC_H264 (libav H264 decoder). Opsi ini harus mencegah autovideosink memilih plugin VideoSink yang dipercepat perangkat keras seperti Vaapisink.
-VP Parser memilih elemen parser H264 Pipeline Gstreamer, default adalah H264Parse. Menggunakan kutipan "..." memungkinkan opsi ditambahkan.
-VD Decoder memilih elemen decoder H264 pipa GStreamer, bukan nilai default "decodebin" yang memilihnya untuk Anda. Decoding perangkat lunak dilakukan oleh AVDEC_H264; Berbagai decoder perangkat keras meliputi: VAAPIH264DEC, NVDEC, NVH264DEC, V4L2H264DEC (ini mengharuskan perangkat keras yang sesuai tersedia). Menggunakan kutipan "..." memungkinkan beberapa parameter untuk disertakan dengan nama dekoder.
-VC Converter memilih elemen Videoconverter Pipeline GStreamer, alih -alih nilai default "VideocOnvert". Saat menggunakan decoding perangkat keras Video4Linux2 oleh GPU, -vc v4l2convert
juga akan menggunakan GPU untuk konversi video. Menggunakan kutipan "..." memungkinkan beberapa parameter untuk disertakan dengan nama konverter.
-VS VideoSink memilih VideoSink GStreamer, alih -alih nilai default "AutoVideoSink" yang memilihnya untuk Anda. Beberapa pilihan video adalah: ximageSink, xvimageSink, vaapisink (untuk grafik intel), gtksink, keliru, waylandsink, osxvideosink (untuk macOS), kmssink (untuk sistem tanpa x11, seperti raspberry pi os lite) atau fpsplaysink (yang menunjukkan streaming frame pi in lite) atau fpsplaysink (yang menunjukkan streaming frame. FPS). Menggunakan kutipan "..." memungkinkan beberapa parameter untuk disertakan dengan nama VideoSink. Misalnya, mode layar penuh didukung oleh plugin Vaapisink, dan diperoleh menggunakan -vs "vaapisink fullscreen=true"
; Ini juga berfungsi dengan waylandsink
. Sintaks dari opsi tersebut khusus untuk plugin yang diberikan (lihat dokumentasi GStreamer), dan beberapa pilihan VideoSink mungkin tidak berfungsi pada sistem Anda.
-Vs 0 Menekan tampilan video streaming. Dalam mode mirror, layar klien masih dicerminkan pada laju pengurangan 1 bingkai per detik, tetapi tidak ditampilkan atau ditampilkan. Opsi ini harus selalu digunakan jika server "tanpa kepala" (tanpa layar terlampir untuk menampilkan video), dan hanya digunakan untuk membuat audio, yang akan menjadi audio yang dikompresi dengan lossily dalam mode cermin dengan video yang tidak ada, dan ALAC berkualitas tinggi berkualitas lebih unggul Apple Lossless Audio dalam mode AirPlay Audio-Only.
-V4L2 Pengaturan Video untuk Perangkat Keras H264 DECODING VIDEO DI GPU oleh Video4Linux2. Setara dengan -vd v4l2h264dec -vc v4l2convert
.
-BT709 Solusi untuk kegagalan plugin Video4Linux2 yang lebih lama untuk mengenali penggunaan Apple dari varian "warna full-range" yang tidak umum (tetapi diizinkan) dari standar warna BT709 untuk TV digital. Ini tidak lagi diperlukan oleh GStreamer-1.20.4 dan Backports dari itu.
-RPI setara dengan "-v4l2" (tidak berlaku untuk Raspberry Pi Model 5, dan dihapus dalam UXPlay 1.67)
-rpigl setara dengan "-rpi -vs glimageSink". (Dihapus sejak UXPlay 1.67)
-rpifb setara dengan "-rpi -vs kmssink" (dihapus sejak uxplay 1.67)
-rpiwl setara dengan "-rpi -vs waylandsink". (Dihapus sejak UXPlay 1.67)
-Sebagai AudioSink memilih GStreamer AudioSink, alih -alih membiarkan AutoAudiosink memilihnya untuk Anda. Beberapa pilihan audiosink adalah: Pulsesink, Alsasink, Pipewiresink, Osssink, Oss4Sink, Jackaudiosink, Osxaudiosink (untuk MacOS), Wasapisink, DirectSoundSink (untuk Windows). Menggunakan kutipan "..." mungkin memungkinkan beberapa parameter opsional (misalnya -as "alsasink device=..."
untuk menentukan perangkat output non -default). Sintaks opsi tersebut khusus untuk plugin yang diberikan (lihat dokumentasi GStreamer), dan beberapa pilihan audioSink mungkin tidak berfungsi pada sistem Anda.
-Sebuah 0 (atau hanya -a ) menekan bermain audio yang stream, tetapi menampilkan video stream.
-AL X menentukan latensi audio X dalam (desimal) detik di Audio-Only (ALAC), yang dilaporkan ke klien. Nilai dalam kisaran [0,0, 10,0] detik diizinkan, dan akan dikonversi menjadi jumlah mikrodetik. Default adalah 0,25 detik (250000 USEC). (Namun, klien tampaknya mengabaikan latensi yang dilaporkan ini, jadi opsi ini tampaknya tidak berfungsi.)
-CA FileName menyediakan file (di mana nama file dapat menyertakan jalur lengkap) yang digunakan untuk output "sampul seni" (dari Apple Music, dll .) Dalam mode Audio-only ALAC. File ini ditimpa dengan sampul seni terbaru saat tiba. Cover Art (format JPEG) dibuang jika opsi ini tidak digunakan. Gunakan dengan penampil gambar yang memuat ulang gambar jika berubah, atau secara teratur ( misalnya sekali per detik.). Untuk mencapai hal ini, jalankan " uxplay -ca [path/to/]filename &
" di latar belakang, lalu jalankan pemirsa gambar di latar depan. Contohnya, menggunakan feh
sebagai penonton: jalankan " feh -R 1 [path/to/]filename
" (di jendela terminal yang sama di mana uxplay dimasukkan ke latar belakang). Untuk berhenti, gunakan ctrl-C fg ctrl-C
untuk mengakhiri pemirsa gambar, membawa uxplay
ke latar depan, dan menghentikannya juga.
-Reset n menetapkan batas N kegagalan batas waktu berturut -turut dari klien untuk menanggapi permintaan NTP dari server (ini dikirim setiap 3 detik untuk memeriksa apakah klien masih ada, dan disinkronkan dengannya). Setelah N kegagalan, klien akan dianggap offline, dan koneksi akan diatur ulang untuk memungkinkan koneksi baru. Nilai default n adalah 5; Nilai n = 0 berarti "tidak ada batasan" pada batas waktu.
-noFreeze menutup jendela video setelah reset karena batas waktu NTP (default adalah membiarkan jendela terbuka untuk memungkinkan rekonseksi yang lebih halus ke klien yang sama). Opsi ini mungkin berguna dalam mode layar penuh.
-NC mempertahankan perilaku UXplay sebelumnya <1,45 yang tidak menutup jendela video ketika klien mengirimkan sinyal "berhenti mirroring". Opsi ini saat ini digunakan secara default di MacOS, karena jendela yang dibuat dalam macOS oleh GStreamer tidak berakhir dengan benar (itu menyebabkan segfault) jika masih terbuka ketika pipa Gstreamer ditutup.
-NoHold menjatuhkan koneksi saat ini ketika klien baru mencoba untuk terhubung. Tanpa opsi ini, klien saat ini mempertahankan kepemilikan eksklusif UXplay sampai terputus.
-Restrict membatasi klien yang diizinkan untuk terhubung ke yang ditentukan oleh -allow
. DeviceID memiliki bentuk alamat MAC yang ditampilkan oleh UXPlay ketika klien mencoba untuk terhubung, dan tampaknya tidak dapat diubah. Ini memiliki format XX:XX:XX:XX:XX:XX
, x = 0-9, AF, dan mungkin alamat MAC perangkat keras "benar" dari perangkat. Perhatikan bahwa klien iOS umumnya mengekspos berbagai "alamat WI_FI pribadi acak" (alamat MAC "palsu") ke jaringan yang berbeda (untuk alasan privasi, untuk mencegah pelacakan), yang dapat berubah, dan tidak mengorpondasi ke DeviceID.
-Restrict No Hapus Batasan (default). Ini berguna sebagai argumen baris perintah untuk membatasi overide yang ditetapkan dalam file startup.
-Lower ID menambahkan deviceId = id ke daftar klien yang diizinkan ketika pembatasan klien ditegakkan. Biasanya ini akan menjadi entri di file startup UXPlayRC.
-Block ID selalu memblokir klien dengan DeviceID = ID , bahkan ketika pembatasan klien tidak ditegakkan secara umum. Biasanya ini akan menjadi entri di file startup UXPlayRC.
-FPSData menyalakan pemantauan laporan reguler tentang kinerja streaming video yang dikirim oleh klien. Ini akan ditampilkan di jendela terminal jika opsi ini digunakan. Data diperbarui oleh klien pada interval 1 detik.
-FPS N Mengatur frame rate maksimum (dalam bingkai per detik) untuk klien AirPlay untuk streaming video; N harus menjadi bilangan bulat kurang dari 256 (klien dapat memilih untuk melayani video pada setiap frame rate lebih rendah dari ini; default adalah 30 fps.) Pengaturan 60 fps dapat memberi Anda video yang lebih baik tetapi tidak direkomendasikan pada Raspberry Pi. Pengaturan di bawah 30 fps mungkin berguna untuk mengurangi latensi jika Anda menjalankan lebih dari satu contoh UXplay secara bersamaan. Pengaturan ini hanya merupakan penasihat untuk perangkat klien, jadi mengatur nilai tinggi tidak akan memaksa framerate tinggi. (Anda dapat menguji menggunakan "-VS fpsDisplaySink" untuk melihat framerate apa yang diterima, atau menggunakan opsi -FPSData yang menampilkan data kinerja aliran video yang terus-menerus dikirim oleh klien selama streaming video.)
-f {h | v | i} mengimplementasikan gambar "videoflip" transformasi: h = flip horizontal (flip kanan-kiri, atau gambar cermin); V = flip vertikal; I = Rotasi atau inversi atau inversi 180 derajat (yang merupakan kombinasi H dengan V).
-r {r | l} 90 derajat kanan (searah jarum jam) atau rotasi kiri (berlawanan arah jarum jam); Transformasi gambar ini dilakukan setelah transformasi -f apa pun.
-M [MAC] Mengubah Alamat Mac (ID Perangkat) yang digunakan oleh UXPlay (default adalah menggunakan alamat Mac perangkat keras yang benar -benar dilaporkan oleh kartu jaringan komputer host). (Berbagai server_name, alamat Mac, dan port jaringan diperlukan untuk setiap UXPlay yang berjalan jika Anda mencoba menjalankan lebih dari satu contoh UXPlay di komputer yang sama.) Jika [Mac] (dalam Formulir XX: XX: XX: XX: XX: XX, 6 Octets Hex) tidak diberikan, alamat MAC acak dihasilkan. Jika UXPlay gagal menemukan alamat MAC yang sebenarnya dari kartu jaringan, (lebih khusus lagi, alamat MAC yang digunakan oleh antarmuka jaringan aktif pertama yang terdeteksi) Alamat MAC acak akan digunakan bahkan jika opsi -M tidak ditentukan. (Perhatikan bahwa alamat MAC acak akan berbeda setiap kali UXPlay dimulai).
-Key [ fileName ] : Opsi ini (lebih aman) untuk menghasilkan dan menyimpan kunci publik yang gigih (diperlukan untuk opsi -pin) telah diganti secara default dengan metode (kurang aman) yang menghasilkan kunci dari "ID perangkat server" ID perangkat server "server server "(Alamat MAC, yang dapat diubah dengan opsi -m, dengan nyaman sebagai opsi file startup). Ketika opsi -Key digunakan, keypair yang dihasilkan dengan aman dihasilkan dan disimpan dalam $HOME/.uxplay.pem
, jika file itu tidak ada, atau dibaca darinya, jika ada. ; . Opsi ini harus diatur dalam file startup UXPlay sebagai baris "tombol" atau " nama file kunci" (tidak ada awal "-"), di mana nama file adalah jalur lengkap yang harus dilampirkan dalam kutipan ( "...."
) jika itu berisi ruang kosong. Karena metode default lebih sederhana, dan keamanan akses klien ke UXplay tidak mungkin menjadi masalah penting, opsi -Key tidak lagi disarankan .
-DACP [ fileName ] : Ekspor Klien saat ini DACP-ID dan Kunci Remot Aktif ke File: Default adalah $ home/.uxplay.dacp. (Opsional dapat diubah menjadi nama file ). Dapat digunakan dengan aplikasi remote control. File bersifat sementara: hanya ada saat klien terhubung.
-VDMP Dumps H264 Video untuk mengajukan videodump.h264. -VDMP n Dumps tidak lebih dari unit nal untuk videodump.x.h264; x = 1,2, ... meningkat setiap kali unit SPS/PPS tiba. Untuk mengubah nama videodump , gunakan -VDMP [n] nama file .
-Admp dumps audio untuk mengajukan audiodump.x.aac (aac-eld format audio), audiodump.x.alac (audio format alac) atau audiodump.x.aud (audio format lainnya), di mana x = 1,2,3 ... meningkat setiap kali format audio berubah. -Admp n membatasi jumlah paket yang dibuang ke file ke n atau kurang. Untuk mengubah nama AudioDump , gunakan -Admp [n] nama file . Perhatikan bahwa (tidak seperti video yang dibuang) audio yang dibuang saat ini hanya berguna untuk debugging, karena tidak dikemas dalamnya agar dapat dimainkan dengan pemain audio standar.
-D Mengaktifkan output debug. Catatan: Ini tidak menunjukkan kesalahan gstreamer atau pesan debug. Untuk melihat kesalahan gstreamer dan pesan peringatan, atur variabel lingkungan gst_debug dengan "ekspor gst_debug = 2" sebelum menjalankan uxplay. Untuk melihat pesan informasi GStreamer, atur gst_debug = 4; Untuk pesan debug, gst_debug = 5; Tingkatkan ini untuk melihat lebih banyak pekerjaan batin gstreamer.
Catatan: uxplay
dijalankan dari baris perintah terminal, dan pesan informasi ditulis ke terminal.
Satu pengguna (di Ubuntu) menemukan kompilasi gagal dengan pesan tentang tautan ke "usr/local/lib/libcrypto.a" dan "zlib". Ini karena (selain instalasi Ubuntu standar LibsSL-dev), pengguna tidak menyadari bahwa instalasi kedua dengan libcrypto di /usr /lokal hadir. Solusi: Ketika lebih dari satu instalasi OpenSSL hadir, atur variabel lingkungan Open_SSL_ROOT_DIR untuk menunjuk ke yang benar; Pada ubuntu 64-bit, ini dilakukan dengan menjalankan export OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
sebelum menjalankan cmake.
Layanan DNS_SD-Discovery ("Bonjour" atau "Zeroconf") diperlukan agar UXPlay bekerja. Di Linux, biasanya akan disediakan oleh Avahi, dan untuk memecahkan masalah ini, Anda harus menggunakan alat avahi-browse
. (Anda mungkin perlu menginstal paket terpisah dengan nama seperti avahi-utils
untuk mendapatkan ini.)
Di Linux, pastikan Avahi diinstal, dan mulai layanan Avahi-Daemon pada sistem yang menjalankan UXPlay (distribusi Anda akan mendokumentasikan bagaimana melakukan ini, misalnya: sudo systemctl
atau sudo service avahi-daemon
dengan
salah satu dari mengaktifkan, menonaktifkan, memulai, berhenti, status Anda mungkin perlu mengedit file avahi -daemon.conf (biasanya di /etc /avahi /, temukan dengan " sudo find /etc -name avahi-daemon.conf
"): Pastikan" nonaktifkan-penerbitan " bukan opsi yang dipilih). Beberapa sistem dapat menggunakan daemon MDNSD sebagai alternatif untuk menyediakan layanan DNS-SD. (FreeBSD offers both alternatives, but only Avahi was tested; see here.)
If UxPlay stops with the "No DNS-SD Server found" message, this means that your network does not have a running Bonjour/zeroconf DNS-SD server. Before v1.60, UxPlay used to stall silently if DNS-SD service registration failed, but now stops with an error message returned by the DNSServiceRegister function: kDNSServiceErr_Unknown if no DNS-SD server was found: (A NixOS user found that in NixOS, this error can also occur if avahi-daemon service IS running with publishing enabled, but reports "the error disappeared on NixOS by setting services.avahi.openFirewall to true".) Other mDNS error codes are in the range FFFE FF00 (-65792) to FFFE FFFF (-65537), and are listed in the dnssd.h file. An older version of this (the one used by avahi) is found here. A few additional error codes are defined in a later version from Apple.
If UxPlay stalls without an error message and without the server name showing on the client , this is a network problem (if your UxPlay version is older than 1.60, it is also the behavior when no DNS-SD server is found.)
A useful tool for examining such network problems from the client end is the (free) Discovery DNS-SD browser available in the Apple App Store for both iOS (works on iPadOS too) and macOS.
If your router has this problem, a reported "fix" is to (at least on 5GHz) use fixed channel and/or fixed (not dynamic) channel width.
This is usually because Avahi is only using the "loopback" network interface, and is not receiving mDNS queries from new clients that were not listening when UxPlay started.
To check this, after starting uxplay, use the utility avahi-browse -a -t
in a different terminal window on the server to verify that the UxPlay AirTunes and AirPlay services are correctly registered (only the AirTunes service is used in the "Legacy" AirPlay Mirror mode used by UxPlay, but the AirPlay service is used for the initial contact).
The results returned by avahi-browse should show entries for uxplay like
+ eno1 IPv6 UxPlay AirPlay Remote Video local
+ eno1 IPv4 UxPlay AirPlay Remote Video local
+ lo IPv4 UxPlay AirPlay Remote Video local
+ eno1 IPv6 863EA27598FE@UxPlay AirTunes Remote Audio local
+ eno1 IPv4 863EA27598FE@UxPlay AirTunes Remote Audio local
+ lo IPv4 863EA27598FE@UxPlay AirTunes Remote Audio local
If only the loopback ("lo") entries are shown, a firewall on the UxPlay host is probably blocking full DNS-SD service, and you need to open the default UDP port 5353 for mDNS requests, as loopback-based DNS-SD service is unreliable.
If the UxPlay services are listed by avahi-browse as above, but are not seen by the client, the problem is likely to be a problem with the local network.
This shows that a DNS-SD service is working, clients hear UxPlay is available, but the UxPlay server is not receiving the response from the client. This is usually because a firewall on the server is blocking the connection request from the client. (One user who insisted that the firewall had been turned off turned out to have had two active firewalls ( firewalld and ufw ) both running on the server!) If possible, either turn off the firewall to see if that is the problem, or get three consecutive network ports, starting at port n, all three in the range 1024-65535, opened for both tcp and udp, and use "uxplay -pn" (or open UDP 7011,6001,6000 TCP 7100,7000,7001 and use "uxplay -p").
If you are really sure there is no firewall, you may need to investigate your network transmissions with a tool like netstat, but almost always this is a firewall issue.
If you do not see the message raop_rtp_mirror starting mirroring
, something went wrong before the client-server negotiations were finished. For such problems, use "uxplay -d " (debug log option) to see what is happening: it will show how far the connection process gets before the failure occurs. You can compare your debug output to that from a successful start of UxPlay in the UxPlay Wiki.
If UxPlay reports that mirroring started, but you get no video or audio, the problem is probably from a GStreamer plugin that doesn't work on your system (by default, GStreamer uses the "autovideosink" and "autoaudiosink" algorithms to guess what are the "best" plugins to use on your system). A different reason for no audio occurred when a user with a firewall only opened two udp network ports: three are required (the third one receives the audio data).
Raspberry Pi devices ( Pi 4B+ and earlier: this does not apply to the Pi 5, which does not provide hardware h264 decoding, and does not need it ) work best with hardware GPU h264 video decoding if the Video4Linux2 plugin in GStreamer v1.20.x or earlier has been patched (see the UxPlay Wiki for patches). This is fixed in GStreamer-1.22, and by backport patches from this in distributions such as Raspberry Pi OS (Bullseye): use option -bt709
with the GStreamer-1.18.4 from Raspberry Pi OS . This also needs the bcm2835-codec kernel module that is not in the standard Linux kernel (it is available in Raspberry Pi OS, Ubuntu and Manjaro).
-avdec
for software h264-decoding.Sometimes "autovideosink" may select the OpenGL renderer "glimagesink" which may not work correctly on your system. Try the options "-vs ximagesink" or "-vs xvimagesink" to see if using one of these fixes the problem.
Other reported problems are connected to the GStreamer VAAPI plugin (for hardware-accelerated Intel graphics, but not NVIDIA graphics). Use the option "-avdec" to force software h264 video decoding: this should prevent autovideosink from selecting the vaapisink videosink. Alternatively, find out if the gstreamer1.0-vaapi plugin is installed, and if so, uninstall it. (If this does not fix the problem, you can reinstall it.)
There are some reports of other GStreamer problems with hardware-accelerated Intel HD graphics. One user (on Debian) solved this with "sudo apt install intel-media-va-driver-non-free". This is a driver for 8'th (or later) generation "*-lake" Intel chips, that seems to be related to VAAPI accelerated graphics.
If you do have Intel HD graphics, and have installed the vaapi plugin, but -vs vaapisink
does not work, check that vaapi is not "blacklisted" in your GStreamer installation: run gst-inspect-1.0 vaapi
, if this reports 0 features
, you need to export GST_VAAPI_ALL_DRIVERS=1
before running uxplay, or set this in the default environment.
You can try to fix audio or video problems by using the " -as
" or " -vs
" options to choose the GStreamer audiosink or videosink , rather than letting GStreamer choose one for you. (See above, in Starting and running UxPlay for choices of
or
.)
The "OpenGL renderer" window created on Linux by "-vs glimagesink" sometimes does not close properly when its "close" button is clicked. (this is a GStreamer issue). You may need to terminate uxplay with Ctrl-C to close a "zombie" OpenGl window. If similar problems happen when the client sends the "Stop Mirroring" signal, try the no-close option "-nc" that leaves the video window open.
rm -rf ~/.cache/gstreamer-1.0/*
may be the solution to problems where gst-inspect-1.0 does not show a plugin that you believe is installed. The cache will be regenerated next time GStreamer is started. This is the solution to puzzling problems that turn out to come from corruption of the cache, and should be tried first. If UxPlay fails to start, with a message that a required GStreamer plugin (such as "libav") was not found, first check with the GStreamer tool gst-inspect-1.0 to see what GStreamer knows is available. (You may need to install some additional GStreamer "tools" package to get gst-inspect-1.0). For, eg a libav problem, check with " gst-inspect-1.0 libav
". If it is not shown as available to GStreamer, but your package manager shows the relevant package as installed (as one user found), try entirely removing and reinstalling the package. That user found that a solution to a " Required gstreamer plugin 'libav' not found " message that kept recurring was to clear the user's gstreamer cache.
If it fails to start with an error like ' no element "avdec_aac"
' this is because even though gstreamer-libav is installed. it is incomplete because some plugin features are missing: " gst-inspect-1.0 | grep avdec_aac
" will show if avdec_aac is available. Unlike other GStreamer plugins, the libav plugin is a front end to FFmpeg codecs which provide avdec_*.
Some distributions (RedHat, SUSE, etc) provide incomplete versions of FFmpeg because of patent issues with codecs used by certain plugins. In those cases there will be some "extra package" provider like RPM fusion (RedHat), packman (SUSE) where you can get complete packages (your distribution will usually provide instructions for this, Mageia puts them in an optional "tainted" repo) . The packages needed may be "ffmpeg*" or "libav*" packages: the GStreamer libav plugin package does not contain any codecs itself, it just provides a way for GStreamer to use ffmpeg/libav codec libraries which must be installed separately. For similar reasons, distributions may ship incomplete packages of GStreamer "plugins-bad". Use user on Fedora thought they had installed from rpmfusion, but the system had not obeyed: "Adding --allowerasing to the dnf command fixed it after a restart" .
starting with release UxPlay-1.65.3, UxPlay will continue to function, but without audio in mirror mode, if avdec_aac is missing.
To troubleshoot GStreamer execute "export GST_DEBUG=2" to set the GStreamer debug-level environment-variable in the terminal where you will run uxplay, so that you see warning and error messages; see GStreamer debugging tools for how to see much more of what is happening inside GStreamer. Run "gst-inspect-1.0" to see which GStreamer plugins are installed on your system.
Some extra GStreamer packages for special plugins may need to be installed (or reinstalled: a user using a Wayland display system as an alternative to X11 reported that after reinstalling Lubuntu 18.4, UxPlay would not work until gstreamer1.0-x was installed, presumably for Wayland's X11-compatibility mode). Different distributions may break up GStreamer 1.x into packages in different ways; the packages listed above in the build instructions should bring in other required GStreamer packages as dependencies, but will not install all possible plugins.
The GStreamer video pipeline, which is shown in the initial output from uxplay -d
, has the default form
appsrc name=video_source ! queue ! h264parse ! decodebin ! videoconvert ! autovideosink name=video_sink sync=false
The pipeline is fully configurable: default elements "h264parse", "decodebin", "videoconvert", and "autovideosink" can respectively be replaced by using uxplay options -vp
, -vd
, -vc
, and -vs
, if there is any need to modify it (entries can be given in quotes "..." to include options).
This can happen if the TCP video stream from the client stops arriving at the server, probably because of network problems (the UDP audio stream may continue to arrive). At 3-second intervals, UxPlay checks that the client is still connected by sending it a request for a NTP time signal. If a reply is not received from the client within a 0.3 sec time-window, an "ntp timeout" is registered. If a certain number (currently 5) of consecutive ntp timeouts occur, UxPlay assumes that the client is "dead", and resets the connection, becoming available for connection to a new client, or reconnection to the previous one. Sometimes the connection may recover before the timeout limit is reached, and if the default limit is not right for your network, it can be modified using the option "-reset n ", where n is the desired timeout-limit value ( n = 0 means "no limit"). If the connection starts to recover after ntp timeouts, a corrupt video packet from before the timeout may trigger a "connection reset by peer" error, which also causes UxPlay to reset the connection.
A protocol failure may trigger an unending stream of error messages, and means that the audio decryption key (also used in video decryption) was not correctly extracted from data sent by the client.
The protocol was modifed in UxPlay-1.65 after it was discovered that the client-server "pairing" step could be avoided (leading to a much quicker connection setup, without a 5 second delay) by disabling "Supports Legacy Pairing" (bit 27) in the "features" code UxPlay advertises on DNS-SD Service Discovery. Most clients will then not attempt the setup of a "shared secret key" when pairing, which is used by AppleTV for simultaneous handling of multiple clients (UxPlay only supports one client at a time). This change is now well-tested, but in case it causes any protocol failures, UxPlay can be reverted to the previous behavior by uncommenting the previous "FEATURES_1" setting (and commenting out the new one) in lib/dnssdint.h, and then rebuilding UxPlay. ("Pairing" is re-enabled when the new Apple-style one-time "pin" authentication is activated by running UxPlay with the "-pin" option introduced in UxPlay 1.67.)
Protocol failure should not happen for iOS 9.3 or later clients. However, if a client uses the same older version of the protocol that is used by the Windows-based AirPlay client emulator AirMyPC , the protocol can be switched to the older version by the setting OLD_PROTOCOL_CLIENT_USER_AGENT_LIST
in UxPlay/lib/global.h
. UxPlay reports the client's "User Agent" string when it connects. If some other client also fails to decrypt all audio and video, try adding its "User Agent" string in place of "xxx" in the entry "AirMyPC/2.0;xxx" in global.h and rebuild uxplay.
Note that for DNS-SD Service Discovery, Uxplay declares itself to be an AppleTV3,2 (a 32 bit device) with a sourceVersion 220.68; this can also be changed in global.h. UxPlay also works if it declares itself as an AppleTV6,2 with sourceVersion 380.20.1 (an AppleTV 4K 1st gen, introduced 2017, running tvOS 12.2.1), so it does not seem to matter what version UxPlay claims to be.
1.70 2024-10-04 Add support for 4K (h265) video (resolution 3840 x 2160). Fix issue with GStreamer >= 1.24 when client sleeps, then wakes.
1.69 2024-08-09 Internal improvements (eg in -nohold option, identifying GStreamer videosink selected by autovideosink, finding X11 display) in anticipation of future HLS video support. New -nofreeze option to not leave frozen video in place when a network connection is reset. Fixes for GStreamer-1.24.x changes.
1.68 2023-12-31 New simpler (default) method for generating a persistent public key from the server MAC address (which can now be set with the -m option). (The previous method is still available with -key option). New option -reg to maintain a register of pin-authenticated clients. Corrected volume-control: now interprets AirPlay volume range -30dB:0dB as decibel gain attenuation, with new option -db low[:high] for "flat" rescaling of the dB range. Add -taper option for a "tapered" AirPlay volume-control profile.
1.67 2023-11-30 Add support for Apple-style one-time pin authentication of clients with option "-pin": (uses SRP6a authentication protocol and public key persistence). Detection with error message of (currently) unsupported H265 video when requesting high resolution over wired ethernet. Removed rpi* options (which are not valid with new Raspberry Pi model 5, and can be replaced by combinations of other options). Added optional argument "mac" to "-m" option, to specify a replacement MAC address/Device ID. Update llhttp to v. 9.1.3. Add -dacp option for exporting current client DACP info (for remotes).
1.66 2023-09-05 Fix IPV6 support. Add option to restrict clients to those on a list of allowed deviceIDs, or to block connections from clients on a list of blocked deviceIDs. Fix for #207 from @thiccaxe (screen lag in vsync mode after client wakes from sleep).
1.65.3 2023-07-23 Add RPM spec file; add warning if required gstreamer libav feature "avdec_aac" is missing: (this occurs in RPM-based distributions that ship an incomplete FFmpeg for Patent or License reasons, and rely on users installing an externally-supplied complete FFmpeg). Mirror-mode airplay will now work without audio if avdec_aac is missing.
1.65 2023-06-03 Eliminate pair_setup part of connection protocol to allow faster connections with clients (thanks to @shuax #176 for this discovery); to revert, uncomment a line in lib/dnssdint.h. Disconnect from audio device when connection closes, to not block its use by other apps if uxplay is running but not connected. Fix for AirMyPC client (broken since 1.60), so its older non-NTP timestamp protocol works with -vsync. Corrected parsing of configuration file entries that were in quotes.
1.64 2023-04-23 Timestamp-based synchronization of audio and video is now the default in Mirror mode. (Use "-vsync no" to restore previous behavior.) A configuration file can now be used for startup options. Also some internal cleanups and a minor bugfix that fixes #192.
1.63 2023-02-12 Reworked audio-video synchronization, with new options -vsync (for Mirror mode) and -async (for Audio-Only mode, to sync with client video). Option -vsync makes software h264 decoding of streamed videos with option -avdec viable on some recent Raspberry Pi models. Internal change: all times are now processed in nanoseconds units. Removed -ao option introduced in 1.62.
1.62 2023-01-18 Added Audio-only mode time offset -ao x to allow user synchronization of ALAC audio playing on the server with video, song lyrics, etc. playing on the client. x = 5.0 appears to be optimal in many cases. Quality fixes: cleanup in volume changes, timestamps, some bugfixes.
1.61 2022-12-30 Removed -t option (workaround for an Avahi issue, correctly solved by opening network port UDP 5353 in firewall). Remove -g debug flag from CMAKE_CFLAGS. Postpend (instead of prepend) build environment CFLAGS to CMAKE_CFLAGS. Refactor parts of uxplay.cpp
1.60 2022-12-15 Added exit with error message if DNSServiceRegister fails (instead of just stalling). Test for Client's attempt to using unsupported AirPlay 2 "REMOTE CONTROL" protocol (with no timing channel), and exit if this occurs. Reworked metadata processing to correctly parse DMAP header (previous version worked with DMAP messages currently received, but was not correct).
1.59 2022-12-12 remove "ZOOMFIX" compile option and make compilation with X11-dependence the default if X11 development libraries are detected (this now also provides fullscreen mode with a F11 or Alt+Enter key toggle); ZOOMFIX is now automatically applied for GStreamer < 1.20. New cmake option -DNO_X11_DEPS compiles uxplay without X11 dependence. Reworked internal metadata handling. Fix segfault with "-vs 0".
1.58 2022-10-29 Add option "-nohold" that will drop existing connections when a new client connects. Update llhttp to v8.1.0.
1.57 2022-10-09 Minor fixes: (fix coredump on AUR on "stop mirroring", occurs when compiled with AUR CFLAGS -DFORTIFY_SOURCE); graceful exit when required plugins are missing; improved support for builds on Windows. Include audioresample in GStreamer audio pipeline.
1.56 2022-09-01 Added support for building and running UxPlay-1.56 on Windows (no changes to Unix (Linux, *BSD, macOS) codebase.)
1.56 2022-07-30 Remove -bt709 from -rpi, -rpiwl, -rpifb as GStreamer is now fixed.
1.55 2022-07-04 Remove the bt709 fix from -v4l2 and create a new -bt709 option (previous "-v4l2" is now "-v4l2 -bt709"). This allows the currently-required -bt709 option to be used on its own on RPi without -v4l2 (sometimes this give better results).
1.54 2022-06-25 Add support for "Cover Art" display in Audio-only (ALAC) mode. Reverted a change that caused VAAPI to crash with AMD POLARIS graphics cards. Minor internal changes to plist code and uxplay option parsing.
1.53 2022-06-13 Internal changes to audio sync code, revised documentation, Minor bugfix (fix assertion crash when resent audio packets are empty).
1.52 2022-05-05 Cleaned up initial audio sync code, and reformatted streaming debug output (readable aligned timestamps with decimal points in seconds). Eliminate memory leaks (found by valgrind). Support for display of ALAC (audio-only) metadata (soundtrack artist names, titles etc.) in the uxplay terminal.
1.51 2022-04-24 Reworked options forVideo4Linux2 support (new option -v4l2) and short options -rpi, -rpifb, -rpiwl as synonyms for -v4l2, -v4l2 -vs kmssink, and -v4l2 -vs waylandsink. Reverted a change from 1.48 that broke reconnection after "Stop Mirroring" is sent by client.
1.50 2022-04-22 Added -fs fullscreen option (for Wayland or VAAPI plugins only), Changed -rpi to be for framebuffer ("lite") RPi systems and added -rpigl (OpenGL) and -rpiwl (Wayland) options for RPi Desktop systems. Also modified timestamps from "DTS" to "PTS" for latency improvement, plus internal cleanups.
1.49 2022-03-28 Addded options for dumping video and/or audio to file, for debugging, etc. h264 PPS/SPS NALU's are shown with -d. Fixed video-not-working for M1 Mac clients.
1.48 2022-03-11 Made the GStreamer video pipeline fully configurable, for use with hardware h264 decoding. Support for Raspberry Pi.
1.47 2022-02-05 Added -FPSdata option to display (in the terminal) regular reports sent by the client about video streaming performance. Internal cleanups of processing of video packets received from the client. Added -reset n option to reset the connection after n ntp timeouts (also reset after "connection reset by peer" error in video stream).
1.46 2022-01-20 Restore pre-1.44 behavior (1.44 may have broken hardware acceleration): once again use decodebin in the video pipeline; introduce new option "-avdec" to force software h264 decoding by libav h264, if needed (to prevent selection of vaapisink by autovideosink). Update llhttp to v6.0.6. UxPlay now reports itself as AppleTV3,2. Restrict connections to one client at a time (second client must now wait for first client to disconnect).
1.45 2022-01-10 New behavior: close video window when client requests "stop mirroring". (A new "no close" option "-nc" is added for users who wish to retain previous behavior that does not close the video window).
1.44 2021-12-13 Omit hash of aeskey with ecdh_secret for an AirMyPC client; make an internal rearrangement of where this hash is done. Fully report all initial communications between client and server in -d debug mode. Replace decodebin in GStreamer video pipeline by h264-specific elements.
1.43 2021-12-07 Various internal changes, such as tests for successful decryption, uniform treatment of informational/debug messages, etc., updated README.
1.42 2021-11-20 Fix MAC detection to work with modern Linux interface naming practices, MacOS and *BSD.
1.41 2021-11-11 Further cleanups of multiple audio format support (internal changes, separated RAOP and GStreamer audio/video startup)
1.40 2021-11-09 Cleanup segfault in ALAC support, manpage location fix, show request Plists in debug mode.
1.39 2021-11-06 Added support for Apple Lossless (ALAC) audio streams.
1.38 2021-10-8 Add -as audiosink option to allow user to choose the GStreamer audiosink.
1.37 2021-09-29 Append "@hostname" to AirPlay Server name, where "hostname" is the name of the server running uxplay (reworked change in 1.36).
1.36 2021-09-29 Implemented suggestion (by @mrbesen and @PetrusZ) to use hostname of machine runing uxplay as the default server name
1.35.1 2021-09-28 Added the -vs 0 option for streaming audio, but not displaying video.
1.35 2021-09-10 now uses a GLib MainLoop, and builds on macOS (tested on Intel Mac, 10.15 ). New option -t timeout for relaunching server if no connections were active in previous timeout seconds (to renew Bonjour registration).
1.341 2021-09-04 fixed: render logger was not being destroyed by stop_server()
1.34 2021-08-27 Fixed "ZOOMFIX": the X11 window name fix was only being made the first time the GStreamer window was created by uxplay, and not if the server was relaunched after the GStreamer window was closed, with uxplay still running. Corrected in v. 1.34
If you need to do this, note that you may be able to use a newer version (OpenSSL-3.0.1 is known to work). You will need the standard development toolset (autoconf, automake, libtool). Download the source code from https://www.openssl.org/source/. Install the downloaded openssl by opening a terminal in your Downloads directory, and unpacking the source distribution: ("tar -xvzf openssl-3.0.1.tar.gz ; cd openssl-3.0.1"). Then build/install with "./config ; make ; sudo make install_dev". This will typically install the needed library libcrypto.*
, either in /usr/local/lib or /usr/local/lib64.
(Ignore the following for builds on MacOS:) On some systems like Debian or Ubuntu, you may also need to add a missing entry /usr/local/lib64
in /etc/ld.so.conf (or place a file containing "/usr/local/lib64/libcrypto.so" in /etc/ld.so.conf.d) and then run "sudo ldconfig".
(Note: on Debian 9 "Stretch" or Ubuntu 16.04 LTS editions, you can avoid this step by installing libplist-dev and libplist3 from Debian 10 or Ubuntu 18.04.) As well as the usual build tools (autoconf, automake, libtool), you may need to also install some libpython*-dev package. Download the latest source with git from https://github.com/libimobiledevice/libplist, or get the source from the Releases section (use the *.tar.bz2 release, not the *.zip or *.tar.gz versions): download libplist-2.3.0, then unpack it ("tar -xvjf libplist-2.3.0.tar.bz2 ; cd libplist-2.3.0"), and build/install it: ("./configure ; make ; sudo make install"). This will probably install libplist-2.0.* in /usr/local/lib. The new libplist-2.3.0 release should be compatible with UxPlay; libplist-2.2.0 is also available if there are any issues.
(Ignore the following for builds on MacOS:) On some systems like Debian or Ubuntu, you may also need to add a missing entry /usr/local/lib
in /etc/ld.so.conf (or place a file containing "/usr/local/lib/libplist-2.0.so" in /etc/ld.so.conf.d) and then run "sudo ldconfig".
All the resources in this repository are written using only freely available information from the internet. The code and related resources are meant for educational purposes only. It is the responsibility of the user to make sure all local laws are adhered to.
This project makes use of a third-party GPL library for handling FairPlay. The legal status of that library is unclear. Should you be a representative of Apple and have any objections against the legality of the library and its use in this project, please contact the developers and the appropriate steps will be taken.
Given the large number of third-party AirPlay receivers (mostly closed-source) available for purchase, it is our understanding that an open source implementation of the same functionality wouldn't violate any of Apple's rights either.
[adapted from fdraschbacher's notes on RPiPlay antecedents]
The code in this repository accumulated from various sources over time. Here is an attempt at listing the various authors and the components they created:
UxPlay was initially created by antimof from RPiPlay, by replacing its Raspberry-Pi-adapted OpenMAX video and audio rendering system with GStreamer rendering for desktop Linux systems; the antimof work on code in renderers/
was later backported to RPiPlay, and the antimof project became dormant, but was later revived at the current GitHub site to serve a wider community of users.
The previous authors of code included in UxPlay by inheritance from RPiPlay include:
lib/playfair
folder. License: GNU GPLlib/
originally stems from this project. License: GNU LGPLv2.1+lib/
concerning mirroring is dsafa22's work. License: GNU LGPLv2.1+Independent of UxPlay, but used by it and bundled with it:
lib/llhttp/
. License: MIT