mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
preparing for v1.73 release
This commit is contained in:
239
README.html
239
README.html
@@ -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 >=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 <rest-of-pipeline></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 <n></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><filename></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 <rest-of-pipeline></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 <n></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><filename></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 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? <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 <ipv4 address></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 <BLE data file></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 <BLE data file></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 < 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 >= 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 >= 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
|
||||
|
||||
111
README.md
111
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 <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 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 <rest-of-pipeline>` 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 <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
|
||||
- (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
|
||||
- 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)
|
||||
- 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,20 +42,13 @@
|
||||
**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).
|
||||
|
||||
**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:
|
||||
|
||||
@@ -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 <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.
|
||||
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 <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:
|
||||
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 <n> 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
|
||||
|
||||
223
README.txt
223
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 <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 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 <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).
|
||||
- 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
|
||||
- (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).
|
||||
- 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**.
|
||||
- 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 <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.
|
||||
@@ -1607,7 +1598,7 @@ are
|
||||
"`uxplay -ble <BLE data file>`".
|
||||
|
||||
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 `<n>`{=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
|
||||
|
||||
4
uxplay.1
4
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
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
#endif
|
||||
|
||||
|
||||
#define VERSION "1.72"
|
||||
#define VERSION "1.73"
|
||||
|
||||
#define SECOND_IN_USECS 1000000
|
||||
#define SECOND_IN_NSECS 1000000000UL
|
||||
|
||||
@@ -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 <https://github.com/FDH2/UxPlay>
|
||||
Update for 1.73 release
|
||||
* Mon Jul 7 2025 UxPlay maintainer <https://github.com/FDH2/UxPlay>
|
||||
Update for 1.72.2 release
|
||||
* Fri Nov 15 2024 UxPlay maintainer <https://github.com/FDH2/UxPlay>
|
||||
|
||||
Reference in New Issue
Block a user