mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 16:24:29 +09:00
preparing for v1.73 release
This commit is contained in:
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
|
||||
|
||||
Reference in New Issue
Block a user