From 3139992e1ec764340bdbfd13fbc3520007073265 Mon Sep 17 00:00:00 2001
From: "F. Duncanh"
Date: Mon, 10 Nov 2025 18:03:28 -0500
Subject: [PATCH] preparing for v1.73 release
---
README.html | 239 +++++++++++++++++++++++++---------------------------
README.md | 111 ++++++++++++------------
README.txt | 223 ++++++++++++++++++++++++------------------------
uxplay.1 | 4 +-
uxplay.cpp | 2 +-
uxplay.spec | 4 +-
6 files changed, 283 insertions(+), 300 deletions(-)
diff --git a/README.html b/README.html
index 3ad8efd..6cc4d16 100644
--- a/README.html
+++ b/README.html
@@ -1,85 +1,70 @@
UxPlay
-1.72: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix
+id="uxplay-1.73-airplay-mirror-and-airplay-audio-server-for-linux-macos-and-unix-also-runs-on-windows.">UxPlay
+1.73: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix
(also runs on Windows).
Now
developed at the GitHub site https://github.com/FDH2/UxPlay (where ALL user issues
should be posted, and latest versions can be found).
-– NEW on github: some YouTube app HLS videos now
-offer alternative language tracks (generated by AI dubbing). Language
-choices will be made in order of preferences set with option -lang (or
-by environment variable $LANGUAGE, which it overrides). Format is
--lang fr:es:en, where French (“fr”) is the first choice, if
-available, then Spanish (“es”), etc. $LANGUAGE has the same format.
--lang by itself suppresses playing of dubbed audio.
-NEW on github: Support for service
-discovery using a Bluetooth LE “beacon” for both Linux/*BSD and
-Windows (as an alternative to Bonjour/Rendezvous DNS-SD service
-discovery). The user must set up a Bluetooth LE “beacon”, (a USB 4.0 or
-later “dongle” can be used). See instructions below. The beacon runs
-independently of UxPlay and regularly broadcasts a Bluetooth LE (“Low
-Energy”) 46 byte packet informing nearby iOS/macOS devices of the local
-IPv4 network address of the UxPlay server, and which TCP port to contact
-UxPlay on. Two versions of a Python script (Python >=3.6)
-“uxplay-beacon.py”, (one for Linux/*BSD using BlueZ
-LEAdvertisingManager1 with DBus, and one for Windows using
-winrt/BluetoothLEAdvertisementPublisher) are ready for users to run: the
-appropriate version will be installed when UxPlay is built. They
-independently run Service-Discovery beacons that iOS devices respond to.
-Instructions are given
+NEW in v1.73 (November 2025):
+Some YouTube app HLS videos now offer alternative language tracks
+(generated by AI dubbing). Language choices will be made in order of
+preferences set with option -lang (or by environment variable $LANGUAGE,
+which “-lang” overrides). Format is -lang fr:es:en, where
+French (“fr”) is the first choice, if available, then Spanish (“es”),
+etc. $LANGUAGE has the same format: -lang (by itself)
+suppresses playing of dubbed audio if $LANGUAGE is set.
+Support for service discovery using a Bluetooth LE
+“beacon” for both Linux/*BSD and Windows (as an alternative to
+Bonjour/Rendezvous DNS-SD service discovery). This can be used
+on networks that do not allow the user to run a DNS_SD service.
+The user must run a Bluetooth LE “beacon”, (a USB 4.0 or later “dongle”
+can be used). The beacon is managed by a Python3 script
+uxplay-beacon.py (available in two versions, a BlueZ/DBus
+version for Linux/*BSD, and a winrt version for Windows). The beacon
+runs independently of UxPlay: while UxPlay is running, it regularly
+broadcasts a Bluetooth LE (“Low Energy”) 46 byte legacy-type
+advertisement informing nearby iOS/macOS devices of the local IPv4
+network address of the UxPlay server, and which TCP port to contact
+UxPlay on. Instructions are given
below.
-NEW on github: option
--vrtp <rest-of-pipeline> bypasses rendering by
-UxPlay, and instead transmits rtp packets of decrypted h264 or h265
-video to an external renderer (e.g. OBS Studio) at an address specified
-in rest-of-pipeline. (Note: this is video only, an option
-“-rtp” which muxes audio and video into a mpeg4 container still needs to
-be created: Pull Requests welcomed).
-NEW on github: (for Linux/*BSD Desktop
-Environments using D-Bus). New option -scrsv <n>
-provides screensaver inhibition (e.g., to prevent screensaver function
-while watching mirrored videos without keyboard or mouse activity): n =
-0 (off) n=1 (on during video activity) n=2 (always on while UxPlay is
-running). Tested on Gnome/KDE/Cinnamon/Mate/Xfce 4: may need adjustment
-for other Desktop Environments (please report). (watch output of
-dbus-monitor to verify that inhibition is working).
-Might not work on Wayland.
-NEW on github: option -ca (with no filename
-given) will now render Apple Music cover art (in audio-only mode) inside
-UxPlay. (-ca <filename> will continue to export cover
-art for display by an external viewer).
-NEW in v1.72: Improved Support for (YouTube) HLS
-(HTTP Live Streaming) video with the new “-hls” option (introduced in
-1.71).* Only streaming from the YouTube iOS app (in "m3u8"
-protocol) is currently supported: (streaming using the AirPlay
-icon in a browser window is not yet supported).Click on
-the airplay icon in the YouTube app to stream video. Please
-report any issues with this new feature of UxPlay.
+option -vrtp <rest-of-pipeline> bypasses
+rendering by UxPlay, and instead transmits rtp packets of decrypted h264
+or h265 video to an external renderer (e.g. OBS Studio) at an address
+specified in rest-of-pipeline. (Note: this is video only,
+an option “-rtp” which muxes audio and video into a mpeg4 container
+still needs to be created: Pull Requests welcomed).
+(for Linux/*BSD Desktop Environments using D-Bus). New option
+-scrsv <n> provides screensaver inhibition (e.g., to
+prevent screensaver function while watching mirrored videos without
+keyboard or mouse activity): n = 0 (off) n=1 (on during video activity)
+n=2 (always on while UxPlay is running). Tested on
+Gnome/KDE/Cinnamon/Mate/Xfce 4: may need adjustment for other Desktop
+Environments (please report). (watch output of dbus-monitor
+to verify that inhibition is working). Might not work on
+Wayland.
+option -ca (with no filename given) will now render Apple Music
+cover art (in audio-only mode) inside UxPlay. (-ca
+<filename> will continue to export cover art for
+display by an external viewer).
+Improved Support for (YouTube) HLS (HTTP Live Streaming) video
+with the new “-hls” option (introduced in 1.71).* Only streaming
+from the YouTube iOS app (in "m3u8" protocol) is currently
+supported: (streaming using the AirPlay icon in a browser
+window is not yet supported).Click on the airplay icon
+in the YouTube app to stream video. Please report any issues
+with this new feature of UxPlay.
The default video player for HLS is GStreamer playbin v3: use
-“-hls 2” to revert to playbin v2 if some videos fail to play.
-
-- user-requested features: added support for setting a password (as an
-alternative to on-screen pin codes) to control client access (-pw
+“-hls 2” to revert to the older GStreamer player playbin v2 if some
+videos fail to play.
+user-requested features: added support for setting a password (as
+an alternative to on-screen pin codes) to control client access (-pw
option, see “man pw” or this README for details); added support for
setting initial client audio-streaming volume (-vol option), and output
of audio-mode metadata to file (for display by some external process,
--md option).
-
-ISSUES (Please help to solve if you have
-expertise)
-
-- in HLS video streaming from the YouTube app (-hls option), rendered
-using GStreamer’s media player “playbin3” (or playbin2, with option -hls
-2), we don’t understand how to correctly deal with “interstitials” (= 15
-sec commercials) when “skip” is pressed on the client. (HLS is handled
-by handlers in lib/http_handlers.h). (Should response to HTTP requests
-POST /action (playlistRemove) and POST /Stop be modified? Wireshark
-data from HLS on an AppleTV model 3 with UN-upgraded original OS
-(unencrypted communications) could be useful!
-
+-md option).
Highlights:
@@ -528,11 +513,11 @@ on how your audio is set up.
hardware-accelerated h264 video decoding by Intel or AMD graphics (but
not for use with NVIDIA using proprietary drivers). However this package
contains older drivers (vaapisink, vaapih264dec, etc) that are no longer
-developed. This package is no longer recommended, and and its contents
-have been superseded by new VA-API drivers (vah264dec, etc.) that are
-supplied in “plugins-bad”; there is no replacement for
-vaapisink: use glimagesink or xvimagesink, or just let autovideosink
-choose for you.
+developed, and should not be installed unless these
+needed. The “va” plugins (vah264dec, etc.) that replace the
+“vaapi” plugins are provided in “plugins-bad”: and use
+standard videosinks (xvimagesink, glimagesink, etc.) instead of the
+special videosink “vaapisink” used by “vaapi” plugins.
Also install “gstreamer1.0-tools” to get the
utility gst-inspect-1.0 for examining the GStreamer
installation.
@@ -544,38 +529,39 @@ complete GStreamer from source)
In some cases, because of patent issues, the libav plugin feature
avdec_aac needed for decoding AAC audio in mirror mode
is not provided in the official distribution: get it from community
-repositories for those distributions. _Note: the “vaapi” packages listed
-below are no longer recommended: newer “va” versions of the VA-API
-plugins for Intel/AMD graphics are provided by *-plugins-bad_
+repositories for those distributions. _Note: the (deprecated) “vaapi”
+packages listed below are no longer recommended: newer “va” versions of
+the VA-API plugins for Intel/AMD graphics are provided by
+*-plugins-bad._
Red Hat, or clones like CentOS (now continued as Rocky
Linux or Alma Linux): Install gstreamer1-libav
-gstreamer1-plugins-bad-free (+gstreamer1-vaapi for Intel/AMD graphics).
-In recent Fedora, gstreamer1-libav is renamed gstreamer1-plugin-libav.
-To get avdec_aac, install packages from rpmfusion.org: (get
+gstreamer1-plugins-bad-free (deprecated: gstreamer1-vaapi for
+Intel/AMD graphics). In recent Fedora, gstreamer1-libav is renamed
+gstreamer1-plugin-libav. To get avdec_aac, install packages from
+rpmfusion.org: (get
ffmpeg-libs from rpmfusion; on RHEL or clones, but not recent Fedora,
also get gstreamer1-libav from there).
Mageia, PCLinuxOS, OpenMandriva: Install
-gstreamer1.0-libav gstreamer1.0-plugins-bad (gstreamer1.0-vaapi for
-Intel/AMD graphics). On Mageia, to get avdec_aac, install ffmpeg
-from the “tainted” repository, (which also provides a more
-complete gstreamer1.0-plugins-bad).
+gstreamer1.0-libav gstreamer1.0-plugins-bad (deprecated:
+gstreamer1.0-vaapi for Intel/AMD graphics). On Mageia, to get
+avdec_aac, install ffmpeg from the “tainted” repository, (which
+also provides a more complete gstreamer1.0-plugins-bad).
openSUSE: Install gstreamer-plugins-libav
-gstreamer-plugins-bad (+ gstreamer-plugins-vaapi for Intel/AMD
-graphics). To get avdec_aac, install libav* packages for
-openSUSE from deprecated: gstreamer-plugins-vaapi for
+Intel/AMD graphics). To get avdec_aac, install libav* packages
+for openSUSE from Packman
“Essentials”; recommendation: after adding the Packman
repository, use the option in YaST Software management to switch all
system packages for multimedia to Packman).
Arch Linux Install gst-plugins-good
-gst-plugins-bad gst-libav (+ gstreamer-vaapi for Intel/AMD
-graphics).
+gst-plugins-bad gst-libav (deprecated: gstreamer-vaapi for
+Intel/AMD graphics).
FreeBSD: Install gstreamer1-libav,
gstreamer1-plugins, gstreamer1-plugins-* (* = core, good, bad, x, gtk,
-gl, vulkan, pulse, v4l2, …), (+ gstreamer1-vaapi for Intel/AMD
-graphics).
+gl, vulkan, pulse, v4l2, …), (deprecated: gstreamer1-vaapi for
+Intel/AMD graphics).
OpenBSD: Install gstreamer1-libav,
gstreamer-plugins-* (* = core, bad, base, good).
@@ -709,13 +695,14 @@ to see what is available. Some possibilites on Linux/*BSD are:
(X11)
kmssink, fbdevsink (console
graphics without X11)
-vaapisink (for Intel/AMD hardware-accelerated
-graphics) is obsolete: instead use “-vd vah264dec” (or
-“vah265dec”) with glimagesink or xvmagesink.
+vaapisink (deprecated,for Intel/AMD
+hardware-accelerated graphics) is obsolete: instead use
+glimagesink or xvmagesink (with
+hardware decoding by “vah264dec`, which may get selected automatically,
+but can be explicitly specified with the”-vd ” option.)
for NVIDIA hardware graphics (with CUDA) use
-glimagesink combined with “-vd nvh264dec”
-(or “nvh264sldec”, a new variant which will become “nvh264dec” in
-GStreamer-1.24).
+glimagesink combined with
+“-vd nvh264dec”.
If the server is “headless” (no attached monitor, renders audio
only) use -vs 0.
@@ -1076,10 +1063,10 @@ terminals, use the numerical keypad with “Num Lock” on: while holding
down the “Alt” key, type “+” on the keypad, followed by the UTF-8 hex
code for the character (using the keypad for numbers), then release the
“Alt” key. (The UTF-8 hex codes have 4 hex digits: for example, the
-“copyright” symbol has hex code 00a9.) This method must be activated in
-the Windows Registry: using regedit, find the Registry section
+“copyright” symbol has hex code 00a9.) This method must be activated
+in the Windows Registry: using regedit, find the Registry section
’HKEY_Current_User/Control Panel/Input Method”, and add a new Key
-“EnableHexNumpad” with value “1”, then reboot the computer.
+“EnableHexNumpad” with value “1”, then reboot the computer.
Usage
Options:
@@ -1123,13 +1110,14 @@ video player to use for playing HLS video. (Playbin v3 is the
recommended player, but if some videos fail to play, you can try with
version 2.)
-lang [list] Specify language preferences for
-YouTube app HLS videos, which may offer a choice of language (based on
-AI dubbing). If this option is not used, preferences will be taken from
-environment variable $LANGUAGE, if set. Both methods specify the
-preference order as e.g. list = fr:es:en, fot French (first
-choice), Spanish (second choice), and English (third choice).
-If “list” is not given (or list = 0), $LANGUAGE is ignored and undubbed
-audio is played.
+YouTube app HLS videos, some of which now which offer a choice of
+language (based on AI dubbing). If this option is not used, preferences
+will be taken from environment variable $LANGUAGE, if set. Both methods
+specify the preference order by a list: e.g., fr:es:en, for
+French (first choice), Spanish (second choice), and English (third
+choice). If option -lang is not followed by a list (or
+-list 0 is used), $LANGUAGE is ignored and undubbed audio
+is played.
-scrsv n. (since 1.73) (So far, only implemented on
Linux/*BSD systems using D-Bus). Inhibit the screensaver in the absence
of keyboard input (e.g., while watching video), using the
@@ -1517,8 +1505,8 @@ systems:
For Windows support on MSYS2 UCRT systems, use pacman -S to install
mingw-w64-ucrt-x86_64-python,
*-python-gobject, *-python-psutil, and
-*-python-pip. Then install winrt bindings
-pip install winrt-Windows.Foundation.Collections,
+*-python-pip. Then install winrt bindings:
+“pip install winrt-Windows.Foundation.Collections”, also
winrt-Windows.Devices.Bluetooth.Advertisement and
winrt-Windows.Storage.Streams.
If uxplay will be run with option “uxplay -ble” (so it
@@ -1545,15 +1533,15 @@ or uxplay-beacon.py --help. Options are
--ipv4 <ipv4 address>. This option can be
used to specify the ipv4 address at which the UxPlay server should be
contacted by the client. If it is not given, an address will be obtained
-automatically using gethostbyname. Only ipv4 addresses are
-supported.
+automatically (specify the address with the option if automatic
+selection fails). Only ipv4 addresses are supported.
--path <BLE data file>. This overrides the
default choice of BLE data file (~/.uxplay.ble) that is
monitored by the beacon script. This also requires that uxplay is run
with option “uxplay -ble <BLE data file>”.
The BlueZ/Dbus version has thee more options not offered by the
-Windows version:
+Windows version (the Windows operating system chooses their values):
--AdvMin x, --AdvMax y. These controls
the interval between BLE advertisement broadcasts. This interval is in
@@ -1563,13 +1551,14 @@ AdvMin < AdvMax it is chosen flexibly in this range to avoid
interfering with other tasks the Bluetooth device is carrying out. The
default values are AdvMin = AdvMax = 100. The advertisement is broadcast
on all three Bluetooth LE advertising channels: 37,38,39.
---index x (default x = 0, x >= 0). This should be
-used to distinguish between multiple simultaneous instances of
-uxplay-beacon.py that are running to support multiple instances of
+
--index x (default x = 0, x >= 0). This can be
+used by the DBus to distinguish between multiple simultaneous instances
+of uxplay-beacon.py that are running to support multiple instances of
UxPlay. Each instance must have its own BLE Data file (just as each
instance of UxPlay must also have its own MAC address and ports).
Note: running multiple beacons simultaneously on the same host has
-not been tested.
+not been tested, and this option might not be useful or
+needed.
If you wish to test Bluetooth LE Service Discovery on Linux/*BSD, you
can disable DNS_SD Service discovery by the avahi-daemon with
@@ -1921,14 +1910,16 @@ 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.
Changelog
-xxxx 2025-09-25 Render Audio cover-art inside UxPlay with -ca option
+
1.73 2025-11-10 Render Audio cover-art inside UxPlay with -ca option
(no file specified). (D-Bus based) option -scrsv to inhibit
-screensaver while UxPlay is running (Linux/*BSD only). Add support for
-Service Discovery using a Bluetooth LE beacon. Add -vrtp option for
-forwarding decrypted h264/5 video to an external renderer (e.g., OBS
-Studio). Check that option input strings have valid UTF-8 encoding. New
-option -lang fr:es:en to specify language preferences for
-YouTube HLS videos when they offer a choice.
+screensaver while UxPlay is running (Linux/*BSD only). Add password
+support (-pw) using a displayed pin code as a password that changes
+every time (and not as a one-time pin). Add support for Service
+Discovery using a Bluetooth LE beacon. Add -vrtp option for forwarding
+decrypted h264/5 video to an external renderer (e.g., OBS Studio). Check
+that option input strings have valid UTF-8 encoding. New option
+-lang fr:es:en to specify language preferences for YouTube
+HLS videos when they offer a choice.
1.72.2 2025-07-07 Fix bug (typo) in DNS_SD advertisement introduced
with -pw option. Update llhttp to v 9.3.0
1.72.1 2025-06-06 minor update: fix regression in -reg option; add
diff --git a/README.md b/README.md
index a8d88c0..c24ffad 100644
--- a/README.md
+++ b/README.md
@@ -1,37 +1,40 @@
-# UxPlay 1.72: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (also runs on Windows).
+# UxPlay 1.73: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (also runs on Windows).
### **Now developed at the GitHub site (where ALL user issues should be posted, and latest versions can be found).**
--- **NEW on github**: some YouTube app HLS videos now offer alternative language tracks (generated by AI dubbing). Language choices will be made in order of
- preferences set with option -lang (or by environment variable $LANGUAGE, which it overrides). Format is `-lang fr:es:en`, where French ("fr") is
- the first choice, if available, then Spanish ("es"), etc. $LANGUAGE has the same format. `-lang` by itself suppresses playing of dubbed audio.
+- **NEW in v1.73** (November 2025):
-- **NEW on github**: Support for **service discovery using a Bluetooth LE "beacon"** for both Linux/\*BSD and Windows (as an alternative to Bonjour/Rendezvous DNS-SD
- service discovery). The user must set up a Bluetooth LE "beacon", (a USB 4.0 or later "dongle" can be used). See instructions
- below. The beacon runs independently of UxPlay and regularly broadcasts a Bluetooth LE ("Low Energy") 46 byte packet informing nearby iOS/macOS devices of
- the local IPv4 network address of the UxPlay server, and which TCP port to contact UxPlay on. Two versions of a Python script (Python >=3.6) "uxplay-beacon.py",
- (one for Linux/*BSD using BlueZ LEAdvertisingManager1 with DBus, and one for Windows using winrt/BluetoothLEAdvertisementPublisher) are ready for users to
- run: the appropriate version will be installed when UxPlay is built. They independently run Service-Discovery beacons that iOS devices respond to.
- Instructions are [given below](#bluetooth-le-beacon-setup).
+- Some YouTube app HLS videos now offer alternative language tracks (generated by AI dubbing). Language choices will be made in order of
+ preferences set with option -lang (or by environment variable $LANGUAGE, which "-lang" overrides). Format is `-lang fr:es:en`, where French ("fr") is
+ the first choice, if available, then Spanish ("es"), etc. $LANGUAGE has the same format: `-lang` (by itself) suppresses playing of
+ dubbed audio if $LANGUAGE is set.
-- **NEW on github**: option `-vrtp ` bypasses rendering by UxPlay, and instead
+- Support for **service discovery using a Bluetooth LE "beacon"** for both Linux/\*BSD and Windows (as an alternative to Bonjour/Rendezvous DNS-SD
+ service discovery). **This can be used on networks that do not allow the user to run a DNS_SD service.** The user must run a Bluetooth LE "beacon", (a USB 4.0 or
+ later "dongle" can be used). The beacon is managed by a Python3 script `uxplay-beacon.py` (available in two versions, a BlueZ/DBus version
+ for Linux/\*BSD, and a winrt version for Windows). The beacon
+ runs independently of UxPlay: while UxPlay is running, it regularly broadcasts a Bluetooth LE ("Low Energy") 46 byte
+ legacy-type advertisement informing nearby iOS/macOS devices of
+ the local IPv4 network address of the UxPlay server, and which TCP port to contact UxPlay on. Instructions are [given below](#bluetooth-le-beacon-setup).
+
+- option `-vrtp ` bypasses rendering by UxPlay, and instead
transmits rtp packets of decrypted h264 or h265 video to
an external renderer (e.g. OBS Studio) at an address specified in `rest-of-pipeline`.
(Note: this is video only, an option "-rtp" which muxes audio and video into a mpeg4 container still needs to be created:
Pull Requests welcomed).
-- **NEW on github**: (for Linux/*BSD Desktop Environments using D-Bus). New option `-scrsv ` provides screensaver inhibition (e.g., to
+- (for Linux/*BSD Desktop Environments using D-Bus). New option `-scrsv ` provides screensaver inhibition (e.g., to
prevent screensaver function while watching mirrored videos without keyboard or mouse
activity): n = 0 (off) n=1 (on during video activity) n=2 (always on while UxPlay is running).
Tested on Gnome/KDE/Cinnamon/Mate/Xfce 4: may need adjustment for other Desktop Environments (please report).
(watch output of `dbus-monitor` to verify that inhibition is working). _Might not work on Wayland_.
-- **NEW on github**: option -ca (with no filename given) will now render
+- option -ca (with no filename given) will now render
Apple Music cover art (in audio-only mode) inside
UxPlay. (-ca `` will continue to export cover art for
display by an external viewer).
-- **NEW in v1.72**: Improved Support for (YouTube) HLS (HTTP Live Streaming)
+- Improved Support for (YouTube) HLS (HTTP Live Streaming)
video with the new "-hls" option (introduced in 1.71).* **Only streaming from the YouTube iOS app
(in \"m3u8\" protocol) is currently supported**: (streaming using the AirPlay icon in a browser window
is **not** yet supported).Click on the airplay icon in the
@@ -39,21 +42,14 @@
**Please report any issues with this new feature of UxPlay**.
_The default video player for HLS is
- GStreamer playbin v3: use "-hls 2" to revert to playbin v2 if
+ GStreamer playbin v3: use "-hls 2" to revert to the older GStreamer player playbin v2 if
some videos fail to play_.
- * user-requested features: added support for setting a password (as an alternative to on-screen
- pin codes) to control client access (-pw option, see "man pw" or this README for details); added support for
- setting initial client audio-streaming volume (-vol option), and output of audio-mode
- metadata to file (for display by some external process, -md option).
+- user-requested features: added support for setting a password (as an alternative to on-screen
+ pin codes) to control client access (-pw option, see "man pw" or this README for details); added support for
+ setting initial client audio-streaming volume (-vol option), and output of audio-mode
+ metadata to file (for display by some external process, -md option).
- **ISSUES** ***(Please help to solve if you have expertise)***
-
- * in HLS video streaming from the YouTube app (-hls option), rendered using GStreamer's media player "playbin3" (or playbin2, with option -hls 2),
- we don't understand how to correctly deal with "interstitials" (= 15 sec commercials) when "skip" is pressed on the client.
- (HLS is handled by handlers in lib/http_handlers.h). (Should response to HTTP requests POST /action (playlistRemove) and POST
- /Stop be modified? _Wireshark data from HLS on an AppleTV model 3 with UN-upgraded original OS (unencrypted communications) could be useful!_
-
## Highlights:
- GPLv3, open source.
@@ -502,11 +498,10 @@ plugins may need to be installed, depending on how your audio is set up.
available for hardware-accelerated h264 video decoding by Intel or AMD
graphics (but not for use with NVIDIA using proprietary drivers).
However this package contains older drivers (vaapisink, vaapih264dec, etc)
-that are no longer developed. This package is no longer recommended, and
-and its contents have been superseded by new VA-API drivers
-(vah264dec, etc.) that are supplied in "**plugins-bad**"; there is no
-replacement for vaapisink: use glimagesink or xvimagesink, or just let
-autovideosink choose for you.
+that are no longer developed, **and should not be installed unless these needed**.
+The "va" plugins (vah264dec, etc.) that replace the "vaapi" plugins are provided in "**plugins-bad**":
+and use standard videosinks (xvimagesink, glimagesink, etc.) instead of the
+special videosink "vaapisink" used by "vaapi" plugins.
- Also install "**gstreamer1.0-tools**" to get the utility
@@ -517,13 +512,13 @@ autovideosink choose for you.
In some cases, because of patent issues, the libav plugin feature
**avdec_aac** needed for decoding AAC audio in mirror mode is not
provided in the official distribution: get it from community
-repositories for those distributions. _Note: the "vaapi" packages listed below
+repositories for those distributions. _Note: the (deprecated) "vaapi" packages listed below
are no longer recommended: newer "va" versions of the VA-API plugins for Intel/AMD graphics
-are provided by *-plugins-bad_
+are provided by *-plugins-bad._
- **Red Hat, or clones like CentOS (now continued as Rocky Linux or
Alma Linux):** Install gstreamer1-libav gstreamer1-plugins-bad-free
- (+gstreamer1-vaapi for Intel/AMD graphics). In recent Fedora,
+ (_deprecated:_ gstreamer1-vaapi for Intel/AMD graphics). In recent Fedora,
gstreamer1-libav is renamed gstreamer1-plugin-libav. **To get
avdec_aac, install packages from
[rpmfusion.org](https://rpmfusion.org)**: (get ffmpeg-libs from
@@ -531,25 +526,25 @@ are provided by *-plugins-bad_
gstreamer1-libav from there).
- **Mageia, PCLinuxOS, OpenMandriva:** Install gstreamer1.0-libav
- gstreamer1.0-plugins-bad (gstreamer1.0-vaapi for Intel/AMD
+ gstreamer1.0-plugins-bad (_deprecated:_ gstreamer1.0-vaapi for Intel/AMD
graphics). **On Mageia, to get avdec_aac, install ffmpeg from the
"tainted" repository**, (which also provides a more complete
gstreamer1.0-plugins-bad).
- **openSUSE:** Install gstreamer-plugins-libav gstreamer-plugins-bad
- (+ gstreamer-plugins-vaapi for Intel/AMD graphics). **To get
+ (_deprecated:_ gstreamer-plugins-vaapi for Intel/AMD graphics). **To get
avdec_aac, install libav\* packages for openSUSE from
[Packman](https://ftp.gwdg.de/pub/linux/misc/packman/suse/)
"Essentials"**; recommendation: after adding the Packman repository,
use the option in YaST Software management to switch all system
packages for multimedia to Packman).
-- **Arch Linux** Install gst-plugins-good gst-plugins-bad gst-libav (+
+- **Arch Linux** Install gst-plugins-good gst-plugins-bad gst-libav (_deprecated:_
gstreamer-vaapi for Intel/AMD graphics).
- **FreeBSD:** Install gstreamer1-libav, gstreamer1-plugins,
gstreamer1-plugins-\* (\* = core, good, bad, x, gtk, gl, vulkan,
- pulse, v4l2, ...), (+ gstreamer1-vaapi for Intel/AMD graphics).
+ pulse, v4l2, ...), (_deprecated:_ gstreamer1-vaapi for Intel/AMD graphics).
- **OpenBSD:** Install gstreamer1-libav, gstreamer-plugins-\*
(\* = core, bad, base, good).
@@ -685,13 +680,13 @@ what is available. Some possibilites on Linux/\*BSD are:
- **kmssink**, **fbdevsink** (console graphics without X11)
-- **vaapisink** (for Intel/AMD hardware-accelerated graphics) is obsolete:
- instead use "`-vd vah264dec`" (or "vah265dec") with glimagesink or xvmagesink.
+- **vaapisink** (_deprecated_,for Intel/AMD hardware-accelerated graphics) is obsolete:
+ instead use **glimagesink** or **xvmagesink** (with hardware decoding by "vah264dec`,
+ which may get selected automatically, but can be explicitly specified with the "-vd " option.)
- for
NVIDIA hardware graphics (with CUDA) use **glimagesink** combined
- with "`-vd nvh264dec`" (or "nvh264sldec", a new variant which will
- become "nvh264dec" in GStreamer-1.24).
+ with "`-vd nvh264dec`".
- If the server is "headless" (no attached monitor, renders audio
only) use `-vs 0`.
@@ -1057,9 +1052,9 @@ To enter UTF-8 characters in the MSYS2 or other Windows terminals, use the numer
with "Num Lock" on: while holding down the "Alt" key, type "+" on the keypad, followed
by the UTF-8 hex code for the character (using the keypad for numbers), then release the "Alt" key.
(The UTF-8 hex codes have 4 hex digits: for example, the "copyright" symbol has hex code 00a9.)
-This method must be activated in the Windows Registry: using
+_This method must be activated in the Windows Registry: using
regedit, find the Registry section 'HKEY_Current_User/Control Panel/Input Method",
-and add a new Key "EnableHexNumpad" with value "1", then reboot the computer.
+and add a new Key "EnableHexNumpad" with value "1", then reboot the computer._
# Usage
@@ -1108,11 +1103,11 @@ is the recommended player, but if some videos fail to play, you can try
with version 2.)_
**-lang \[list\]** Specify language preferences for YouTube app HLS videos,
-which may offer a choice of language (based on AI dubbing). If this option is not
+some of which now which offer a choice of language (based on AI dubbing). If this option is not
used, preferences will be taken from environment variable $LANGUAGE, if set. Both
-methods specify the preference order as e.g. list = `fr:es:en`, fot French (first
-choice), Spanish (second choice), and English (third choice).
-If "list" is not given (or list = 0), $LANGUAGE is ignored and undubbed audio is played.
+methods specify the preference order by a list: e.g., `fr:es:en`, for French (first
+choice), Spanish (second choice), and English (third choice). If option `-lang` is not
+followed by a list (or `-list 0` is used), $LANGUAGE is ignored and undubbed audio is played.
**-scrsv n**. (since 1.73) (So far, only implemented
@@ -1536,8 +1531,8 @@ sudo apt install python3-gi python3-dbus python3-psutil
For Windows support on MSYS2 UCRT systems, use pacman -S to
install `mingw-w64-ucrt-x86_64-python`, ``*-python-gobject``,
-`*-python-psutil`, and ``*-python-pip``. Then install winrt
-bindings `pip install winrt-Windows.Foundation.Collections`,
+`*-python-psutil`, and ``*-python-pip``. Then install **winrt**
+bindings: "`pip install winrt-Windows.Foundation.Collections`", also
``winrt-Windows.Devices.Bluetooth.Advertisement`` and
``winrt-Windows.Storage.Streams``.
@@ -1556,21 +1551,21 @@ options. Get help with `man uxplay-beacon` or ``uxplay-beacon.py --help``. Op
`~/.uxplay.beacon`.
* `--ipv4 `. This option can be used to specify the ipv4 address at which the UxPlay server should be contacted by the client. If
-it is not given, an address will be obtained automatically using `gethostbyname`. Only ipv4 addresses are supported.
+it is not given, an address will be obtained automatically (specify the address with the option if automatic selection fails). Only ipv4 addresses are supported.
* `--path `. This overrides the default choice of BLE data file (``~/.uxplay.ble``) that is monitored by the beacon script. This also requires
that uxplay is run with option "`uxplay -ble `".
-The BlueZ/Dbus version has thee more options not offered by the Windows version:
+The BlueZ/Dbus version has thee more options not offered by the Windows version (the Windows operating system chooses their values):
* `--AdvMin x`, ``--AdvMax y``. These controls the interval between BLE advertisement broadcasts. This interval is in the range
[x, y], given in units of msecs. Allowed ranges are 100 <= x <= y <= 10240. If AdvMin=AdvMax, the interval is fixed: if AdvMin < AdvMax
it is chosen flexibly in this range to avoid interfering with other tasks the Bluetooth device is carrying out. The default values are
AdvMin = AdvMax = 100. The advertisement is broadcast on all three Bluetooth LE advertising channels: 37,38,39.
-* `--index x` (default x = 0, x >= 0). This should be used to distinguish between multiple simultaneous instances of uxplay-beacon.py that are running to support multiple
+* `--index x` (default x = 0, x >= 0). This can be used by the DBus to distinguish between multiple simultaneous instances of uxplay-beacon.py that are running to support multiple
instances of UxPlay. Each instance must have its own BLE Data file (just as each instance of UxPlay must also have its own MAC address and ports). _Note:
- running multiple beacons simultaneously on the same host has not been tested._
+ running multiple beacons simultaneously on the same host has not been tested, and this option might not be useful or needed._
If you wish to test Bluetooth LE Service Discovery on Linux/*BSD, you can disable DNS_SD Service discovery by the avahi-daemon with
@@ -1934,9 +1929,11 @@ introduced 2017, running tvOS 12.2.1), so it does not seem to matter
what version UxPlay claims to be.
# Changelog
-xxxx 2025-09-25 Render Audio cover-art inside UxPlay with -ca option (no file
+1.73 2025-11-10 Render Audio cover-art inside UxPlay with -ca option (no file
specified). (D-Bus based) option -scrsv to inhibit screensaver while UxPlay
-is running (Linux/*BSD only). Add support for Service Discovery using a
+is running (Linux/*BSD only). Add password support (-pw) using a displayed
+pin code as a password that changes every time (and not as a one-time
+pin). Add support for Service Discovery using a
Bluetooth LE beacon. Add -vrtp option for forwarding decrypted h264/5 video
to an external renderer (e.g., OBS Studio). Check that option input strings
have valid UTF-8 encoding. New option `-lang fr:es:en` to specify language
diff --git a/README.txt b/README.txt
index 9a55967..68fb83d 100644
--- a/README.txt
+++ b/README.txt
@@ -1,82 +1,70 @@
-# UxPlay 1.72: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (also runs on Windows).
+# UxPlay 1.73: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (also runs on Windows).
### **Now developed at the GitHub site (where ALL user issues should be posted, and latest versions can be found).**
--- **NEW on github**: some YouTube app HLS videos now offer alternative
-language tracks (generated by AI dubbing). Language choices will be made
-in order of preferences set with option -lang (or by environment
-variable \$LANGUAGE, which it overrides). Format is `-lang fr:es:en`,
-where French ("fr") is the first choice, if available, then Spanish
-("es"), etc. \$LANGUAGE has the same format. `-lang` by itself
-suppresses playing of dubbed audio.
+- **NEW in v1.73** (November 2025):
-- **NEW on github**: Support for **service discovery using a Bluetooth
- LE "beacon"** for both Linux/\*BSD and Windows (as an alternative to
- Bonjour/Rendezvous DNS-SD service discovery). The user must set up a
- Bluetooth LE "beacon", (a USB 4.0 or later "dongle" can be used).
- See instructions below. The beacon runs independently of UxPlay and
- regularly broadcasts a Bluetooth LE ("Low Energy") 46 byte packet
- informing nearby iOS/macOS devices of the local IPv4 network address
- of the UxPlay server, and which TCP port to contact UxPlay on. Two
- versions of a Python script (Python \>=3.6) "uxplay-beacon.py", (one
- for Linux/\*BSD using BlueZ LEAdvertisingManager1 with DBus, and one
- for Windows using winrt/BluetoothLEAdvertisementPublisher) are ready
- for users to run: the appropriate version will be installed when
- UxPlay is built. They independently run Service-Discovery beacons
- that iOS devices respond to. Instructions are [given
+- Some YouTube app HLS videos now offer alternative language tracks
+ (generated by AI dubbing). Language choices will be made in order of
+ preferences set with option -lang (or by environment variable
+ \$LANGUAGE, which "-lang" overrides). Format is `-lang fr:es:en`,
+ where French ("fr") is the first choice, if available, then Spanish
+ ("es"), etc. \$LANGUAGE has the same format: `-lang` (by itself)
+ suppresses playing of dubbed audio if \$LANGUAGE is set.
+
+- Support for **service discovery using a Bluetooth LE "beacon"** for
+ both Linux/\*BSD and Windows (as an alternative to
+ Bonjour/Rendezvous DNS-SD service discovery). **This can be used on
+ networks that do not allow the user to run a DNS_SD service.** The
+ user must run a Bluetooth LE "beacon", (a USB 4.0 or later "dongle"
+ can be used). The beacon is managed by a Python3 script
+ `uxplay-beacon.py` (available in two versions, a BlueZ/DBus version
+ for Linux/\*BSD, and a winrt version for Windows). The beacon runs
+ independently of UxPlay: while UxPlay is running, it regularly
+ broadcasts a Bluetooth LE ("Low Energy") 46 byte legacy-type
+ advertisement informing nearby iOS/macOS devices of the local IPv4
+ network address of the UxPlay server, and which TCP port to contact
+ UxPlay on. Instructions are [given
below](#bluetooth-le-beacon-setup).
-- **NEW on github**: option `-vrtp ` bypasses
- rendering by UxPlay, and instead transmits rtp packets of decrypted
- h264 or h265 video to an external renderer (e.g. OBS Studio) at an
- address specified in `rest-of-pipeline`. (Note: this is video only,
- an option "-rtp" which muxes audio and video into a mpeg4 container
- still needs to be created: Pull Requests welcomed).
+- option `-vrtp ` bypasses rendering by UxPlay, and
+ instead transmits rtp packets of decrypted h264 or h265 video to an
+ external renderer (e.g. OBS Studio) at an address specified in
+ `rest-of-pipeline`. (Note: this is video only, an option "-rtp"
+ which muxes audio and video into a mpeg4 container still needs to be
+ created: Pull Requests welcomed).
-- **NEW on github**: (for Linux/\*BSD Desktop Environments using
- D-Bus). New option `-scrsv ` provides screensaver inhibition
- (e.g., to prevent screensaver function while watching mirrored
- videos without keyboard or mouse activity): n = 0 (off) n=1 (on
- during video activity) n=2 (always on while UxPlay is running).
- Tested on Gnome/KDE/Cinnamon/Mate/Xfce 4: may need adjustment for
- other Desktop Environments (please report). (watch output of
+- (for Linux/\*BSD Desktop Environments using D-Bus). New option
+ `-scrsv ` provides screensaver inhibition (e.g., to prevent
+ screensaver function while watching mirrored videos without keyboard
+ or mouse activity): n = 0 (off) n=1 (on during video activity) n=2
+ (always on while UxPlay is running). Tested on
+ Gnome/KDE/Cinnamon/Mate/Xfce 4: may need adjustment for other
+ Desktop Environments (please report). (watch output of
`dbus-monitor` to verify that inhibition is working). *Might not
work on Wayland*.
-- **NEW on github**: option -ca (with no filename given) will now
- render Apple Music cover art (in audio-only mode) inside UxPlay.
- (-ca `` will continue to export cover art for display by
- an external viewer).
+- option -ca (with no filename given) will now render Apple Music
+ cover art (in audio-only mode) inside UxPlay. (-ca `` will
+ continue to export cover art for display by an external viewer).
-- **NEW in v1.72**: Improved Support for (YouTube) HLS (HTTP Live
- Streaming) video with the new "-hls" option (introduced in 1.71).\*
- **Only streaming from the YouTube iOS app (in \"m3u8\" protocol) is
- currently supported**: (streaming using the AirPlay icon in a
- browser window is **not** yet supported).Click on the airplay icon
- in the YouTube app to stream video. **Please report any issues with
- this new feature of UxPlay**.
+- Improved Support for (YouTube) HLS (HTTP Live Streaming) video with
+ the new "-hls" option (introduced in 1.71).\* **Only streaming from
+ the YouTube iOS app (in \"m3u8\" protocol) is currently supported**:
+ (streaming using the AirPlay icon in a browser window is **not** yet
+ supported).Click on the airplay icon in the YouTube app to stream
+ video. **Please report any issues with this new feature of UxPlay**.
*The default video player for HLS is GStreamer playbin v3: use "-hls
- 2" to revert to playbin v2 if some videos fail to play*.
+ 2" to revert to the older GStreamer player playbin v2 if some videos
+ fail to play*.
- - user-requested features: added support for setting a password
- (as an alternative to on-screen pin codes) to control client
- access (-pw option, see "man pw" or this README for details);
- added support for setting initial client audio-streaming volume
- (-vol option), and output of audio-mode metadata to file (for
- display by some external process, -md option).
-
- **ISSUES** ***(Please help to solve if you have expertise)***
-
- - in HLS video streaming from the YouTube app (-hls option),
- rendered using GStreamer's media player "playbin3" (or playbin2,
- with option -hls 2), we don't understand how to correctly deal
- with "interstitials" (= 15 sec commercials) when "skip" is
- pressed on the client. (HLS is handled by handlers in
- lib/http_handlers.h). (Should response to HTTP requests POST
- /action (playlistRemove) and POST /Stop be modified? *Wireshark
- data from HLS on an AppleTV model 3 with UN-upgraded original OS
- (unencrypted communications) could be useful!*
+- user-requested features: added support for setting a password (as an
+ alternative to on-screen pin codes) to control client access (-pw
+ option, see "man pw" or this README for details); added support for
+ setting initial client audio-streaming volume (-vol option), and
+ output of audio-mode metadata to file (for display by some external
+ process, -md option).
## Highlights:
@@ -531,12 +519,12 @@ need to be installed, depending on how your audio is set up.
- A package "**vaapi**" is available for hardware-accelerated h264
video decoding by Intel or AMD graphics (but not for use with NVIDIA
using proprietary drivers). However this package contains older
- drivers (vaapisink, vaapih264dec, etc) that are no longer developed.
- This package is no longer recommended, and and its contents have
- been superseded by new VA-API drivers (vah264dec, etc.) that are
- supplied in "**plugins-bad**"; there is no replacement for
- vaapisink: use glimagesink or xvimagesink, or just let autovideosink
- choose for you.
+ drivers (vaapisink, vaapih264dec, etc) that are no longer developed,
+ **and should not be installed unless these needed**. The "va"
+ plugins (vah264dec, etc.) that replace the "vaapi" plugins are
+ provided in "**plugins-bad**": and use standard videosinks
+ (xvimagesink, glimagesink, etc.) instead of the special videosink
+ "vaapisink" used by "vaapi" plugins.
- Also install "**gstreamer1.0-tools**" to get the utility
gst-inspect-1.0 for examining the GStreamer installation.
@@ -546,39 +534,41 @@ need to be installed, depending on how your audio is set up.
In some cases, because of patent issues, the libav plugin feature
**avdec_aac** needed for decoding AAC audio in mirror mode is not
provided in the official distribution: get it from community
-repositories for those distributions. \_Note: the "vaapi" packages
-listed below are no longer recommended: newer "va" versions of the
-VA-API plugins for Intel/AMD graphics are provided by \*-plugins-bad\_
+repositories for those distributions. \_Note: the (deprecated) "vaapi"
+packages listed below are no longer recommended: newer "va" versions of
+the VA-API plugins for Intel/AMD graphics are provided by
+\*-plugins-bad.\_
- **Red Hat, or clones like CentOS (now continued as Rocky Linux or
Alma Linux):** Install gstreamer1-libav gstreamer1-plugins-bad-free
- (+gstreamer1-vaapi for Intel/AMD graphics). In recent Fedora,
- gstreamer1-libav is renamed gstreamer1-plugin-libav. **To get
- avdec_aac, install packages from
+ (*deprecated:* gstreamer1-vaapi for Intel/AMD graphics). In recent
+ Fedora, gstreamer1-libav is renamed gstreamer1-plugin-libav. **To
+ get avdec_aac, install packages from
[rpmfusion.org](https://rpmfusion.org)**: (get ffmpeg-libs from
rpmfusion; on RHEL or clones, but not recent Fedora, also get
gstreamer1-libav from there).
- **Mageia, PCLinuxOS, OpenMandriva:** Install gstreamer1.0-libav
- gstreamer1.0-plugins-bad (gstreamer1.0-vaapi for Intel/AMD
- graphics). **On Mageia, to get avdec_aac, install ffmpeg from the
- "tainted" repository**, (which also provides a more complete
- gstreamer1.0-plugins-bad).
+ gstreamer1.0-plugins-bad (*deprecated:* gstreamer1.0-vaapi for
+ Intel/AMD graphics). **On Mageia, to get avdec_aac, install ffmpeg
+ from the "tainted" repository**, (which also provides a more
+ complete gstreamer1.0-plugins-bad).
- **openSUSE:** Install gstreamer-plugins-libav gstreamer-plugins-bad
- (+ gstreamer-plugins-vaapi for Intel/AMD graphics). **To get
- avdec_aac, install libav\* packages for openSUSE from
+ (*deprecated:* gstreamer-plugins-vaapi for Intel/AMD graphics). **To
+ get avdec_aac, install libav\* packages for openSUSE from
[Packman](https://ftp.gwdg.de/pub/linux/misc/packman/suse/)
"Essentials"**; recommendation: after adding the Packman repository,
use the option in YaST Software management to switch all system
packages for multimedia to Packman).
-- **Arch Linux** Install gst-plugins-good gst-plugins-bad gst-libav (+
- gstreamer-vaapi for Intel/AMD graphics).
+- **Arch Linux** Install gst-plugins-good gst-plugins-bad gst-libav
+ (*deprecated:* gstreamer-vaapi for Intel/AMD graphics).
- **FreeBSD:** Install gstreamer1-libav, gstreamer1-plugins,
gstreamer1-plugins-\* (\* = core, good, bad, x, gtk, gl, vulkan,
- pulse, v4l2, ...), (+ gstreamer1-vaapi for Intel/AMD graphics).
+ pulse, v4l2, ...), (*deprecated:* gstreamer1-vaapi for Intel/AMD
+ graphics).
- **OpenBSD:** Install gstreamer1-libav, gstreamer-plugins-\* (\* =
core, bad, base, good).
@@ -714,13 +704,14 @@ what is available. Some possibilites on Linux/\*BSD are:
- **kmssink**, **fbdevsink** (console graphics without X11)
-- **vaapisink** (for Intel/AMD hardware-accelerated graphics) is
- obsolete: instead use "`-vd vah264dec`" (or "vah265dec") with
- glimagesink or xvmagesink.
+- **vaapisink** (*deprecated*,for Intel/AMD hardware-accelerated
+ graphics) is obsolete: instead use **glimagesink** or **xvmagesink**
+ (with hardware decoding by "vah264dec\`, which may get selected
+ automatically, but can be explicitly specified with the"-vd "
+ option.)
- for NVIDIA hardware graphics (with CUDA) use **glimagesink**
- combined with "`-vd nvh264dec`" (or "nvh264sldec", a new variant
- which will become "nvh264dec" in GStreamer-1.24).
+ combined with "`-vd nvh264dec`".
- If the server is "headless" (no attached monitor, renders audio
only) use `-vs 0`.
@@ -1095,10 +1086,10 @@ or other Windows terminals, use the numerical keypad with "Num Lock" on:
while holding down the "Alt" key, type "+" on the keypad, followed by
the UTF-8 hex code for the character (using the keypad for numbers),
then release the "Alt" key. (The UTF-8 hex codes have 4 hex digits: for
-example, the "copyright" symbol has hex code 00a9.) This method must be
+example, the "copyright" symbol has hex code 00a9.) *This method must be
activated in the Windows Registry: using regedit, find the Registry
section 'HKEY_Current_User/Control Panel/Input Method", and add a new
-Key "EnableHexNumpad" with value "1", then reboot the computer.
+Key "EnableHexNumpad" with value "1", then reboot the computer.*
# Usage
@@ -1145,13 +1136,13 @@ to use for playing HLS video. *(Playbin v3 is the recommended player,
but if some videos fail to play, you can try with version 2.)*
**-lang \[list\]** Specify language preferences for YouTube app HLS
-videos, which may offer a choice of language (based on AI dubbing). If
-this option is not used, preferences will be taken from environment
-variable \$LANGUAGE, if set. Both methods specify the preference order
-as e.g. list = `fr:es:en`, fot French (first choice), Spanish (second
-choice), and English (third choice).\
-If "list" is not given (or list = 0), \$LANGUAGE is ignored and undubbed
-audio is played.
+videos, some of which now which offer a choice of language (based on AI
+dubbing). If this option is not used, preferences will be taken from
+environment variable \$LANGUAGE, if set. Both methods specify the
+preference order by a list: e.g., `fr:es:en`, for French (first choice),
+Spanish (second choice), and English (third choice). If option `-lang`
+is not followed by a list (or `-list 0` is used), \$LANGUAGE is ignored
+and undubbed audio is played.
**-scrsv n**. (since 1.73) (So far, only implemented on Linux/\*BSD
systems using D-Bus). Inhibit the screensaver in the absence of keyboard
@@ -1568,8 +1559,8 @@ systems:
For Windows support on MSYS2 UCRT systems, use pacman -S to install
`mingw-w64-ucrt-x86_64-python`, `*-python-gobject`, `*-python-psutil`,
-and `*-python-pip`. Then install winrt bindings
-`pip install winrt-Windows.Foundation.Collections`,
+and `*-python-pip`. Then install **winrt** bindings:
+"`pip install winrt-Windows.Foundation.Collections`", also
`winrt-Windows.Devices.Bluetooth.Advertisement` and
`winrt-Windows.Storage.Streams`.
@@ -1598,8 +1589,8 @@ are
- `--ipv4 `. This option can be used to specify the
ipv4 address at which the UxPlay server should be contacted by the
client. If it is not given, an address will be obtained
- automatically using `gethostbyname`. Only ipv4 addresses are
- supported.
+ automatically (specify the address with the option if automatic
+ selection fails). Only ipv4 addresses are supported.
- `--path `. This overrides the default choice of BLE
data file (`~/.uxplay.ble`) that is monitored by the beacon script.
@@ -1607,7 +1598,7 @@ are
"`uxplay -ble `".
The BlueZ/Dbus version has thee more options not offered by the Windows
-version:
+version (the Windows operating system chooses their values):
- `--AdvMin x`, `--AdvMax y`. These controls the interval between BLE
advertisement broadcasts. This interval is in the range \[x, y\],
@@ -1618,13 +1609,13 @@ version:
are AdvMin = AdvMax = 100. The advertisement is broadcast on all
three Bluetooth LE advertising channels: 37,38,39.
-- `--index x` (default x = 0, x \>= 0). This should be used to
- distinguish between multiple simultaneous instances of
+- `--index x` (default x = 0, x \>= 0). This can be used by the DBus
+ to distinguish between multiple simultaneous instances of
uxplay-beacon.py that are running to support multiple instances of
UxPlay. Each instance must have its own BLE Data file (just as each
instance of UxPlay must also have its own MAC address and ports).
*Note: running multiple beacons simultaneously on the same host has
- not been tested.*
+ not been tested, and this option might not be useful or needed.*
If you wish to test Bluetooth LE Service Discovery on Linux/\*BSD, you
can disable DNS_SD Service discovery by the avahi-daemon with
@@ -1991,14 +1982,16 @@ what version UxPlay claims to be.
# Changelog
-xxxx 2025-09-25 Render Audio cover-art inside UxPlay with -ca option (no
+1.73 2025-11-10 Render Audio cover-art inside UxPlay with -ca option (no
file specified). (D-Bus based) option -scrsv ``{=html} to inhibit
-screensaver while UxPlay is running (Linux/\*BSD only). Add support for
-Service Discovery using a Bluetooth LE beacon. Add -vrtp option for
-forwarding decrypted h264/5 video to an external renderer (e.g., OBS
-Studio). Check that option input strings have valid UTF-8 encoding. New
-option `-lang fr:es:en` to specify language preferences for YouTube HLS
-videos when they offer a choice.
+screensaver while UxPlay is running (Linux/\*BSD only). Add password
+support (-pw) using a displayed pin code as a password that changes
+every time (and not as a one-time pin). Add support for Service
+Discovery using a Bluetooth LE beacon. Add -vrtp option for forwarding
+decrypted h264/5 video to an external renderer (e.g., OBS Studio). Check
+that option input strings have valid UTF-8 encoding. New option
+`-lang fr:es:en` to specify language preferences for YouTube HLS videos
+when they offer a choice.
1.72.2 2025-07-07 Fix bug (typo) in DNS_SD advertisement introduced with
-pw option. Update llhttp to v 9.3.0
diff --git a/uxplay.1 b/uxplay.1
index 4262660..b073422 100644
--- a/uxplay.1
+++ b/uxplay.1
@@ -1,11 +1,11 @@
-.TH UXPLAY "1" "2025-10-26" "UxPlay 1.72" "User Commands"
+.TH UXPLAY "1" "2025-11-10" "UxPlay 1.73" "User Commands"
.SH NAME
uxplay \- start AirPlay server
.SH SYNOPSIS
.B uxplay
[\fI\,-n name\/\fR] [\fI\,-s wxh\/\fR] [\fI\,-p \/\fR[\fI\,n\/\fR]] [more \fI OPTIONS \/\fR ...]
.SH DESCRIPTION
-UxPlay 1.72: An open\-source AirPlay mirroring (+ audio streaming) server:
+UxPlay 1.73: An open\-source AirPlay mirroring (+ audio streaming) server:
.SH OPTIONS
.TP
.B
diff --git a/uxplay.cpp b/uxplay.cpp
index 937ae81..3481e96 100644
--- a/uxplay.cpp
+++ b/uxplay.cpp
@@ -72,7 +72,7 @@
#endif
-#define VERSION "1.72"
+#define VERSION "1.73"
#define SECOND_IN_USECS 1000000
#define SECOND_IN_NSECS 1000000000UL
diff --git a/uxplay.spec b/uxplay.spec
index f484518..c33428e 100644
--- a/uxplay.spec
+++ b/uxplay.spec
@@ -1,5 +1,5 @@
Name: uxplay
-Version: 1.72.2
+Version: 1.73
Release: 1%{?dist}
%global gittag v%{version}
@@ -136,6 +136,8 @@ cd build
%{_docdir}/%{name}/llhttp/LICENSE-MIT
%changelog
+* Mon Nov 10 2025 UxPlay maintainer
+ Update for 1.73 release
* Mon Jul 7 2025 UxPlay maintainer
Update for 1.72.2 release
* Fri Nov 15 2024 UxPlay maintainer