preparing for v1.73 release

This commit is contained in:
F. Duncanh
2025-11-10 18:03:28 -05:00
parent 1072692172
commit 3139992e1e
6 changed files with 283 additions and 300 deletions

View File

@@ -1,85 +1,70 @@
<h1
id="uxplay-1.72-airplay-mirror-and-airplay-audio-server-for-linux-macos-and-unix-also-runs-on-windows.">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).</h1>
<h3
id="now-developed-at-the-github-site-httpsgithub.comfdh2uxplay-where-all-user-issues-should-be-posted-and-latest-versions-can-be-found."><strong>Now
developed at the GitHub site <a href="https://github.com/FDH2/UxPlay"
class="uri">https://github.com/FDH2/UxPlay</a> (where ALL user issues
should be posted, and latest versions can be found).</strong></h3>
<p> <strong>NEW on github</strong>: 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
<code>-lang fr:es:en</code>, where French (“fr”) is the first choice, if
available, then Spanish (“es”), etc. $LANGUAGE has the same format.
<code>-lang</code> by itself suppresses playing of dubbed audio.</p>
<ul>
<li><p><strong>NEW on github</strong>: Support for <strong>service
discovery using a Bluetooth LE “beacon”</strong> 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 &gt;=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 <a href="#bluetooth-le-beacon-setup">given
<li><p><strong>NEW in v1.73</strong> (November 2025):</p></li>
<li><p>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 <code>-lang fr:es:en</code>, where
French (“fr”) is the first choice, if available, then Spanish (“es”),
etc. $LANGUAGE has the same format: <code>-lang</code> (by itself)
suppresses playing of dubbed audio if $LANGUAGE is set.</p></li>
<li><p>Support for <strong>service discovery using a Bluetooth LE
beacon”</strong> for both Linux/*BSD and Windows (as an alternative to
Bonjour/Rendezvous DNS-SD service discovery). <strong>This can be used
on networks that do not allow the user to run a DNS_SD service.</strong>
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
<code>uxplay-beacon.py</code> (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 <a href="#bluetooth-le-beacon-setup">given
below</a>.</p></li>
<li><p><strong>NEW on github</strong>: option
<code>-vrtp &lt;rest-of-pipeline&gt;</code> 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 <code>rest-of-pipeline</code>. (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).</p></li>
<li><p><strong>NEW on github</strong>: (for Linux/*BSD Desktop
Environments using D-Bus). New option <code>-scrsv &lt;n&gt;</code>
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
<code>dbus-monitor</code> to verify that inhibition is working).
<em>Might not work on Wayland</em>.</p></li>
<li><p><strong>NEW on github</strong>: option -ca (with no filename
given) will now render Apple Music cover art (in audio-only mode) inside
UxPlay. (-ca <code>&lt;filename&gt;</code> will continue to export cover
art for display by an external viewer).</p></li>
<li><p><strong>NEW in v1.72</strong>: Improved Support for (YouTube) HLS
(HTTP Live Streaming) video with the new “-hls” option (introduced in
1.71).* <strong>Only streaming from the YouTube iOS app (in "m3u8"
protocol) is currently supported</strong>: (streaming using the AirPlay
icon in a browser window is <strong>not</strong> yet supported).Click on
the airplay icon in the YouTube app to stream video. <strong>Please
report any issues with this new feature of UxPlay</strong>.</p>
<li><p>option <code>-vrtp &lt;rest-of-pipeline&gt;</code> 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 <code>rest-of-pipeline</code>. (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).</p></li>
<li><p>(for Linux/*BSD Desktop Environments using D-Bus). New option
<code>-scrsv &lt;n&gt;</code> 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 <code>dbus-monitor</code>
to verify that inhibition is working). <em>Might not work on
Wayland</em>.</p></li>
<li><p>option -ca (with no filename given) will now render Apple Music
cover art (in audio-only mode) inside UxPlay. (-ca
<code>&lt;filename&gt;</code> will continue to export cover art for
display by an external viewer).</p></li>
<li><p>Improved Support for (YouTube) HLS (HTTP Live Streaming) video
with the new “-hls” option (introduced in 1.71).* <strong>Only streaming
from the YouTube iOS app (in "m3u8" protocol) is currently
supported</strong>: (streaming using the AirPlay icon in a browser
window is <strong>not</strong> yet supported).Click on the airplay icon
in the YouTube app to stream video. <strong>Please report any issues
with this new feature of UxPlay</strong>.</p>
<p><em>The default video player for HLS is GStreamer playbin v3: use
“-hls 2” to revert to playbin v2 if some videos fail to play</em>.</p>
<ul>
<li>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</em>.</p></li>
<li><p>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).</li>
</ul>
<p><strong>ISSUES</strong> <strong><em>(Please help to solve if you have
expertise)</em></strong></p>
<ul>
<li>in HLS video streaming from the YouTube app (-hls option), rendered
using GStreamers media player “playbin3” (or playbin2, with option -hls
2), we dont 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? <em>Wireshark
data from HLS on an AppleTV model 3 with UN-upgraded original OS
(unencrypted communications) could be useful!</em></li>
</ul></li>
-md option).</p></li>
</ul>
<h2 id="highlights">Highlights:</h2>
<ul>
@@ -528,11 +513,11 @@ on how your audio is set up.</p>
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 “<strong>plugins-bad</strong>; there is no replacement for
vaapisink: use glimagesink or xvimagesink, or just let autovideosink
choose for you.</p></li>
developed, <strong>and should not be installed unless these
needed</strong>. The “va” plugins (vah264dec, etc.) that replace the
“vaapi” plugins are provided in “<strong>plugins-bad</strong>: and use
standard videosinks (xvimagesink, glimagesink, etc.) instead of the
special videosink “vaapisink” used by “vaapi” plugins.</p></li>
<li><p>Also install “<strong>gstreamer1.0-tools</strong>” to get the
utility gst-inspect-1.0 for examining the GStreamer
installation.</p></li>
@@ -544,38 +529,39 @@ complete GStreamer from source</em>)</h3>
<p>In some cases, because of patent issues, the libav plugin feature
<strong>avdec_aac</strong> 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_</p>
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._</p>
<ul>
<li><p><strong>Red Hat, or clones like CentOS (now continued as Rocky
Linux or Alma Linux):</strong> Install gstreamer1-libav
gstreamer1-plugins-bad-free (+gstreamer1-vaapi for Intel/AMD graphics).
In recent Fedora, gstreamer1-libav is renamed gstreamer1-plugin-libav.
<strong>To get avdec_aac, install packages from <a
href="https://rpmfusion.org">rpmfusion.org</a></strong>: (get
gstreamer1-plugins-bad-free (<em>deprecated:</em> gstreamer1-vaapi for
Intel/AMD graphics). In recent Fedora, gstreamer1-libav is renamed
gstreamer1-plugin-libav. <strong>To get avdec_aac, install packages from
<a href="https://rpmfusion.org">rpmfusion.org</a></strong>: (get
ffmpeg-libs from rpmfusion; on RHEL or clones, but not recent Fedora,
also get gstreamer1-libav from there).</p></li>
<li><p><strong>Mageia, PCLinuxOS, OpenMandriva:</strong> Install
gstreamer1.0-libav gstreamer1.0-plugins-bad (gstreamer1.0-vaapi for
Intel/AMD graphics). <strong>On Mageia, to get avdec_aac, install ffmpeg
from the “tainted” repository</strong>, (which also provides a more
complete gstreamer1.0-plugins-bad).</p></li>
gstreamer1.0-libav gstreamer1.0-plugins-bad (<em>deprecated:</em>
gstreamer1.0-vaapi for Intel/AMD graphics). <strong>On Mageia, to get
avdec_aac, install ffmpeg from the “tainted” repository</strong>, (which
also provides a more complete gstreamer1.0-plugins-bad).</p></li>
<li><p><strong>openSUSE:</strong> Install gstreamer-plugins-libav
gstreamer-plugins-bad (+ gstreamer-plugins-vaapi for Intel/AMD
graphics). <strong>To get avdec_aac, install libav* packages for
openSUSE from <a
gstreamer-plugins-bad (<em>deprecated:</em> gstreamer-plugins-vaapi for
Intel/AMD graphics). <strong>To get avdec_aac, install libav* packages
for openSUSE from <a
href="https://ftp.gwdg.de/pub/linux/misc/packman/suse/">Packman</a>
“Essentials”</strong>; recommendation: after adding the Packman
repository, use the option in YaST Software management to switch all
system packages for multimedia to Packman).</p></li>
<li><p><strong>Arch Linux</strong> Install gst-plugins-good
gst-plugins-bad gst-libav (+ gstreamer-vaapi for Intel/AMD
graphics).</p></li>
gst-plugins-bad gst-libav (<em>deprecated:</em> gstreamer-vaapi for
Intel/AMD graphics).</p></li>
<li><p><strong>FreeBSD:</strong> Install gstreamer1-libav,
gstreamer1-plugins, gstreamer1-plugins-* (* = core, good, bad, x, gtk,
gl, vulkan, pulse, v4l2, …), (+ gstreamer1-vaapi for Intel/AMD
graphics).</p></li>
gl, vulkan, pulse, v4l2, …), (<em>deprecated:</em> gstreamer1-vaapi for
Intel/AMD graphics).</p></li>
<li><p><strong>OpenBSD:</strong> Install gstreamer1-libav,
gstreamer-plugins-* (* = core, bad, base, good).</p></li>
</ul>
@@ -709,13 +695,14 @@ to see what is available. Some possibilites on Linux/*BSD are:</p>
(X11)</p></li>
<li><p><strong>kmssink</strong>, <strong>fbdevsink</strong> (console
graphics without X11)</p></li>
<li><p><strong>vaapisink</strong> (for Intel/AMD hardware-accelerated
graphics) is obsolete: instead use<code>-vd vah264dec</code>” (or
“vah265dec”) with glimagesink or xvmagesink.</p></li>
<li><p><strong>vaapisink</strong> (<em>deprecated</em>,for Intel/AMD
hardware-accelerated graphics) is obsolete: instead use
<strong>glimagesink</strong> or <strong>xvmagesink</strong> (with
hardware decoding by “vah264dec`, which may get selected automatically,
but can be explicitly specified with the”-vd ” option.)</p></li>
<li><p>for NVIDIA hardware graphics (with CUDA) use
<strong>glimagesink</strong> combined with<code>-vd nvh264dec</code>
(or “nvh264sldec”, a new variant which will become “nvh264dec” in
GStreamer-1.24).</p></li>
<strong>glimagesink</strong> combined with
<code>-vd nvh264dec</code>”.</p></li>
<li><p>If the server is “headless” (no attached monitor, renders audio
only) use <code>-vs 0</code>.</p></li>
</ul>
@@ -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.) <em>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.</p>
“EnableHexNumpad” with value “1”, then reboot the computer.</em></p>
<h1 id="usage">Usage</h1>
<p>Options:</p>
<ul>
@@ -1123,13 +1110,14 @@ video player to use for playing HLS video. <em>(Playbin v3 is the
recommended player, but if some videos fail to play, you can try with
version 2.)</em></p>
<p><strong>-lang [list]</strong> 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 = <code>fr:es:en</code>, fot French (first
choice), Spanish (second choice), and English (third choice).<br />
If “list” is not given (or list = 0), $LANGUAGE is ignored and undubbed
audio is played.</p>
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., <code>fr:es:en</code>, for
French (first choice), Spanish (second choice), and English (third
choice). If option <code>-lang</code> is not followed by a list (or
<code>-list 0</code> is used), $LANGUAGE is ignored and undubbed audio
is played.</p>
<p><strong>-scrsv n</strong>. (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:</p>
<p>For Windows support on MSYS2 UCRT systems, use pacman -S to install
<code>mingw-w64-ucrt-x86_64-python</code>,
<code>*-python-gobject</code>, <code>*-python-psutil</code>, and
<code>*-python-pip</code>. Then install winrt bindings
<code>pip install winrt-Windows.Foundation.Collections</code>,
<code>*-python-pip</code>. Then install <strong>winrt</strong> bindings:
<code>pip install winrt-Windows.Foundation.Collections</code>”, also
<code>winrt-Windows.Devices.Bluetooth.Advertisement</code> and
<code>winrt-Windows.Storage.Streams</code>.</p>
<p>If uxplay will be run with option “<code>uxplay -ble</code>” (so it
@@ -1545,15 +1533,15 @@ or <code>uxplay-beacon.py --help</code>. Options are</p>
<li><p><code>--ipv4 &lt;ipv4 address&gt;</code>. 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 <code>gethostbyname</code>. Only ipv4 addresses are
supported.</p></li>
automatically (specify the address with the option if automatic
selection fails). Only ipv4 addresses are supported.</p></li>
<li><p><code>--path &lt;BLE data file&gt;</code>. This overrides the
default choice of BLE data file (<code>~/.uxplay.ble</code>) that is
monitored by the beacon script. This also requires that uxplay is run
with option “<code>uxplay -ble &lt;BLE data file&gt;</code>”.</p></li>
</ul>
<p>The BlueZ/Dbus version has thee more options not offered by the
Windows version:</p>
Windows version (the Windows operating system chooses their values):</p>
<ul>
<li><p><code>--AdvMin x</code>, <code>--AdvMax y</code>. These controls
the interval between BLE advertisement broadcasts. This interval is in
@@ -1563,13 +1551,14 @@ AdvMin &lt; 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.</p></li>
<li><p><code>--index x</code> (default x = 0, x &gt;= 0). This should be
used to distinguish between multiple simultaneous instances of
uxplay-beacon.py that are running to support multiple instances of
<li><p><code>--index x</code> (default x = 0, x &gt;= 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).
<em>Note: running multiple beacons simultaneously on the same host has
not been tested.</em></p></li>
not been tested, and this option might not be useful or
needed.</em></p></li>
</ul>
<p>If you wish to test Bluetooth LE Service Discovery on Linux/*BSD, you
can disable DNS_SD Service discovery by the avahi-daemon with</p>
@@ -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.</p>
<h1 id="changelog">Changelog</h1>
<p>xxxx 2025-09-25 Render Audio cover-art inside UxPlay with -ca option
<p>1.73 2025-11-10 Render Audio cover-art inside UxPlay with -ca option
(no file specified). (D-Bus based) option -scrsv <n> 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 <code>-lang fr:es:en</code> to specify language preferences for
YouTube HLS videos when they offer a choice.</p>
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
<code>-lang fr:es:en</code> to specify language preferences for YouTube
HLS videos when they offer a choice.</p>
<p>1.72.2 2025-07-07 Fix bug (typo) in DNS_SD advertisement introduced
with -pw option. Update llhttp to v 9.3.0</p>
<p>1.72.1 2025-06-06 minor update: fix regression in -reg option; add