Примечание. Потоковая передача звука в нескольких комнатах AirPlay2 не поддерживается: для этого используйте shairport-sync.
.
Установите uxplay в системах Linux на базе Debian с помощью « sudo apt install uxplay
»; во FreeBSD с помощью « sudo pkg install uxplay
». Также доступно в системах на базе Arch через AUR. Начиная с версии 1.66, uxplay теперь также упаковывается в формате RPM в Fedora 38 (« sudo dnf install uxplay
»).
Для других дистрибутивов на основе RPM, которые еще не упаковали UxPlay, RPM-файл спецификации uxplay.spec теперь поставляется с последними выпусками (см. их «Ресурсы»), а также его можно найти в верхнем каталоге исходного кода UxPlay. См. раздел об использовании этого файла спецификации для создания устанавливаемого пакета RPM.
После установки:
(В Linux и *BSD): если на сервере, на котором размещен UxPlay, активен брандмауэр, убедитесь, что сетевой порт по умолчанию (UDP 5353) для запросов mDNS/DNS-SD открыт (более подробную информацию см. в разделе «Устранение неполадок» ниже); также откройте три порта UDP и три порта TCP для Uxplay и используйте опцию «uxplay -p» (см. « man uxplay
» или « uxplay -h
»).
Даже если вы устанавливаете предварительно скомпилированный двоичный пакет uxplay вашего дистрибутива, вам может потребоваться прочитать приведенные ниже инструкции по запуску UxPlay, чтобы узнать, какой из пакетов плагинов GStreamer вашего дистрибутива вам также следует установить.
Для режима «только аудио» (Apple Music и т. д.) наилучшее качество достигается с помощью опции «uxplay -async», но тогда iOS задерживает задержку в 2 секунды.
Добавьте любые параметры UxPlay, которые вы хотите использовать по умолчанию, в файл запуска ~/.uxplayrc
(формат и другие возможные места см. в « man uxplay
» или « uxplay -h
»). В частности, если ваша система использует аудиосистему PipeWire или видеосистему Wayland, вы можете добавить в файл «as pipewiresink» или «vs waylandsink» по умолчанию. (Вывод команд терминала «ps waux | greppulse» или «pactl info» будет содержать «pipewire», если ваша система Linux/BSD его использует).
На Raspberry Pi: Если вы используете Ubuntu 22.10 или более раннюю версию, GStreamer должен быть исправлен для использования аппаратного декодирования видео с помощью графического процессора Broadcom (также рекомендуется, но необязательно для ОС Raspberry Pi (Bullseye): используйте опцию « uxplay -bt709
», если вы не используете патч).
Чтобы (легко) скомпилировать последнюю версию UxPlay из исходного кода, см. раздел Получение UxPlay.
Этот проект представляет собой зеркальный сервер Unix AirPlay2 с открытым исходным кодом GPLv3 для Linux, macOS и *BSD. Первоначально он был разработан antimof с использованием кода RPiPlay на базе OpenMAX, который, в свою очередь, является производным от AirplayServer, shairplay и playfair. (Сайт antimof больше не участвует в разработке, но периодически публикует обновления, взятые с нового основного сайта UxPlay).
UxPlay протестирован на ряде систем, включая (среди прочих) Debian (10 «Buster», 11 «Bulllseye», 12 «Bookworm»), Ubuntu (20.04 LTS, 22.04 LTS, 23.04 (также производные Ubuntu Linux Mint, Pop! _OS), Red Hat и клоны (Fedora 38, Rocky Linux 9.2), openSUSE Leap 15.5, Mageia 9, OpenMandriva «ROME», PCLinuxOS, Arch Linux, Manjaro и должны работать в любой системе Linux. Также протестировано на macOS Catalina и Ventura. (Intel) и Sonoma (M2), FreeBSD 14.0, Windows 10 и 11 (64-разрядная версия).
На Raspberry Pi 4 модели B он протестирован на ОС Raspberry Pi (Bullseye и Bookworm) (32- и 64-разрядной версии), Ubuntu 22.04 LTS и 23.04, Manjaro RPi4 23.02 и (без аппаратного декодирования видео) на openSUSE 15.5. Также тестировалось на Raspberry Pi Zero 2 W, 3 модели B+, а теперь и 5.
Его основное назначение — действовать как AppleTV для зеркального отображения экрана (со звуком) клиентов iOS/iPadOS/macOS (iPhone, iPod Touch, iPad, компьютеров Mac) на дисплее сервера хоста под управлением Linux, macOS или другого Unix. (а теперь еще и Microsoft Windows). UxPlay поддерживает протокол Apple AirPlay2 с использованием «Legacy Protocol», но некоторые функции отсутствуют. (Подробную информацию о том, что общеизвестно о протоколе Apple AirPlay 2, можно найти здесь, здесь и здесь; см. также pyatv, который может стать ресурсом для добавления современных протоколов.) Хотя нет никакой гарантии, что будущие выпуски iOS будут продолжать поддерживать «Legacy Protocol». ", iOS 17 продолжает поддерживаться.
Сервер UxPlay и его клиент должны находиться в одной локальной сети, в которой также работает сервер Bonjour/Zeroconf mDNS/DNS-SD (строго необходима только служба DNS-SD «Service Discovery», не обязательно, чтобы локальная сеть также должна иметь тип «.local» на основе mDNS). На серверах Linux и BSD Unix это обычно предоставляется Avahi через службу avahi-daemon и включено в большинство дистрибутивов Linux (эта служба также может предоставляться серверами macOS, iOS или Windows).
Подключения к серверу UxPlay клиентами iOS/MacOS могут быть инициированы как в режиме AirPlay Mirror (который передает потоковое аудио AAC со сжатием с потерями при одновременном зеркалировании экрана клиента), так и в альтернативном режиме AirPlay Audio , который передает потоковое аудио Apple Lossless (ALAC) без зеркального отображения экрана. В режиме Audio метаданные отображаются в терминале uxplay; если используется опция UxPlay -ca
, сопровождающая обложка также выводится в периодически обновляемый файл
и может быть просмотрена с помощью (перезагрузки) графический просмотрщик по вашему выбору. Возможно переключение между режимами «Зеркало» и «Аудио» во время активного соединения: в режиме «Зеркало» остановить зеркалирование (или закрыть окно зеркала) и запустить соединение в режиме «Аудио» , переключиться обратно, инициировав соединение в режиме «Зеркало» ; Художественное отображение останавливается/перезапускается, когда вы выходите/повторно входите в режим звука .
Обратите внимание, что технология Apple video-DRM (которая находится в содержимом «приложения Apple TV» на клиенте) не может быть расшифрована с помощью UxPlay, а приложение Apple TV невозможно просмотреть с помощью режима AirPlay Mirror UxPlay (только незащищенный звук будет передаваться в потоковом режиме в формате AAC). формат), но как видео, так и аудиоконтент из приложений без DRM, таких как «Приложение YouTube», будет транслироваться UxPlay в режиме зеркала.
Поскольку UxPlay в настоящее время не поддерживает потоковое видео без зеркалирования AirPlay (когда клиент управляет веб-сервером на сервере AirPlay, который напрямую получает контент HLS, чтобы избежать его декодирования и повторного кодирования клиентом), использование значка для видео AirPlay в такие приложения, как приложение YouTube, будут отправлять только аудио (в формате ALAC без потерь) без сопровождающего видео (планируется поддерживать видео HLS в будущих выпусках UxPlay)
UxPlay использует «плагины» GStreamer для рендеринга аудио и видео. Это означает, что видео и аудио поддерживаются «из коробки» с использованием различных плагинов. AirPlay передает потоковое видео в формате h264: декодирование gstreamer не зависит от плагинов и использует ускоренные аппаратные декодеры h264 графического процессора, если они доступны; в противном случае используется программное декодирование.
VAAPI для интегрированной графики Intel и AMD, NVIDIA с драйвером с открытым исходным кодом «Nouveau».
При использовании графического процессора Intel или AMD предпочтительнее аппаратное декодирование с помощью плагина VAAPI gstreamer с открытым исходным кодом. Драйверы «Nouveau» с открытым исходным кодом для графики NVIDIA также в принципе поддерживаются: см. здесь, но для этого необходимо, чтобы VAAPI был дополнен прошивкой, извлеченной из проприетарных драйверов NVIDIA.
NVIDIA с проприетарными драйверами
Плагин nvh264dec
(включен в gstreamer1.0-plugins-bad, начиная с GStreamer-1.18.0) можно использовать для ускоренного декодирования видео на графическом процессоре NVIDIA после установки драйвера NVIDIA CUDA libcuda.so
. Для GStreamer-1.16.3 или более ранней версии плагин называется nvdec
и должен быть создан пользователем.
Поддержка Video4Linux2 для аппаратного декодирования h264 на Raspberry Pi (Pi 4B и старше)
Компьютеры Raspberry Pi (RPi) (протестированные на Pi 4 Model B) теперь могут запускать UxPlay с использованием программного декодирования видео, но предпочтительнее аппаратное ускорение декодирования h264/h265 с помощью прошивки в графическом процессоре Pi Broadcom 2835. UxPlay получает доступ к этому с помощью плагина GStreamer-1.22 Video4Linux2 (v4l2); Использует внешний модуль ядра Linux bcm2835-кодек, поддерживаемый Raspberry Pi, который пока включен только в ОС Raspberry Pi, а также в два других дистрибутива (Ubuntu, Manjaro), доступных с Raspberry Pi Imager. (Для GStreamer < 1.22 см. UxPlay Wiki) .
(Новое): поддержка аппаратного декодирования h265 (HEVC) на Raspberry Pi (Pi 4 модель B и Pi 5).
Поддержка присутствует, но пока удовлетворительных результатов получено не было. Модель Pi 5 обеспечивает декодирование только с аппаратным ускорением (GPU) для видео h265, но не H264, поскольку ее процессор достаточно мощный для удовлетворительного программного декодирования H264.
Лицензия UxPlay GPLv3 не имеет добавленного «исключения GPL», явно позволяющего распространять ее в скомпилированной форме при связывании с версиями OpenSSL до версии 3.0.0 (более старые версии OpenSSL имеют пункт лицензии, несовместимый с GPL, если только OpenSSL не может быть рассматривается как «Системная библиотека», какова она в *BSD). Многие дистрибутивы Linux рассматривают OpenSSL как «системную библиотеку», но некоторые (например, Debian) этого не делают: в этом случае проблема решается путем связывания с OpenSSL-3.0.0 или более поздней версии.
Либо скачайте и разархивируйте UxPlay-master.zip, либо (если установлен git): «git clone https://github.com/FDH2/UxPlay». Вы также можете загрузить последнюю или более раннюю версию, указанную в разделе «Релизы».
(Адаптируйте эти инструкции для Linux или *BSD, отличных от Debian; для macOS см. специальную инструкцию ниже). См. раздел «Устранение неполадок» ниже, чтобы узнать, как устранить любые трудности.
Вам понадобится компилятор C/C++ (например, g++) с установленными стандартными библиотеками разработки. Системы на базе Debian предоставляют пакет «build-essential» для использования при компиляции программного обеспечения. Вам также понадобится pkg-config: если он не найден с помощью « which pkg-config
», установите pkg-config или его аналогичную замену pkgconf. Также убедитесь, что установлен cmake>=3.5: « sudo apt install cmake
» (при необходимости добавьте к этому build-essential
и pkg-config
(или pkgconf
).
Убедитесь, что ваш дистрибутив поддерживает OpenSSL 1.1.1 или новее и libplist 2.0 или новее. (Это означает системы на базе Debian 10 «Buster» (например, Ubuntu 18.04) или новее; в системах Debian 10 «libplist» — это более старая версия, вам понадобится «libplist3».) Если это не так, вам может потребоваться собрать и установить это из исходного кода (см. инструкции в конце README).
Если у вас нестандартная установка OpenSSL, вам может потребоваться установить переменную среды OPENSSL_ROOT_DIR ( например , « export OPENSSL_ROOT_DIR=/usr/local/lib64
», если она установлена там). Аналогично, для нестандартных (или нескольких) установок GStreamer установите переменную среды GSTREAMER_ROOT_DIR в каталог, содержащий каталог ".../gstreamer-1.0/" установки gstreamer, который должен использовать UxPlay (если это, например, "~" /my_gstreamer/lib/gstreamer-1.0/», установите это местоположение с помощью « export GSTREAMER_ROOT_DIR=$HOME/my_gstreamer/lib
»).
В окне терминала измените каталог на исходный каталог загруженного исходного кода («UxPlay-*», «*» = «master» или тег выпуска для загрузки zip-файлов, «UxPlay» для загрузки «git clone»), затем следуйте инструкциям ниже:
Примечание. По умолчанию UxPlay будет оптимизирован для компьютера, на котором он создан; если это не так, например, при упаковке для дистрибутива, используйте опцию cmake -DNO_MARCH_NATIVE=ON
.
Если вы используете X11 Windows в Linux или *BSD и хотите включать/выключать полноэкранный режим нажатием клавиши (F11 или Alt_L+Enter), UxPlay должен быть построен с зависимостью от X11. Начиная с UxPlay-1.59, это будет сделано по умолчанию, ЕСЛИ библиотеки разработки X11 установлены и обнаружены. Установите их с помощью « sudo apt install libx11-dev
». Если обнаружен GStreamer < 1.20, также будет сделано исправление, необходимое для приложений совместного использования экрана ( например , Zoom).
-DNO_X11_DEPS=ON
.sudo apt install libssl-dev libplist-dev
". ( если вам не нужно собирать OpenSSL и libplist из исходного кода ).sudo apt install libavahi-compat-libdnssd-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
. (* Пропустите, если вы собрали Gstreamer из исходного кода )cmake .
( Для более чистой сборки, которая будет полезна, если вы измените исходный код, замените это на « mkdir build; cd build; cmake ..
»: затем вы можете удалить содержимое каталога build
, если это необходимо, не затрагивая исходный код. ) Также при необходимости добавьте сюда любые параметры cmake " -D
" (например, -DNO_X11_DEPS=ON
или -DNO_MARCH_NATIVE=ON
).make
sudo make install
(вы можете впоследствии удалить его с помощью sudo make uninstall
в том же каталоге, в котором он был запущен). Это устанавливает исполняемый файл " uxplay
" в /usr/local/bin
(и устанавливает man-страницу в какое-то стандартное место, например /usr/local/share/man/man1
, а файлы README куда-то вроде /usr/local/share/doc/uxplay
). (Если «man uxplay» не работает, проверьте, установлена ли $MANPATH: если да, то путь к man-странице (обычно /usr/local/share/man/) необходимо добавить в $MANPATH.) Исполняемый файл uxplay также может быть находится в каталоге сборки после процесса сборки, если вы хотите протестировать его перед установкой (в этом случае сначала необходимо установить плагины GStreamer).
**Для тех, у кого есть дистрибутивы на основе RPM, также доступен файл спецификации RPM uxplay.spec: см. Сборка устанавливаемого пакета RPM.
Red Hat или клоны, такие как CentOS (теперь продолжается как Rocky Linux или Alma Linux): (sudo dnf install или sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel gstreamer1-devel gstreamer1-plugins-base- devel (+libX11-devel для полноэкранного X11) (некоторые из них могут находиться в репозитории дополнений «CodeReady», который клоны называют «PowerTools»)
Mageia, PCLinuxOS, OpenMandriva: То же, что и Red Hat, за исключением изменения имени: (Mageia) «gstreamer1.0-devel», «gstreamer-plugins-base1.0-devel»; (OpenMandriva) «libopenssl-devel», «gstreamer-devel», «libgst-plugins-base1.0-devel». PCLinuxOS: то же, что и Mageia, но в качестве менеджера пакетов использует Synaptic (или apt).
openSUSE: (установка sudo zypper) libopenssl-3-devel (ранее libopenssl-devel) libplist-2_0-devel (ранее libplist-devel) avahi-compat-mDNSResponder-devel gstreamer-devel gstreamer-plugins-base-devel (+ libX11- разработка для полноэкранного режима X11).
Arch Linux ( также доступен в виде пакета в AUR ): (sudo pacman -Syu) openssl libplist avahi gst-plugins-base.
FreeBSD: (установка sudo pkg) libplist gstreamer1. Для предоставления библиотеки dns_sd также необходимо установить avahi-libdns или mDNSResponder. OpenSSL уже установлен как системная библиотека.
Начинающим сборщикам RPM следует сначала установить пакеты rpm-build и rpmdevtools, а затем создать дерево rpmbuild с помощью " rpmdev-setuptree
". Затем загрузите и скопируйте uxplay.spec в ~/rpmbuild/SPECS
. В этом каталоге запустите " rpmdev-spectool -g -R uxplay.spec
", чтобы загрузить соответствующий исходный файл uxplay-*.tar.gz
в ~/rpmbuild/SOURCES
("rpmdev-spectool" также можно называть просто "spectool" ); затем запустите « rpmbuild -ba uxplay.spec
» (вам нужно будет установить все необходимые зависимости, о которых сообщается в этом отчете). Это должно создать RPM-пакет uxplay в подкаталоге ~/rpmbuild/RPMS
. ( uxplay.spec протестирован на Fedora 38, Rocky Linux 9.2, openSUSE Leap 15.5, Mageia 9, OpenMandriva, PCLinuxOS; его можно легко изменить, включив в него списки зависимостей для других дистрибутивов на основе RPM.)
Затем установите необходимые плагины GStreamer с помощью sudo apt install gstreamer1.0-
. Требуемые значения
:
Дистрибутивы на основе Debian разделяют некоторые пакеты плагинов на более мелкие части: некоторые, которые также могут понадобиться, включают « gl » для поддержки OpenGL (это обеспечивает видеоприемник «-vs glimagesink», который может быть очень полезен во многих системах (включая Raspberry Pi). ), и его всегда следует использовать при использовании декодирования h264/h265 с помощью графического процессора NVIDIA), « gtk3 » (который обеспечивает видеоприемник «-vs gtksink») и « x » для поддержки X11, хотя они могут уже быть установлены; « vaapi » необходим для аппаратного ускорения декодирования видео h264 графикой Intel или AMD (но не для использования с NVIDIA с использованием проприетарных драйверов). Если звук не работает, возможно, потребуется установить плагины « alsa », « pulsaudio » или « pipewire », в зависимости от настроек звука.
В некоторых случаях из-за проблем с патентами функция avdec_aac плагина libav, необходимая для декодирования звука AAC в зеркальном режиме, не предоставляется в официальном дистрибутиве: скачайте ее из репозиториев сообщества для этих дистрибутивов.
Red Hat или клоны, такие как CentOS (теперь продолжается как Rocky Linux или Alma Linux): установите gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi для графики Intel/AMD). В последней версии Fedora gstreamer1-libav переименован в gstreamer1-plugin-libav. Чтобы получить avdec_aac, установите пакеты с сайта rpmfusion.org : (получите ffmpeg-libs с сайта rpmfusion; в RHEL или клонах, но не в последней версии Fedora, также получите оттуда gstreamer1-libav).
Mageia, PCLinuxOS, OpenMandriva: установите gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi для графики Intel/AMD). На Mageia, чтобы получить avdec_aac, установите ffmpeg из «tainted» репозитория , (который также предоставляет более полный gstreamer1.0-plugins-bad).
openSUSE: установите gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi для графики Intel/AMD). Чтобы получить avdec_aac, установите пакеты libav* для openSUSE из Packman «Essentials» ; рекомендация: после добавления репозитория Packman используйте опцию в управлении YaST Software, чтобы переключить все системные пакеты для мультимедиа на Packman).
Arch Linux Установите gst-plugins-good gst-plugins-bad gst-libav (+ gstreamer-vaapi для графики Intel/AMD).
FreeBSD: установите gstreamer1-libav, gstreamer1-plugins, gstreamer1-plugins-* (* = ядро, хорошо, плохо, x, gtk, gl, vulkan, пульс, v4l2, ...), (+ gstreamer1-vaapi для Intel/ графика AMD).
Начиная с UxPlay-1.64, UxPlay можно запустить с параметрами, считанными из файла конфигурации, который будет первым найденным из (1) файла с путем, заданным переменной среды $UXPLAYRC
, (2) ~/.uxplayrc
в доме пользователя. каталог ("~"), (3) ~/.config/uxplayrc
. Формат — по одному параметру в строке, без начального "-"
параметра командной строки. Строки файла конфигурации, начинающиеся с "#"
рассматриваются как комментарии и игнорируются.
Запустите uxplay в окне терминала . В некоторых системах вы можете указать полноэкранный режим с помощью опции -fs
или переключаться в полноэкранный режим и выходить из него с помощью клавиш F11 или (удерживая левый Alt) + клавиши Enter. Используйте Ctrl-C (или закройте окно), чтобы завершить его, когда закончите. Если сервер UxPlay не отображается в раскрывающейся панели «Зеркалирование экрана» клиента iOS, убедитесь, что ваш DNS-SD-сервер (обычно avahi-daemon) запущен: сделайте это в окне терминала с systemctl status avahi-daemon
. Если это показывает, что демон avahi-daemon не запущен, управляйте им с помощью sudo systemctl [start,stop,enable,disable] avahi-daemon
(в несистемных системах, таких как *BSD, используйте sudo service avahi-daemon [status, start, stop, restart, ...]
). Если UxPlay виден, но клиенту не удается подключиться, когда он выбран, на сервере может быть брандмауэр, который не позволяет UxPlay получать запросы на подключение клиента, если не открыты некоторые сетевые порты: если брандмауэр активен, также откройте UDP-порт 5353. (для запросов mDNS), необходимых Avahi . См. раздел «Устранение неполадок» ниже, чтобы узнать, как решить эту или другие проблемы.
В отличие от Apple TV, сервер UxPlay по умолчанию не требует от клиентов первоначального «сопряжения» с ним с использованием пин-кода, отображаемого сервером (после чего клиент «доверяет» серверу и ему не нужно это повторять). Начиная с версии 1.67, Uxplay предлагает такую «аутентификацию по PIN-коду» в качестве опции: подробности см. в « -pin
» и « -reg
» в разделе «Использование», если вы хотите ее использовать. Некоторым клиентам с MDM (управление мобильными устройствами, часто присутствующим на устройствах, принадлежащих работодателю) необходимо использовать аутентификацию по PIN-коду: UxPlay обеспечит это даже при работе без опции PIN-кода.
По умолчанию UxPlay привязан к своему текущему клиенту до тех пор, пока тот не разорвет соединение; начиная с UxPlay-1.58, опция -nohold
изменяет это поведение так, что когда новый клиент запрашивает соединение, он удаляет текущего клиента и берет на себя управление. В UxPlay 1.66 представлен механизм ( -restrict
, -allow
, -block
) для управления тем, каким клиентам разрешено подключаться, используя их «deviceID» (который в устройствах Apple кажется неизменяемым).
В режиме зеркала у GStreamer есть выбор из двух методов воспроизведения видео с сопровождающим его звуком: до UxPlay-1.64 видео и аудио потоки воспроизводились как можно скорее после их поступления (метод GStreamer " sync=false "). , с использованием внутренних часов GStreamer для их синхронизации. Начиная с UxPlay-1.64, новым методом по умолчанию является другой метод (режим GStreamer " sync=true "), который использует временные метки в аудио- и видеопотоках, отправляемых клиентом . На хостах UxPlay с низкой мощностью декодирования (таких как модели Raspberry Pi Zero W или 3 B+) при этом будут отбрасываться видеокадры, которые невозможно декодировать вовремя для воспроизведения со звуком, что делает видео прерывистым, но все же синхронизированным.
Старый метод, который не пропускает поздние видеокадры, хорошо работал на более мощных системах и по-прежнему доступен с опцией UxPlay « -vsync no
»; этот метод адаптирован для «прямой потоковой передачи» и может быть лучше, например, при использовании UxPlay в качестве второго монитора для компьютера Mac, в то время как новый метод, основанный на временных метках по умолчанию, лучше всего подходит для просмотра видео, чтобы сохранить движения губ и голоса. синхронизировано. (Без использования временных меток видео в конечном итоге будет отставать от звука, если его не удастся декодировать достаточно быстро: аппаратное ускорение декодирования видео помогало предотвратить это раньше, когда временные метки не использовались.)
-async
timestamp- основанный вариант. (Пример: вы хотите следить за текстами Apple Music на клиенте, одновременно слушая превосходный звук на сервере UxPlay). Это задерживает видео на клиенте, чтобы оно соответствовало звуку на сервере, поэтому приводит к небольшой задержке, прежде чем пауза или изменение дорожки, инициированные на клиенте, вступят в силу на звук, воспроизводимый сервером. Регулятор громкости AirPlay снижает громкость (усиление) до -30 дБ: диапазон децибел -30:0 можно масштабировать с Low :0 или Low : High , используя опцию -db
("-db Low " или "-db). Low : High "), Low должно быть отрицательным. Масштабирование линейное в децибелах. Обратите внимание, что аудиоформат GStreamer «обрезает» любое усиление звука выше +20 дБ, поэтому оставляйте High ниже этого уровня. Опция -taper
обеспечивает «конический» профиль регулировки громкости AirPlay, который может предпочесть некоторым пользователям.
Параметры -vsync и -async также допускают дополнительную положительную (или отрицательную) регулировку задержки звука в миллисекундах для точной настройки: -vsync 20.5
задерживает звук относительно видео на 0,0205 секунды; отрицательное значение увеличивает его.)
вы можете обнаружить, что видео улучшается с помощью параметра -fps 60, который позволяет воспроизводить некоторое видео со скоростью 60 кадров в секунду. (Вы можете увидеть, какая частота кадров на самом деле передается в потоковом режиме, используя -vs fpsdisplaysink и/или -FPSdata.) При этом следует использовать параметр синхронизации на основе метки времени по умолчанию -vsync
.
Начиная с UxPlay-1.54, вы можете отображать сопровождающую «обложку» из таких источников, как Apple Music, в режиме только аудио (ALAC): запустите « uxplay -ca
» в фоновом режиме, затем запустите программу просмотра изображений с автоперезагрузкой. особенность: пример — «feh»: запустите « feh -R 1
» на переднем плане; завершите feh, а затем Uxplay с помощью « ctrl-C fg ctrl-C
».
По умолчанию GStreamer использует алгоритм для поиска лучшего «видеоприемника» (термин GStreamer для графического драйвера для отображения изображений) для использования. Вы можете переопределить это с помощью опции uxplay -vs
. Доступность видеоприемников зависит от вашей операционной системы и графического оборудования: используйте « gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
», чтобы увидеть, что доступно. Некоторые возможности в Linux/*BSD:
глимагесинк (OpenGL), вайландсинк
xvimagesink , ximagesink (X11)
kmssink , fbdevsink (консольная графика без X11)
vaapisink (для графики с аппаратным ускорением Intel/AMD); для аппаратной графики NVIDIA (с CUDA) используйте glimagesink в сочетании с « -vd nvh264dec
» (или «nvh264sldec», новый вариант, который в GStreamer-1.24 станет «nvh264dec»).
Если сервер «без головы» (нет подключенного монитора, воспроизводится только звук), используйте -vs 0
.
GStreamer также ищет лучший «аудиоприемник»; переопределить свой выбор с помощью -as
. Варианты для Linux включают в себя Pulsesink, Alsasink, Pipewiresink, oss4sink; посмотреть, что доступно с помощью gst-inspect-1.0 | grep sink | grep -e audio -e Audio
.
Одна из распространенных проблем связана с попыткой GStreamer использовать неправильно настроенное или отсутствующее ускоренное аппаратное декодирование видео h264 (например, VAAPI). Попробуйте « uxplay -avdec
» для принудительного программного декодирования видео; Если это сработает, вы можете попытаться исправить ускоренное аппаратное декодирование видео, если оно вам нужно, или просто удалить плагин GStreamer vaapi.
См. «Использование», чтобы узнать больше о параметрах времени выполнения.
Для видео с фреймбуфером (для ОС Raspberry Pi «Lite» и других дистрибутивов, отличных от X11) используйте видеоприемник KMS «-vs kmssink» (видеоприемник фреймбуфера DirectFB «dfbvideosink» не работает на Pi и вызывает сбои в сегменте). В этом случае вам следует явно использовать опцию «-vs kmssink», так как без нее autovideosink не найдет правильный видеоприемник.
Raspberry Pi 5 не обеспечивает аппаратного декодирования H264 (и не нуждается в нем).
Pi Zero 2 W, 3 Model B+ и 4 Model B должны использовать аппаратное декодирование H264 с помощью графического процессора Broadcom, но для этого требуется нестандартный модуль ядра bcm2835_codec, поддерживаемый в дереве ядра Raspberry Pi; Известно, что дистрибутивы, которые его поставляют, включают Raspberry Pi OS, Ubuntu и Manjaro-RPi4. Используйте программное декодирование (опция -avdec), если этот модуль недоступен.
Uxplay использует плагин Video4Linux2 (v4l2) из GStreamer-1.22 и более поздних версий для доступа к графическому процессору, если используется аппаратное декодирование H264. Это должно произойти автоматически. Можно использовать опцию -v4l2, но обычно лучше позволить GStreamer самостоятельно найти лучший видеоконвейер.
В старых дистрибутивах (GStreamer < 1.22) плагину v4l2 требуется патч: см. UxPlay Wiki. Устаревшая ОС Raspberry Pi (Bullseye) имеет частично исправленный GStreamer-1.18.4, для которого требуется опция uxplay -bt709 (и не используйте -v4l2); в этом случае все же лучше применить полный патч из UxPlay Wiki.
Для ОС Raspberry Pi «двойного наследия» (Buster) патча для GStreamer-1.14 не существует. Вместо этого сначала соберите совершенно новую версию GStreamer-1.18.6 из исходного кода, используя эти инструкции, прежде чем собирать UxPlay.
Raspberry Pi 3 Model B+ под управлением 32-битной ОС также может получить доступ к графическому процессору с помощью плагина GStreamer OMX (используйте опцию « -vd omxh264dec
»), но это не работает в прошивке Pi 4 Model B. Поддержка OMX была удалена из ОС Raspberry Pi (Bulllseye), но присутствует в Buster.
Видео H265 (4K) поддерживается аппаратным декодированием с помощью графического процессора Broadcom на моделях Raspberry Pi 5, а также на Raspberry Pi 4 модели B. Хотя GStreamer, похоже, использует это аппаратное декодирование, удовлетворительная скорость рендеринга видео 4K от UxPlay на этих моделей Raspberry Pi еще не было достигнуто. Опция «-h265» необходима для активации поддержки h265. В этом режиме предпочтительным является проводное соединение Ethernet (и оно может потребоваться клиенту).
Даже при декодировании видео с помощью графического процессора модели с низким энергопотреблением могут пропускать некоторые кадры, чтобы обеспечить синхронизацию звука и видео с использованием временных меток. В устаревшей ОС Raspberry Pi (Bullseye) raspi-config «Параметры производительности» позволяет указать, сколько памяти выделить графическому процессору, но этот параметр, похоже, отсутствует в Bookworm (но его все равно можно установить, например, на 128 МБ, добавив строку «gpu_mem=128» в /boot/config.txt). Pi Zero 2 W (с памятью 512 МБ) работал хорошо при тестировании в 32-битной версии Bullseye или Bookworm Lite со 128 МБ, выделенными для графического процессора (по умолчанию — 64 МБ).
Основные параметры uxplay для R Pi — uxplay [-vs
. Выбор
= glimagesink
иногда бывает полезен. В видеокомпозиторе Wayland используйте
= waylandsink
. Для видео с кадровым буфером используйте
= kmssink
.
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
Звук и видео будут воспроизводиться на удаленном хосте; «nohup» продолжит работу uxplay, если сеанс ssh закрыт. Вывод терминала сохраняется в файле FILE (который может быть /dev/null, чтобы его отменить)
Примечание. Нативная функция AirPlay Server включена в MacOS 12 Monterey, но ограничена недавним оборудованием. UXPLAY может работать на более старых системах MacOS, которые не смогут запустить Монтерей, или могут запустить Монтерей, но не в эфире.
Эти инструкции для MacOS предполагают, что установлены инструменты разработчика командной строки XCode (если установлен XCODE, откройте терминал, введите «Sudo Xcode-Select--Install» и примите условия).
Также предполагается, что Cmake> = 3.13 установлен: это можно сделать с помощью менеджеров пакетов MacPorts ( sudo port install cmake
), Homebrew ( brew install cmake
) или с помощью загрузки с https://cmake.org/download/. Также установите git
, если вы будете использовать его для получения Uxplay.
Затем установите Libplist и OpenSSL-3.x. Обратите внимание, что статические версии этих библиотек будут использоваться в сборниках macOS, поэтому они могут быть удалены после создания UXPlay, если хотите.
Если вы используете Homebrew: brew install libplist openssl@3
Если вы используете MacPorts: sudo port install libplist-devel openssl3
В противном случае построить либеральную мышцу и openssl из источника: см. Инструкции ближе к концу этого Readme; Требуются инструменты разработки (AutoConf, Automake, Libtool и т. Д. ).
Далее получите последний выпуск MacOS GSTREAMER-1.0.
Используя «Официальный» GSTREAMER (рекомендуется как для пользователей MacPorts, так и для HomeBrew) : установите релиз GSTREAMER для MacOS с https://gstreamer.freedesktop.org/download/. (Этот релиз содержит свой собственный PKG-конфиг, поэтому вам не нужно устанавливать его.) Установить пакеты GSTREAMER-1.0 и GSTREAMER-1.0. После загрузки щелкните их для установки (они устанавливают на/library/frameworks/gstreamer.framework). Пользователи Homebrew или Macports не должны устанавливать (или должны удалять) Gstreamer, поставляемый их менеджером пакетов, если они используют «официальный» релиз.
Использование Homebrew's Gstreamer : Pkg-Config необходим: («Braw Install Pkg-Config Gstreamer»). Это приводит к тому, что Homebrew устанавливает большое количество дополнительных пакетов в качестве зависимостей. Установка Homebrew Gstreamer недавно была переработана в одну «формулу» с именем gstreamer
, которая теперь работает без необходимости установить GST_PLUGIN_PATH в окружающей среде. Homebrew устанавливает GSTREAMER TO (HOMEBREW)/lib/gstreamer-1.0
, где (HOMEBREW)/*
IS /opt/homebrew/*
на Apple Silicon Mac и /usr/local/*
ON Intel Mac; Не ставите никаких дополнительных плагинов, не являющихся домами (которые вы создаете себя), и вместо этого установите GST_PLUGIN_PATH, чтобы указать на их местоположение (Homebrew не предоставляет полный GSTREAMER, но, кажется, имеет все необходимое для UXPLAY).
Использование GSTREAMER, установленного от MacPorts : это не рекомендуется, так как в настоящее время Macports Gstreamer - старый (v1.16.2), Uncainted и создан для использования X11:
(Если вы действительно хотите использовать Macports Gstreamer-1.16.2, установите PKGConf ("Sudo Port Install PkgConf"), то "Sudo Port Install GSTREAMER1-GST-PLUGINS-BASE GSTREAMER1-GST-PLUGINS-GOOD GSTREAMER1-GST-PLUGINS -bad gstreamer1-gst-libav ". Для поддержки x11 на macos компиляция Uxplay с использованием специальной опции cmake -DUSE_X11=ON
и запустите его из терминала xquartz с -vs ximagesint; более старые неретиновые Mac требуют более низкого разрешения при использовании. X11: uxplay -s 800x600
.)
После установки GSTREAMER, построить и установить UXPLAY: откройте терминал и измените в каталог источника UXPLAY («UXPLAY-MASTER» для загрузки ZipFile, «UXPLAY» для загрузки "GIT Clone") и создайте/установите с помощью "cmake .; Make; Sudo создает установку »(так же, как и для Linux).
Запуск UXPlay во время проверки предупреждений GSTREAMER (делайте это с «Export GST_DEBUG = 2» до Runnng UXPlay) показывает, что с использованием по умолчанию (так как UXPLAY 1.64) использование временных метров для синхронизации видео, многие видео -кадры отбрасываются (только на macOS), Возможно, из -за другой ошибки (о Videometa), которая появляется в предупреждениях Gstreamer. Рекомендация: используйте новую опцию Uxplay "No TimeStamp" -vsync no
" (вы можете добавить строку" vsync no "в файл конфигурации UxplayRC).
На MacOS с этой установкой GSTREAMER единственные доступные видеосинк -кишки, кажется, - GlimagesInk (выбор по умолчанию, сделанный AutovideoSink) и OsxVideoSink. Название окна не показывает имя сервера AirPlay, но окно видно для приложений для обмена экранами (например, Zoom). Единственным доступным аудионинк, кажется, является Osxaudiosink.
Опция -NC всегда используется, независимо от того, выбирается он или нет. Это обходной путь для проблемы с видеосинк -килограммами GSTREAMER на MacOS: если трубопровод Gstreamer разрушен, в то время как окно зеркала все еще открыто, происходит Segfault.
В случае Glimagesink настройки разрешения «-s wxh» не влияют на (небольшой) начальный размер окна зеркала OpenGL, но окно можно расширить с помощью мыши или трекпада. Напротив, окно, созданное с «-vs osxvideosink» изначально, является большим, но имеет неправильное соотношение сторон (растянутое изображение); В этом случае соотношение сторон изменяется, когда ширина окна меняется путем перетаскивания его стороны; Опция -vs "osxvideosink force-aspect-ratio=true"
может использоваться, чтобы окно имело правильное соотношение сторон, когда он впервые открывается.
Загрузите и установите Bonjour SDK для Windows v3.0 . Вы можете скачать SDK без регистрации на Softpedia.com или получить его с официального сайта Apple https://developer.apple.com/download (Apple заставляет вас зарегистрироваться в качестве разработчика для доступа к его сайту). Это должно установить Bonjour SDK в качестве C:Program FilesBonjour SDK
.
(Это для 64-битных окон; должна быть использована сборка для 32-разрядных окон. .msys2.org/. Примите место установки по умолчанию C:mysys64
.
Пакеты MSYS2 устанавливаются с вариантом менеджера пакетов "Pacman", используемого Arch Linux. Откройте терминал «MSYS2 Mingw64» с вкладки MSYS2 в меню «Запуск Windows» и обновите новую установку MSYS2 с помощью «Pacman -Syu». Затем установите компилятор Mingw-64 и Cmake
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
Компилятор со всеми необходимыми зависимостями будет установлен в каталоге MSYS64 с путем по умолчанию C:/msys64/mingw64
. Здесь мы просто создадим Uxplay из командной строки в среде MSYS2 (это использует « ninja
» вместо « make
» для системы сборки).
Загрузите последний Uxplay от github (чтобы использовать git
, установить его с pacman -S git
, затем « git clone https://github.com/FDH2/UxPlay
») , затем установите зависимости Uxplay (OpenSSL уже установлен с MSYS2)::
pacman -S mingw-w64-x86_64-libplist mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base
Если вы пробуете другую систему сборки Windows, версии GSTREAMER MSVC для Windows доступны на официальном сайте GSTREAMER, но только 64-битная сборка Mingw на MSYS2 была протестирована.
CD в каталог источника Uxplay, затем « mkdir build
» и « cd build
». Процесс сборки предполагает, что Bonjour SDK установлен на C:Program FilesBonjour SDK
. Если это где -то еще, установите переменную среды Bonjour_sdk_home, чтобы указать на его местоположение. Затем создайте Uxplay с
cmake ..
ninja
Предполагая, что никакой ошибки ни в одной из них вы построите исполняемый UXPlay Uxplay.exe в текущем («Build») каталоге. Функции "Sudo Make Install" и "Sudo Make Make удаление", предлагаемые в других сборках, недоступны в Windows; Вместо этого в среде MSYS2 есть /mingw64/...
... вы можете установить исполняемый файл uxplay.exe в C:/msys64/mingw64/bin
(плюс мужская страница и документация в C:/msys64/mingw64/share/...
) с
cmake --install . --prefix /mingw64
Чтобы иметь возможность просматривать производительность, вам нужно установить зрителя Manpage с « pacman -S man
».
Чтобы запустить uxplay.exe, вам нужно установить несколько пакетов плагинов Gstreamer с pacman -S mingw-w64-x86_64-gst-
, где требуемые
данный
Другие возможные пакеты плагинов MSYS2 GSTREAMER, которые вы можете использовать, перечислены в пакетах MSYS2.
Вам также нужно будет предоставить разрешение на исполняемый uxplay uxplay.exe для доступа к данным через брандмауэр Windows. Вам может автоматически предложить выбор, чтобы сделать это, когда вы впервые запускаете UXPLAY, или вам может потребоваться сделать это, используя настройки Windows-> Обновление и безопасность-> Security-> Защита брандмауэра и сети-> Разрешить приложение через брандмауэр . Если ваши флаги защиты от вируса uxplay.exe как «подозрительный» (но без настоящей подписи вредоносных программ), вам может потребоваться исключение.
Теперь протестируйте, запустив « uxplay
» (в окне терминала MSYS2). Если вам нужно указать AudioSink, в Windows есть два основных варианта: более старый плагин DirectSound « -as directsoundsink
» и более современный аудиосессионный API (WASAPI) «WASAPI» -as wasapisink
, который поддерживает дополнительные опции
uxplay -as 'wasapisink device=""'
где
определяет доступное аудиоустройство по своему GUID, которое можно найти с использованием « gst-device-monitor-1.0 Audio
»:
имеет форму, такую как {0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
. Если « device
» не указано, используется аудиоустройство по умолчанию.
Если вы хотите указать Videosink, используя опцию -vs
, некоторые варианты для
являются d3d11videosink
, d3dvideosink
, glimagesink
, gtksink
.
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
Комбинация с опцией -vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
. Для удобства эти варианты будут добавлены, если будет использоваться только -vs d3d11videosink
с или без полноэкранного опции "-fs". (Пользователи Windows могут пожелать добавить « vs d3d11videosink
» (без начального » -
») в файл параметров запуска UXPLAY; см. «Man UXPlay» или «UxPlay -H».) Исполняемый uxplay.exe также может быть запущен без среды MSYS2, в терминале Windows, с C:msys64mingw64binuxplay
.
Параметры:
-
» символа) в файле запуска UXPLAY (либо указанная переменной среды $UXPLAYRC
, или ~/.uxplayrc
или ~/.config/uxplayrc
); Линии, начинающиеся с « #
», рассматриваются как комментарии и игнорируются. Параметры командной строки заменяют параметры в файле запуска.-n server_name (по умолчанию: uxplay); Server_name@ hostname будет именем, которое будет предлагать услуги AirPlay для вашего iPad, iPhone и т. Д., где HostName - это имя сервера, работающего в UxPlay. Теперь это также будет названием, показанным над окном зеркального отображения (x11).
-nh не добавляйте «@ hostname » в конце имени сервера AirPlay.
-H265 Активируйте поддержку Screenmulticodec »(Airplay Perforce Features» BIT 42) для принятия видео H265 (4K/HEVC) в дополнение к видео H264 (1080p) в режиме MIRROR Screen Mirror. Когда используется эта опция, создаются два «видео трубопровода» (один для H264, один для H265). Если какие -либо плагины GSTREAMER в трубопроводе специфичны для H264 или H265, в каждом трубопроводе будет использоваться правильная версия. Проводное соединение Ethernet-клиентского сервера предпочтительнее Wi-Fi для видео 4K и может потребоваться клиенту. Запрашивается только недавние устройства Apple (MC1/M2 MACS или iPad, а также некоторые iPhone) могут отправлять видео H265, если резолют "-s WXH" с H> 1080. Опция «-H265» изменяет опцию разрешения по умолчанию («-s») с 1920x1080 до 3840x2160 и оставляет максимальную кадровую опцию по умолчанию ("-fps") на 30 кадров в секунду.
-pin [nnnn] : (так как v1.67) Используйте аутентификацию Apple-style (один раз) «PIN», когда новый клиент подключается в первый раз: четырехзначный PIN-код отображается на терминале и клиенте Экран показывает подсказку для входа для этого. Когда «-пин» используется сама по себе, для каждой аутентификации выбран новый случайный код PIN; Если используется «-pin nnnn» (например, -Пин 3939 »), это установит неизменную фиксированную код. Аутентификация добавляет сервер в список «доверенных серверов» клиента, и клиенту не нужно будет повторно повторно при условии, что общедоступные ключи клиента и сервера остаются неизменными. (По умолчанию с V1.68, общедоступный ключ сервера генерируется с MAC -адреса, который может быть изменен с помощью опции -m; см. Параметр -Кейн -клавишу для альтернативного метода генерации ключей). (Добавьте строку «PIN» в файл запуска UXPLAY, если вы хотите, чтобы сервер UXPLAY использовал протокол аутентификации PIN -кода).
-reg [ filename ] : (с v1.68). Если используется «-pin», этот вариант поддерживает реестр «доверенных клиентов» в $ home/.uxplay.register (или, необязательно, в имени файла ). Без этой опции возвращают клиентов, которые пропускают PIN-автоентификацию, доверяют и не проверены. Эта опция может быть полезна, если UxPlay используется в более общедоступной среде, для записи данных клиента; Регистр-это текст, одна строка на клиент, с открытым ключом клиента (формат Base-64), идентификатор устройства и имя устройства; Комментируя (с «#») или удаление линии дережистров соответствующего клиента (см. Параметры -Restritce, -block, -Лауйте для дополнительных способов контроля доступа к клиенту). (Добавьте строку «reg» в файл запуска, если вы хотите использовать эту функцию.)
-vsync [x] (в режиме зеркала :) Эта опция ( теперь по умолчанию ) использует временные метки для синхронизации звука с видео на сервере, с необязательной задержкой звука в (десятичной) миллисекунд ( x = "20,5" означает 0,0205 секунды задержку: Положительные или отрицательные задержки менее чем за секунду допускаются.) Это необходимо в системах с низким энергопотреблением, таких как Raspberry Pi без аппаратного декодирования видео.
-vsync no (в режиме зеркала :) Это выключает синхронизацию аудиовидео на основе времени, восстанавливая поведение по умолчанию до UXPLAY-1.64. Стандартные системы настольных компьютеров, кажется, работают хорошо без использования временных метков: этот режим подходит для «живой потоковой передачи», таких как использование Uxplay в качестве второго монитора для компьютера Mac или мониторинг веб -камеры; С ним ни одно видеоросты не сброшены.
-Синх . Задержка секунд: положительные или отрицательные задержки менее чем за секунду разрешены.) Поскольку клиент добавляет задержку видео для учета задержки, сервер в режиме -синх Черт-изменения не вступит в силу немедленно. Это в принципе может быть смягчено, используя настройку задержки -al
для изменения задержки (по умолчанию 0,25 секунды), о которой сервер сообщает клиенту, но в настоящее время изменение этого не имеет никакого эффекта .
-Синх. нет . Это все еще поведение по умолчанию в режиме только аудио, но эта опция может быть полезна в качестве параметра командной строки, чтобы выключить опцию -async
, установленную в файле конфигурации «UxPlayRC».
-db low [: high ] RESCALES ARPLOY TOLUCTORUTIONAUTION (усиление) от -30 дБ: от 0 дБ до низкого : 0 дБ или низкого : высокий . Нижний предел низкий должен быть отрицательным (ослабление); Высокий верхний предел может быть любого знака. (GSTREAMER ограничивает объем-аугимент высоким , чтобы он не мог превышать +20 дБ). Рассказы «плоская», так что для -DB -50: 10 изменение ослабления воздушного периода на -7 дБ переводится на -7 x (60/30) = -14db ослабление и максимальный объем (AirPlay 0DB) является увеличением 10 дБ, а Airplay -30db станет -50 дБ. Обратите внимание, что минимальное значение AirPlay (точно -30 дБ) переводится как «немой».
-taper предоставляет «конический» профиль управления объемом воздушной игры (соответствующий такому, называемую «DASL-Tapering» в Shairport-Sync): Каждый раз, когда длина ползунка громкости (или количество шагов выше, где 16 шагов = полная Объем) снижается на 50%, воспринимаемый объем вдвое (ослабление 10 дБ). (Это модифицируется при низких объемах, чтобы использовать объем «неиспользованный», если он громче.)
-s wxh, например -s 1920x1080 (= "1080p"), разрешение ширины и высоты по умолчанию в пикселях для видео H264. (По умолчанию становится 3840x2160 (= "4K") Когда используется опция -H265.) Это просто запрос, сделанный клиенту AirPlay, и, возможно, не будет окончательное разрешение, которое вы получите. W и H - целые числа с четырьмя цифрами или меньше. Обратите внимание, что размер пикселей высоты - это контролирующий клиент для определения потокового формата; Ширина динамически приспособлена к форме изображения (портретный или ландшафтный формат, в зависимости от того, как удерживается iPad, например).
-s WXH@R , как указано выше, но также информирует клиента AirPlay о скорости обновления экрана дисплея. По умолчанию R = 60 (60 Гц); R должно быть целым числом менее 256.
-О включает опцию «перекрашенные» для окна отображения. Это уменьшает разрешение изображения, используя некоторые из пикселей, запрашиваемых Option -S WXH (или их значения по умолчанию 1920x1080), добавив пустой граничный кадр неиспользованных пикселей (что будет потеряно на полноэкранном дисплее, который преувеличивает, и не отображается GSTREAMER). Рекомендация: не используйте эту опцию , если нет особой причины для его использования.
-FS использует полноэкранную режим, но работает только с X11, Wayland, Vaapi и D3D11 (Windows).
-p позволяет выбирать сетевые порты, используемые UxPlay (их необходимо открыть, если сервер находится за брандмауэром). Само по себе, -P Порты «Legacy» TCP 7100, 7000, 7001, UDP 6000, 6001, 7011. -PN (EG -P 35000) устанавливает порты TCP и UDP N, N+1, N+2. -p N1, N2, N3 (значения, разделенные запятыми), устанавливает каждый порт отдельно; -P N1, N2 Устанавливает порты N1, N2, N2+1. -p tcp n или -p udp n устанавливает только порты TCP или UDP. Порты должны быть в диапазоне [1024-65535].
Если опция -p не используется, порты выбираются динамически (случайным образом), что не будет работать, если брандмауэр работает.
-ВДЕК Использование программного обеспечения H264 Декодирование с использованием элемента GSTREAMER AVDEC_H264 (декодер Libav H264). Эта опция должна предотвратить выбор AutovideoSink в плагине видеозоликов, такого как VaApisink.
-vp синтаксический анализатор выбирает элемент анализатора H264 Gstreamer H264, по умолчанию H264Parse. Использование кавычек "..." позволяет добавлять параметры.
-vd Декодер выбирает элемент декодера H264 трубопровода gstreamer, а не значение значения по умолчанию «декодибин», который выбирает его для вас. Декодирование программного обеспечения выполняется AVDEC_H264; Различные аппаратные декодеры включают в себя: VAAPIH264DEC, NVDEC, NVH264DEC, V4L2H264DEC (это требует, чтобы соответствующее оборудование было доступно). Использование кавычек "..." позволяет включить некоторые параметры с именем декодера.
-vc преобразователь выбирает элемент видеоконвертера Gstreamer Pipeline, а не значение значения по умолчанию «VideoConvert». При использовании аппаратного декодирования Video4linux2 с помощью графического процессора -vc v4l2convert
также будет использовать GPU для преобразования видео. Использование кавычек "..." позволяет включить некоторые параметры с именем преобразователя.
-vs Videosink выбирает видеосинк Gstreamer, а не значение значения по умолчанию «AutovideoSink», которое выбирает его для вас. Некоторые варианты видеоролики: ximagesInk, xvimagesInk, vaApisink (для Intel Graphics), Gtksink, Glimagesink, Waylandsink, Osxvideosink (для macOS), KMSSINK (для систем без x11, например Raspberry pi os) или fpsdisplaysink (которые показывают фрэмринг. FPS). Использование кавычек "..." позволяет включить некоторые параметры с именем видеосинк. Например, полноэкранный режим поддерживается плагином vaApisink и получается с использованием -vs "vaapisink fullscreen=true"
; Это также работает с waylandsink
. Синтаксис таких параметров специфичен для данного плагина (см. Документацию GSTREAMER), и некоторые варианты видеоролики могут не работать в вашей системе.
-vs 0 подавляет отображение потокового видео. В режиме зеркала экран клиента по -прежнему отражается со сниженной скоростью 1 кадра в секунду, но не отображается или отображается. Эта опция всегда должна использоваться, если сервер является «без головы» (без прикрепленного экрана для отображения видео), и используется только для рендеринга звука, который будет AAC, снятым, снятым звуком в режиме зеркала с непревзойденным видео и превосходным качеством Alac Apple Lossless Audio в режиме AirPlay только для аудио.
-v4l2 Настройки видео для оборудования H264 Decoding в GPU от Video4linux2. Эквивалент -vd v4l2h264dec -vc v4l2convert
.
-BT709 Обходной путь по сбое более старого плагина Video4linux2 для распознавания использования Apple необычного (но разрешенного) «полного расцвета» варианта цветового стандарта BT709 для цифрового телевидения. Это больше не нужно для GSTREAMER-1.20.4 и от него.
-RPI, эквивалентный "-V4L2" (не действителен для модели 5 Raspberry Pi и удален в UXPLAY 1.67)
-Рпигл эквивалент "-rpi -vs Glimagesink". (Удалено с момента Uxplay 1.67)
-rpifb , эквивалентный "-rpi -vs kmssink" (удален с момента Uxplay 1.67)
-rpiwl эквивалент "-rpi -vs waylandsink". (Удалено с момента Uxplay 1.67)
-Ка AudiosInk выбирает аудиосинк -gstreamer, вместо того, чтобы позволить Autoaudiosink выбирать его для вас. Некоторые варианты аудионинкно -листа: PulseSk, Alsasink, Pipewiresink, Osssink, OSS4SINK, Jackaudiosink, Osxaudiosink (для macOS), вазаписинка, DirectSoundSink (для Windows). Использование кавычек "..." может позволить некоторые дополнительные параметры ( -as "alsasink device=..."
чтобы указать устройство вывода, не являющегося деко,). Синтаксис таких параметров специфичен для данного плагина (см. Документацию GSTREAMER), и некоторые варианты звука могут не работать в вашей системе.
-Во 0 (или просто -A ) подавляет воспроизведение потокового аудио, но отображает потоковое видео.
-Ал X указывает аудиозадержку x в (десятичные) секунд в аудио (ALAC), который сообщается клиенту. Значения в диапазоне [0,0, 10,0] секунды допускаются и будут преобразованы в целое количество микросекунд. По умолчанию 0,25 с (250000 USEC). (Однако клиент, по-видимому, игнорирует эту задержку, поэтому этот вариант кажется нефункциональным.)
-ca FileName предоставляет файл (где имя файла может включать полный путь), используемый для вывода «обложки» (от Apple Music и т. Д. ) В режиме Alac только для аудио. Этот файл перезаписывается последним обложкой по мере его прибытия. Обложка (формат JPEG) отбрасывается, если эта опция не используется. Используйте с просмотром изображения, который перезагружает изображение, если оно меняется, или регулярно ( например, один раз в секунду.). Чтобы достичь этого, запустите « uxplay -ca [path/to/]filename &
» в заднем плане, затем запустите зритель изображения на переднем плане. Пример, используя feh
в качестве зрителя: запустите « feh -R 1 [path/to/]filename
» (в том же окне терминала, в котором UXPlay был помещен в фон). Чтобы уйти, используйте ctrl-C fg ctrl-C
, чтобы завершить зритель изображений, принести uxplay
на передний план и заканчивайте его.
-Резат n Устанавливает ограничение сбоев с последствиями тайм -аута клиента для ответа на запросы NTP с сервера (они отправляются каждые 3 секунды, чтобы проверить, присутствует ли клиент, и синхронизируется с ним). После n сбоев, клиент будет предположить, что будет офлайн, и соединение будет сброшено, чтобы разрешить новое соединение. Значение по умолчанию n составляет 5; Значение n = 0 означает «нет лимита» на тайм -аутах.
-Nofreeze закрывает окно видео после сброса из -за тайм -аута NTP (по умолчанию можно оставить окно открытым, чтобы разрешить более плавное разведение к тому же клиенту). Эта опция может быть полезна в полноэкранном режиме.
-NC поддерживает предыдущее поведение UXPLAY <1.45, которое не закрывает окно видео, когда клиент отправляет сигнал «остановить зеркалирование». Эта опция в настоящее время используется по умолчанию в MacOS, так как окно, созданное в MacOS GSTREAMER, не завершается правильно (оно вызывает SEGFAULT), если он все еще открыт, когда конвейер Gstreamer закрыт.
-nohold выпускает текущее соединение, когда новый клиент пытается подключиться. Без этой опции текущий клиент поддерживает эксклюзивное право собственности на UXPLAY, пока не отключается.
-Продите клиентам ограничение клиентов, разрешено подключаться к указанным по -allow
. DeviceID имеет форму MAC -адреса, который отображается UXPLAY, когда клиент пытается подключиться, и, по -видимому, неизменным. Он имеет формат XX:XX:XX:XX:XX:XX
, x = 0-9, af, и, возможно, является «истинным» аппаратным MAC-адресом устройства. Обратите внимание, что клиенты iOS, как правило, подвергают различные случайные «частные адреса WI_FI» («поддельные» MAC -адреса) для разных сетей (по причинам конфиденциальности, чтобы предотвратить отслеживание), что может измениться и не соответствуют устройству.
-Продите ограничения без удаления (по умолчанию). Это полезно в качестве аргумента командной строки для переизбытков ограничений, установленных в файле запуска.
-Allow ID добавляет DeviceID = ID в список разрешенных клиентов, когда применяются ограничения клиентов. Обычно это будет запись в файле запуска UXPlayRC.
-Block ID всегда блокирует клиентов с помощью DeviceID = ID , даже если ограничения клиентов в целом не применяются. Обычно это будет запись в файле запуска UXPlayRC.
-FpsData включает мониторинг регулярных отчетов о производительности потоковой передачи видео, которые отправляются клиентом. Они будут отображаться в окне терминала, если используется эта опция. Данные обновляются клиентом с интервалом в 1 секунду.
-FPS N устанавливает максимальную частоту кадров (в кадрах в секунду) для клиента AirPlay для трансляции видео; n должно быть целым числом менее 256. (Клиент может выбрать для обслуживания видео при любой частоте кадров ниже; по умолчанию 30 кадров в секунду.) Настройка 60 кадров в секунду может дать вам улучшенное видео, но не рекомендуется на Raspberry Pi. Настройка ниже 30 кадров в секунду может быть полезна для сокращения задержки, если вы одновременно используете более одного экземпляра UXPLAY. Этот параметр является лишь консультантом для клиентского устройства, поэтому настройка высокого значения не заставит высокую кадров. (Вы можете проверить, используя «-vs fpsdisplaysink», чтобы увидеть, что принимается кадр, или использовать опцию -fpsdata, который отображает данные производительности видео-потока, постоянно отправляемые клиентом во время потока видео.)
-f {h | V | i} реализует "VideoFlip" преобразование изображения: h = горизонтальный флип (правый левый переворот, или зеркальное изображение); V = вертикальный флип; I = вращение или инверсию 180 градусов (которая является комбинацией H с V).
-r {r | l} 90 градусов справа (по часовой стрелке) или левый (против часовой стрелки) вращения; Эти преобразования изображения выполняются после любых преобразований -f .
-m [Mac] изменяет MAC -адрес (идентификатор устройства), используемый UXPLAY (по умолчанию, для использования MAC -адресу True Adnhaware, сообщаемого сетевой картой хост -компьютера). (Различный сервер_name, MAC -адреса и сетевые порты необходимы для каждого запуска UxPlay, если вы пытаетесь запустить более одного экземпляра UXPLAY на одном компьютере.) Если [Mac] (в форме XX: xx: xx: xx: xx: XX, 6 Hex Octets) не дается, генерируется случайный MAC -адрес. Если UxPlay не может найти истинный MAC -адрес сетевой карты, (в частности, MAC -адрес, используемый первым обнаруженным сетевым интерфейсом), будет использоваться случайный MAC -адрес, даже если опция -M не указан. (Обратите внимание, что случайный MAC -адрес будет отличаться каждый раз, когда начинается UXPlay).
-key [ filename ] : эта (более безопасная) опция для генерации и хранения постоянного открытого ключа (необходимого для опции -pin) была заменена по умолчанию (менее безопасным) методом, который генерирует ключ с идентификатора устройства сервера « «(MAC -адрес, который можно изменить с помощью опции -m, удобно в качестве опции файла запуска). Когда используется опция -ключ, создается надежно сгенерированная клавиатура и хранится в $HOME/.uxplay.pem
, если этот файл не существует, и не читается из него, если он существует. (Необязательно, ключ можно хранить в имене файла .) Этот метод более безопасен, чем новый метод по умолчанию (поскольку идентификатор устройства транслируется в объявлении DNS_SD), но все же оставляет закрытый ключ, подвергающийся воздействию любого, кто может получить доступ к файлу PEM . Эта опция должна быть установлена в файле запуска Uxplay в виде строки «клавиша» или « имя файла » (без начального «-»), где имя файла -это полный путь, который должен быть заключен в кавычки ( "...."
) Если Он содержит любые пустые пространства. Поскольку метод по умолчанию проще, а безопасность клиентского доступа к UXPLAY вряд ли будет важной проблемой, опция -Key больше не рекомендуется .
-Дакп [ filename ] : экспорт текущего клиента DACP-ID и ключ активного восстановления в файл: по умолчанию $ home/.uxplay.dacp. (необязательно можно изменить на имя файла ). Может использоваться приложениями дистанционного управления. Файл переходен: существует только во время подключения клиента.
-vdmp дампа H264 Video для файла VideoDump.h264. -vdmp n дают не больше, чем n -nal подразделения в videodump.x.h264; x = 1,2, ... увеличивается каждый раз, когда прибывает единица NAL SPS/PPS. Чтобы изменить имя VideoDump , используйте -vdmp [n] имя файла .
-Admp дампирует аудио для подачи audiodump.x.aac (AAC-eld формат Audio), AudioDump.x.alac (ALAC Format Audio) или Audiodump.x.aud (другой формат аудио), где x = 1,2,3 ... увеличивается каждый раз, когда меняется аудиоформат. -Дадмп n ограничивает количество пакетов, сброшенных в файл в n или меньше. Чтобы изменить имя AudioDump , используйте -admp [n] имя файла . Обратите внимание, что (в отличие от сброшенного видео) сброшенный звук в настоящее время полезен только для отладки, так как он не является контейнерным, чтобы сделать его воспроизводимым со стандартными аудиоплеерами.
-Д включить вывод отладки. Примечание: это не показывает ошибку GSTREAMER или сообщения отладки. Чтобы увидеть ошибку GSTREAMER и предупреждающие сообщения, установите переменную среды GST_DEBUG с помощью "Export GST_DEBUG = 2" перед запуском UXPLAY. Чтобы увидеть информационные сообщения GSTREAMER, установите GST_DEBUG = 4; Для сообщений отладки GST_DEBUG = 5; Увеличьте это, чтобы увидеть еще больше внутренней работы Gstreamer.
Примечание. uxplay
запускается из командной строки терминала, а информационные сообщения записываются на терминал.
Один пользователь (на Ubuntu) обнаружил, что компиляция не удалась с сообщениями о ссылке на «USR/Local/Lib/libcrypto.a» и «Zlib». Это было связано с (в дополнение к стандартной установке Ubuntu Libssl-DEV), пользователь не знал, что присутствовала вторая установка с Libcrypto в /usr /local. Решение: когда присутствует более одной установки OpenSSL, установите переменную среды OPEN_SSL_ROOT_DIR, чтобы указать на правильный; На 64-битной Ubuntu это делается путем запуска export OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
перед запуском Cmake.
Для работы UXPLAY требуется служба DNS_SD Discovery («Bonjour» или «ZeroConf»). На Linux он обычно предоставляется Avahi, и для устранения неполадок, вы должны использовать инструмент avahi-browse
. (Возможно, вам потребуется установить отдельный пакет с таким именем, как avahi-utils
чтобы получить это.)
На Linux убедитесь, что Avahi установлен, и запустите службу Avahi-Daemon в системе под управлением UxPlay (ваше распространение документирует, как это сделать, например: sudo systemctl
или sudo service avahi-daemon
, с
одним из включенных, отключить sudo find /etc -name avahi-daemon.conf
запустить, остановить, статус. sudo find /etc -name avahi-daemon.conf
"): убедитесь, что« отключить публикацию » не является выбранным вариантом). Некоторые системы могут вместо этого использовать демон MDNSD в качестве альтернативы для предоставления сервиса 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