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:
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,21 +42,14 @@
|
||||
**Please report any issues with this new feature of UxPlay**.
|
||||
|
||||
_The default video player for HLS is
|
||||
GStreamer playbin v3: use "-hls 2" to revert to playbin v2 if
|
||||
GStreamer playbin v3: use "-hls 2" to revert to the older GStreamer player playbin v2 if
|
||||
some videos fail to play_.
|
||||
|
||||
* user-requested features: added support for setting a password (as an alternative to on-screen
|
||||
pin codes) to control client access (-pw option, see "man pw" or this README for details); added support for
|
||||
setting initial client audio-streaming volume (-vol option), and output of audio-mode
|
||||
metadata to file (for display by some external process, -md option).
|
||||
- user-requested features: added support for setting a password (as an alternative to on-screen
|
||||
pin codes) to control client access (-pw option, see "man pw" or this README for details); added support for
|
||||
setting initial client audio-streaming volume (-vol option), and output of audio-mode
|
||||
metadata to file (for display by some external process, -md option).
|
||||
|
||||
**ISSUES** ***(Please help to solve if you have expertise)***
|
||||
|
||||
* in HLS video streaming from the YouTube app (-hls option), rendered using GStreamer's media player "playbin3" (or playbin2, with option -hls 2),
|
||||
we don't understand how to correctly deal with "interstitials" (= 15 sec commercials) when "skip" is pressed on the client.
|
||||
(HLS is handled by handlers in lib/http_handlers.h). (Should response to HTTP requests POST /action (playlistRemove) and POST
|
||||
/Stop be modified? _Wireshark data from HLS on an AppleTV model 3 with UN-upgraded original OS (unencrypted communications) could be useful!_
|
||||
|
||||
## Highlights:
|
||||
|
||||
- GPLv3, open source.
|
||||
@@ -502,11 +498,10 @@ plugins may need to be installed, depending on how your audio is set up.
|
||||
available for hardware-accelerated h264 video decoding by Intel or AMD
|
||||
graphics (but not for use with NVIDIA using proprietary drivers).
|
||||
However this package contains older drivers (vaapisink, vaapih264dec, etc)
|
||||
that are no longer developed. This package is no longer recommended, and
|
||||
and its contents have been superseded by new VA-API drivers
|
||||
(vah264dec, etc.) that are supplied in "**plugins-bad**"; there is no
|
||||
replacement for vaapisink: use glimagesink or xvimagesink, or just let
|
||||
autovideosink choose for you.
|
||||
that are no longer developed, **and should not be installed unless these needed**.
|
||||
The "va" plugins (vah264dec, etc.) that replace the "vaapi" plugins are provided in "**plugins-bad**":
|
||||
and use standard videosinks (xvimagesink, glimagesink, etc.) instead of the
|
||||
special videosink "vaapisink" used by "vaapi" plugins.
|
||||
|
||||
|
||||
- Also install "**gstreamer1.0-tools**" to get the utility
|
||||
@@ -517,13 +512,13 @@ autovideosink choose for you.
|
||||
In some cases, because of patent issues, the libav plugin feature
|
||||
**avdec_aac** needed for decoding AAC audio in mirror mode is not
|
||||
provided in the official distribution: get it from community
|
||||
repositories for those distributions. _Note: the "vaapi" packages listed below
|
||||
repositories for those distributions. _Note: the (deprecated) "vaapi" packages listed below
|
||||
are no longer recommended: newer "va" versions of the VA-API plugins for Intel/AMD graphics
|
||||
are provided by *-plugins-bad_
|
||||
are provided by *-plugins-bad._
|
||||
|
||||
- **Red Hat, or clones like CentOS (now continued as Rocky Linux or
|
||||
Alma Linux):** Install gstreamer1-libav gstreamer1-plugins-bad-free
|
||||
(+gstreamer1-vaapi for Intel/AMD graphics). In recent Fedora,
|
||||
(_deprecated:_ gstreamer1-vaapi for Intel/AMD graphics). In recent Fedora,
|
||||
gstreamer1-libav is renamed gstreamer1-plugin-libav. **To get
|
||||
avdec_aac, install packages from
|
||||
[rpmfusion.org](https://rpmfusion.org)**: (get ffmpeg-libs from
|
||||
@@ -531,25 +526,25 @@ are provided by *-plugins-bad_
|
||||
gstreamer1-libav from there).
|
||||
|
||||
- **Mageia, PCLinuxOS, OpenMandriva:** Install gstreamer1.0-libav
|
||||
gstreamer1.0-plugins-bad (gstreamer1.0-vaapi for Intel/AMD
|
||||
gstreamer1.0-plugins-bad (_deprecated:_ gstreamer1.0-vaapi for Intel/AMD
|
||||
graphics). **On Mageia, to get avdec_aac, install ffmpeg from the
|
||||
"tainted" repository**, (which also provides a more complete
|
||||
gstreamer1.0-plugins-bad).
|
||||
|
||||
- **openSUSE:** Install gstreamer-plugins-libav gstreamer-plugins-bad
|
||||
(+ gstreamer-plugins-vaapi for Intel/AMD graphics). **To get
|
||||
(_deprecated:_ gstreamer-plugins-vaapi for Intel/AMD graphics). **To get
|
||||
avdec_aac, install libav\* packages for openSUSE from
|
||||
[Packman](https://ftp.gwdg.de/pub/linux/misc/packman/suse/)
|
||||
"Essentials"**; recommendation: after adding the Packman repository,
|
||||
use the option in YaST Software management to switch all system
|
||||
packages for multimedia to Packman).
|
||||
|
||||
- **Arch Linux** Install gst-plugins-good gst-plugins-bad gst-libav (+
|
||||
- **Arch Linux** Install gst-plugins-good gst-plugins-bad gst-libav (_deprecated:_
|
||||
gstreamer-vaapi for Intel/AMD graphics).
|
||||
|
||||
- **FreeBSD:** Install gstreamer1-libav, gstreamer1-plugins,
|
||||
gstreamer1-plugins-\* (\* = core, good, bad, x, gtk, gl, vulkan,
|
||||
pulse, v4l2, ...), (+ gstreamer1-vaapi for Intel/AMD graphics).
|
||||
pulse, v4l2, ...), (_deprecated:_ gstreamer1-vaapi for Intel/AMD graphics).
|
||||
|
||||
- **OpenBSD:** Install gstreamer1-libav, gstreamer-plugins-\*
|
||||
(\* = core, bad, base, good).
|
||||
@@ -685,13 +680,13 @@ what is available. Some possibilites on Linux/\*BSD are:
|
||||
|
||||
- **kmssink**, **fbdevsink** (console graphics without X11)
|
||||
|
||||
- **vaapisink** (for Intel/AMD hardware-accelerated graphics) is obsolete:
|
||||
instead use "`-vd vah264dec`" (or "vah265dec") with glimagesink or xvmagesink.
|
||||
- **vaapisink** (_deprecated_,for Intel/AMD hardware-accelerated graphics) is obsolete:
|
||||
instead use **glimagesink** or **xvmagesink** (with hardware decoding by "vah264dec`,
|
||||
which may get selected automatically, but can be explicitly specified with the "-vd " option.)
|
||||
|
||||
- for
|
||||
NVIDIA hardware graphics (with CUDA) use **glimagesink** combined
|
||||
with "`-vd nvh264dec`" (or "nvh264sldec", a new variant which will
|
||||
become "nvh264dec" in GStreamer-1.24).
|
||||
with "`-vd nvh264dec`".
|
||||
|
||||
- If the server is "headless" (no attached monitor, renders audio
|
||||
only) use `-vs 0`.
|
||||
@@ -1057,9 +1052,9 @@ To enter UTF-8 characters in the MSYS2 or other Windows terminals, use the numer
|
||||
with "Num Lock" on: while holding down the "Alt" key, type "+" on the keypad, followed
|
||||
by the UTF-8 hex code for the character (using the keypad for numbers), then release the "Alt" key.
|
||||
(The UTF-8 hex codes have 4 hex digits: for example, the "copyright" symbol has hex code 00a9.)
|
||||
This method must be activated in the Windows Registry: using
|
||||
_This method must be activated in the Windows Registry: using
|
||||
regedit, find the Registry section 'HKEY_Current_User/Control Panel/Input Method",
|
||||
and add a new Key "EnableHexNumpad" with value "1", then reboot the computer.
|
||||
and add a new Key "EnableHexNumpad" with value "1", then reboot the computer._
|
||||
|
||||
|
||||
# Usage
|
||||
@@ -1108,11 +1103,11 @@ is the recommended player, but if some videos fail to play, you can try
|
||||
with version 2.)_
|
||||
|
||||
**-lang \[list\]** Specify language preferences for YouTube app HLS videos,
|
||||
which may offer a choice of language (based on AI dubbing). If this option is not
|
||||
some of which now which offer a choice of language (based on AI dubbing). If this option is not
|
||||
used, preferences will be taken from environment variable $LANGUAGE, if set. Both
|
||||
methods specify the preference order as e.g. list = `fr:es:en`, fot French (first
|
||||
choice), Spanish (second choice), and English (third choice).
|
||||
If "list" is not given (or list = 0), $LANGUAGE is ignored and undubbed audio is played.
|
||||
methods specify the preference order by a list: e.g., `fr:es:en`, for French (first
|
||||
choice), Spanish (second choice), and English (third choice). If option `-lang` is not
|
||||
followed by a list (or `-list 0` is used), $LANGUAGE is ignored and undubbed audio is played.
|
||||
|
||||
|
||||
**-scrsv n**. (since 1.73) (So far, only implemented
|
||||
@@ -1536,8 +1531,8 @@ sudo apt install python3-gi python3-dbus python3-psutil
|
||||
|
||||
For Windows support on MSYS2 UCRT systems, use pacman -S to
|
||||
install `mingw-w64-ucrt-x86_64-python`, ``*-python-gobject``,
|
||||
`*-python-psutil`, and ``*-python-pip``. Then install winrt
|
||||
bindings `pip install winrt-Windows.Foundation.Collections`,
|
||||
`*-python-psutil`, and ``*-python-pip``. Then install **winrt**
|
||||
bindings: "`pip install winrt-Windows.Foundation.Collections`", also
|
||||
``winrt-Windows.Devices.Bluetooth.Advertisement`` and
|
||||
``winrt-Windows.Storage.Streams``.
|
||||
|
||||
@@ -1556,21 +1551,21 @@ options. Get help with `man uxplay-beacon` or ``uxplay-beacon.py --help``. Op
|
||||
`~/.uxplay.beacon`.
|
||||
|
||||
* `--ipv4 <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
|
||||
|
||||
Reference in New Issue
Block a user