remove (show in -d mode only) terminal messages about connections

+edits to README
This commit is contained in:
fduncanh
2022-10-29 10:58:06 -04:00
parent 5d478b5a70
commit 4d3d0cffac
6 changed files with 186 additions and 129 deletions

View File

@@ -20,7 +20,7 @@ running UxPlay. Using AirPlay, UxPlay can emulate a second display for
macOS clients.</p></li>
<li><p>Support for older iOS clients (such as 32-bit iPad 2nd gen., iPod
Touch 5th gen. and iPhone 4S, when upgraded to iOS 9.3.5, or later
64-bit versions), plus a Windows AirPlay-client emulator,
64-bit devices), plus a Windows AirPlay-client emulator,
AirMyPC.</p></li>
<li><p>Uses GStreamer plugins for audio and video rendering (with
options to select different hardware-appropriate output “videosinks” and
@@ -30,10 +30,10 @@ pipeline).</p></li>
<li><p><strong>New</strong>: Support for Raspberry Pi, with hardware
video acceleration using Video4Linux2 (v4l2), which supports both 32-
and 64-bit systems: this is the replacement for 32-bit-only OpenMAX
(omx), for which support by RPi distributions is being discontinued.
(Until GStreamer 1.22 is released, a backport of changes from the
GStreamer development branch is needed: this has now been done by
Raspberry Pi OS (Bullseye); for other distributions a <a
(omx), no longer actively supported by RPi distributions. (Until
GStreamer 1.22 is released, a backport of changes from the GStreamer
development branch is needed: this has now been done by Raspberry Pi OS
(Bullseye); for other distributions a <a
href="https://github.com/FDH2/UxPlay/wiki/Gstreamer-Video4Linux2-plugin-patches">patch</a>
to the GStreamer Video4Linux2 plugin, available in the <a
href="https://github.com/FDH2/UxPlay/wiki">UxPlay Wiki</a>, is
@@ -293,6 +293,12 @@ prevents UxPlay from receiving client connection requests unless some
network ports are opened. See <a
href="#troubleshooting">Troubleshooting</a> below for help with this or
other problems.</p>
<ul>
<li>By default, UxPlay is locked to its current client until that client
drops the connection; the option <code>-nohold</code> modifies this
behavior so that when a new client requests a connection, it removes the
current client and takes over.</li>
</ul>
<p>To display the accompanying “Cover Art” from sources like Apple Music
in Audio-Only (ALAC) mode, run
<code>uxplay -ca &lt;name&gt; &amp;</code>” in the background, then run
@@ -313,12 +319,19 @@ instructions for Raspberry Pi (only tested on model 4B)</strong>:</h3>
<ul>
<li><p>For good performance, the Raspberry Pi needs the GStreamer
Video4linux2 plugin to use its Broadcom GPU hardware for decoding h264
video. You can also test UxPlay with software-only video decoding using
option <code>-avdec</code>.</p></li>
<li><p>The upcoming GStreamer-1.22 release will work well, but older
releases of GStreamer will not work unless patched with backports of the
improvements from GStreamer-1.22. Raspberry Pi OS (Bullseye) now has the
needed backports. For other distributions, patches for GStreamer are <a
video. The plugin accesses the GPU using the bcm2835_codec kernel module
which is maintained by Raspberry Pi in the drivers/staging/VC04_services
part of the <a href="https://github.com/raspberrypi/linux">Raspberry Pi
kernel tree</a>, but is not yet included in the mainline Linux kernel.
Distributions for R Pi that supply it include Raspberry Pi OS, Ubuntu,
and Manjaro. Some others may not. <strong>Without this kernel module,
UxPlay cannot use the GPU.</strong></p></li>
<li><p>The plugin in the upcoming GStreamer-1.22 release will work well,
but the one in older releases of GStreamer will not work unless patched
with backports of the improvements from GStreamer-1.22. Raspberry Pi OS
(Bullseye) now has a working backport. For a fuller backport, or for
other distributions, patches for the GStreamer Video4Linux2 plugin are
<a
href="https://github.com/FDH2/UxPlay/wiki/Gstreamer-Video4Linux2-plugin-patches">available
with instructions in the UxPlay Wiki</a>.</p></li>
</ul>
@@ -341,18 +354,18 @@ latest GStreamer patches from the Wiki, you will need to use the UxPlay
option <code>-bt709</code></strong>: previously the GStreamer v4l2
plugin could not recognise Apples color format (an unusual “full-range”
variant of the bt709 HDTV standard), which -bt709 fixes.
GStreamer-1.20.4 will have a fix for this, which is included in the
latest patches, so beginning with UxPlay-1.56, the bt709 fix is no
longer automatically applied. <strong>After a recent update, Raspberry
Pi OS (Bullseye) now supplies an already-patched GStreamer-1.18.4 that
works with UxPlay, but needs the <code>-bt709</code> option with
UxPlay-1.56 or later.</strong></p></li>
<li><p><strong>The option <code>-v4l2</code> (also <code>-rpi*</code>
options) causes a crash when the client screen is rotated, if used with
current Raspberry Pi OS version
gstreamer1.0-plugins-good-1.18.4-2+deb11u1+rpt1. Solution: dont use
these options, or apply the GStreamer backport patch from the UxPlay
Wiki.</strong></p></li>
GStreamer-1.20.4 has a fix for this, which is included in the latest
patches, so beginning with UxPlay-1.56, the bt709 fix is no longer
automatically applied.</p></li>
<li><p>As mentioned, <strong>Raspberry Pi OS (Bullseye) now supplies a
GStreamer-1.18.4 package with backports that works with UxPlay, but
needs the <code>-bt709</code> option with UxPlay-1.56 or later.</strong>
Although this Raspberry Pi OS package
gstreamer1.0-plugins-good-1.18.4-2+deb11u1+rpt1 works without having to
be patched, <strong>dont use options <code>-v4l2</code> and
<code>-rpi*</code> with it, as they cause a crash if the client screen
is rotated</strong>. (This does not occur when the patch from the UxPlay
Wiki has been applied.)</p></li>
<li><p>Tip: to start UxPlay on a remote host (such as a Raspberry Pi)
using ssh:</p></li>
</ul>
@@ -369,10 +382,12 @@ FILE (which can be /dev/null to discard it).</p>
Alma Linux):</strong> (sudo yum install) openssl-devel libplist-devel
avahi-compat-libdns_sd-devel (some from the “PowerTools” add-on
repository) (+libX11-devel for ZOOMFIX). The required GStreamer packages
(some from <a href="https://rpmfusion.org">rpmfusion.org</a>) are:
gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav
gstreamer1-plugins-bad-free (+ gstreamer1-vaapi for intel
graphics).</p></li>
are: gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav
gstreamer1-plugins-bad-free (+ gstreamer1-vaapi for intel graphics); you
may need to get some of them (in particular gstreamer1-libav) from <a
href="https://rpmfusion.org">rpmfusion.org</a> (which provides packages
including plugins that RedHat does not ship for license
reasons).</p></li>
<li><p><strong>OpenSUSE:</strong> (sudo zypper install) libopenssl-devel
libplist-devel avahi-compat-mDNSResponder-devel (+ libX11-devel for
ZOOMFIX). The required GStreamer packages are: gstreamer-devel
@@ -380,7 +395,8 @@ gstreamer-plugins-base-devel gstreamer-plugins-libav
gstreamer-plugins-bad (+ gstreamer-plugins-vaapi for Intel graphics); in
some cases, you may need to use gstreamer packages for OpenSUSE from <a
href="https://ftp.gwdg.de/pub/linux/misc/packman/suse/">Packman</a>
“Essentials”.</p></li>
“Essentials” (which provides packages including plugins that OpenSUSE
does not ship for license reasons).</p></li>
<li><p><strong>Arch Linux</strong> (sudo pacman -Syu) openssl libplist
avahi gst-plugins-base gst-plugins-good gst-plugins-bad gst-libav (+
gstreamer-vaapi for Intel graphics). (<strong>Also available as a
@@ -425,9 +441,9 @@ it, but compiled to use X11).</li>
</ul>
<p><strong>For the “official” release</strong>: install both the macOS
runtime and development installer packages. Assuming that the latest
release is 1.20.3. install
<code>gstreamer-1.0-1.20.3-universal.pkg</code> and
<code>gstreamer-1.0-devel-1.20.3-universal.pkg</code>. (If you have an
release is 1.20.4. install
<code>gstreamer-1.0-1.20.4-universal.pkg</code> and
<code>gstreamer-1.0-devel-1.20.4-universal.pkg</code>. (If you have an
Intel-architecture Mac, and have problems with the “universal” packages,
you can also use <code>gstreamer-1.0-1.18.6-x86_64.pkg</code> and
<code>gstreamer-1.0-devel-1.18.6-x86_64.pkg</code>.) Click on them to
@@ -460,7 +476,9 @@ not affect the (small) initial OpenGL mirror window size, but the window
can be expanded using the mouse or trackpad. In contrast, a window
created with “-vs osxvideosink” is initially big, but has the wrong
aspect ratio (stretched image); in this case the aspect ratio changes
when the window width is changed by dragging its side.</p></li>
when the window width is changed by dragging its side; the option “-vs
osxvideosink force-aspect-ratio=true” can be used to make the window
have the correct aspect ratio when it first opens.</p></li>
</ul>
<p><strong><em>Using GStreamer installed from MacPorts (not
recommended):</em></strong></p>
@@ -628,11 +646,12 @@ such as vaapisink.</p>
h264 parser element, default is h264parse. Using quotes “…” allows
options to be added.</p>
<p><strong>-vd <em>decoder</em></strong> chooses the GStreamer
pipelines h264 decoder element, instead of letting decodebin pick it
for you. Software decoding is done by avdec_h264; various hardware
decoders include: vaapih264dec, nvdec, nvh264dec, v4l2h264dec (these
require that the appropriate hardware is available). Using quotes “…”
allows some parameters to be included with the decoder name.</p>
pipelines h264 decoder element, instead of the default value
“decodebin” which chooses it for you. Software decoding is done by
avdec_h264; various hardware decoders include: vaapih264dec, nvdec,
nvh264dec, v4l2h264dec (these require that the appropriate hardware is
available). Using quotes “…” allows some parameters to be included with
the decoder name.</p>
<p><strong>-vc <em>converter</em></strong> chooses the GStreamer
pipelines videoconverter element, instead of the default value
“videoconvert”. When using Video4Linux2 hardware-decoding by a
@@ -640,14 +659,14 @@ GPU,<code>-vc v4l2convert</code> will also use the GPU for video
conversion. Using quotes “…” allows some parameters to be included with
the converter name.</p>
<p><strong>-vs <em>videosink</em></strong> chooses the GStreamer
videosink, instead of letting autovideosink pick it for you. Some
videosink choices are: ximagesink, xvimagesink, vaapisink (for intel
graphics), gtksink, glimagesink, waylandsink, osximagesink (for macOS),
kmssink (for systems without X11, like Raspberry Pi OS lite) or
fpsdisplaysink (which shows the streaming framerate in fps). Using
quotes “…” allows some parameters to be included with the videosink
name. For example, <strong>fullscreen</strong> mode is supported by the
vaapisink plugin, and is obtained using
videosink, instead of the default value “autovideosink” which chooses it
for you. Some videosink choices are: ximagesink, xvimagesink, vaapisink
(for intel graphics), gtksink, glimagesink, waylandsink, osximagesink
(for macOS), kmssink (for systems without X11, like Raspberry Pi OS
lite) or fpsdisplaysink (which shows the streaming framerate in fps).
Using quotes “…” allows some parameters to be included with the
videosink name. For example, <strong>fullscreen</strong> mode is
supported by the vaapisink plugin, and is obtained using
<code>-vs "vaapisink fullscreen=true"</code>; this also works with
<code>waylandsink</code>. The syntax of such options is specific to a
given plugin, and some choices of videosink might not work on your
@@ -770,9 +789,9 @@ containerized to make it playable with standard audio players.</em></p>
<p><strong>-d</strong> Enable debug output. Note: this does not show
GStreamer error or debug messages. To see GStreamer error and warning
messages, set the environment variable GST_DEBUG with “export
GST_DEBUG=2” before running uxplay. To see GStreamer debug messages, set
GST_DEBUG=4; increase this to see even more of the GStreamer inner
workings.</p>
GST_DEBUG=2” before running uxplay. To see GStreamer information
messages, set GST_DEBUG=4; for DEBUG messages, GST_DEBUG=5; increase
this to see even more of the GStreamer inner workings.</p>
<h1 id="troubleshooting">Troubleshooting</h1>
<p>Note: <code>uxplay</code> is run from a terminal command line, and
informational messages are written to the terminal.</p>
@@ -972,7 +991,7 @@ the client by the AirPlay server) to be set. The “features” code and
other settings are set in <code>UxPlay/lib/dnssdint.h</code>.</p>
<h1 id="changelog">Changelog</h1>
<p>1.58 2022-10-29 Add option “-nohold” that will drop existing
connections when a new client connects.</p>
connections when a new client connects. Update llhttp to v8.1.0.</p>
<p>1.57 2022-10-09 Minor fixes: (fix coredump on AUR on “stop
mirroring”, occurs when compiled with AUR CFLAGS -DFORTIFY_SOURCE);
graceful exit when required plugins are missing; improved support for

View File

@@ -14,7 +14,7 @@ Highlights:
as the server running UxPlay. Using AirPlay, UxPlay can
emulate a second display for macOS clients.
* Support for older iOS clients (such as 32-bit iPad 2nd gen., iPod Touch 5th gen. and
iPhone 4S, when upgraded to iOS 9.3.5, or later 64-bit versions), plus a
iPhone 4S, when upgraded to iOS 9.3.5, or later 64-bit devices), plus a
Windows AirPlay-client emulator, AirMyPC.
* Uses GStreamer plugins for audio and video rendering (with options
to select different hardware-appropriate output "videosinks" and
@@ -22,7 +22,7 @@ Highlights:
* Support for server behind a firewall.
* **New**: Support for Raspberry Pi, with hardware video acceleration using
Video4Linux2 (v4l2), which supports both 32- and 64-bit systems: this is the replacement for
32-bit-only OpenMAX (omx), for which support by RPi distributions is being discontinued. (Until GStreamer 1.22
32-bit-only OpenMAX (omx), no longer actively supported by RPi distributions. (Until GStreamer 1.22
is released, a backport of changes from the GStreamer development branch is needed: this has now been done
by Raspberry Pi OS (Bullseye); for other distributions
a [patch](https://github.com/FDH2/UxPlay/wiki/Gstreamer-Video4Linux2-plugin-patches)
@@ -249,6 +249,10 @@ UxPlay from receiving client connection requests unless some network ports
are opened. See [Troubleshooting](#troubleshooting) below for
help with this or other problems.
* By default, UxPlay is locked to
its current client until that client drops the connection; the option `-nohold` modifies this
behavior so that when a new client requests a connection, it removes the current client and takes over.
To display the accompanying "Cover Art" from sources like Apple Music in Audio-Only (ALAC) mode,
run "`uxplay -ca <name> &`" in the background, then run a image viewer with an autoreload feature: an example
is "feh": run "``feh -R 1 <name>``"
@@ -265,12 +269,16 @@ See [Usage](#usage) for more run-time options.
### **Special instructions for Raspberry Pi (only tested on model 4B)**:
* For good performance, the Raspberry Pi needs the GStreamer Video4linux2 plugin to use its Broadcom GPU hardware for decoding h264 video.
You can also test UxPlay with software-only video decoding using option `-avdec`.
* For good performance, the Raspberry Pi needs the GStreamer Video4linux2 plugin to use its Broadcom GPU hardware
for decoding h264 video. The plugin accesses the GPU using the bcm2835_codec kernel module
which is maintained by Raspberry Pi in the drivers/staging/VC04_services part of
the [Raspberry Pi kernel tree](https://github.com/raspberrypi/linux), but
is not yet included in the mainline Linux kernel. Distributions for R Pi that supply it include Raspberry Pi OS, Ubuntu,
and Manjaro. Some others may not. **Without this kernel module, UxPlay cannot use the GPU.**
* The upcoming GStreamer-1.22 release will work well, but older releases of GStreamer will not work unless patched with backports of the
improvements from GStreamer-1.22. Raspberry Pi OS (Bullseye) now has the needed backports. For other distributions, patches for GStreamer
* The plugin in the upcoming GStreamer-1.22 release will work well, but the one in older releases of GStreamer will not
work unless patched with backports of the improvements from GStreamer-1.22. Raspberry Pi OS (Bullseye) now has a
working backport. For a fuller backport, or for other distributions, patches for the GStreamer Video4Linux2 plugin
are [available with instructions in the UxPlay Wiki](https://github.com/FDH2/UxPlay/wiki/Gstreamer-Video4Linux2-plugin-patches).
The basic uxplay options for R Pi are ```uxplay [-v4l2] [-vs <videosink>]```. The
@@ -284,14 +292,16 @@ provides the best results.
* **For UxPlay-1.56 and later, if you are not using the latest GStreamer patches from the Wiki, you will need to use the UxPlay option `-bt709`**:
previously the GStreamer v4l2 plugin could
not recognise Apple's color format (an unusual "full-range" variant of the bt709 HDTV standard), which -bt709 fixes. GStreamer-1.20.4 will have
a fix for this, which is included in the latest patches, so beginning with UxPlay-1.56, the bt709 fix is no longer automatically applied.
**After a recent update, Raspberry Pi OS (Bullseye) now supplies an already-patched GStreamer-1.18.4 that works with UxPlay, but
needs the `-bt709` option with UxPlay-1.56 or later.**
not recognise Apple's color format (an unusual "full-range" variant of the bt709 HDTV standard), which -bt709 fixes. GStreamer-1.20.4 has
a fix for this, which is included in the latest patches, so beginning with UxPlay-1.56, the bt709 fix is no longer automatically
applied.
* As mentioned, **Raspberry Pi OS (Bullseye) now supplies a GStreamer-1.18.4 package with backports that works
with UxPlay, but needs the `-bt709` option with UxPlay-1.56 or later.** Although this Raspberry Pi OS
package gstreamer1.0-plugins-good-1.18.4-2+deb11u1+rpt1 works without having to be patched,
**don't use options `-v4l2` and ``-rpi*`` with it, as they
cause a crash if the client screen is rotated**. (This does not occur when the patch from the UxPlay Wiki has been applied.)
* **The option `-v4l2` (also ``-rpi*`` options) causes a crash when the client screen is rotated,
if used with current Raspberry Pi OS version gstreamer1.0-plugins-good-1.18.4-2+deb11u1+rpt1. Solution:
don't use these options, or apply the GStreamer backport patch from the UxPlay Wiki.**
* Tip: to start UxPlay on a remote host (such as a Raspberry Pi) using ssh:
@@ -307,14 +317,19 @@ don't use these options, or apply the GStreamer backport patch from the UxPlay
* **Red Hat, Fedora, CentOS (now continued as Rocky Linux or Alma Linux):**
(sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel (some from the "PowerTools" add-on repository)
(+libX11-devel for ZOOMFIX). The required GStreamer packages (some from [rpmfusion.org](https://rpmfusion.org)) are:
gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi for intel graphics).
(+libX11-devel for ZOOMFIX). The required GStreamer packages are:
gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi
for intel graphics);
you may need to get some of them (in particular gstreamer1-libav) from [rpmfusion.org](https://rpmfusion.org)
(which provides packages including plugins that RedHat does not ship for license reasons).
* **OpenSUSE:**
(sudo zypper install) libopenssl-devel libplist-devel
avahi-compat-mDNSResponder-devel (+ libX11-devel for ZOOMFIX). The required
GStreamer packages are: gstreamer-devel gstreamer-plugins-base-devel gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi for Intel graphics); in some cases,
you may need to use gstreamer packages for OpenSUSE from [Packman](https://ftp.gwdg.de/pub/linux/misc/packman/suse/) "Essentials".
avahi-compat-mDNSResponder-devel (+ libX11-devel for ZOOMFIX). The required GStreamer packages are: gstreamer-devel
gstreamer-plugins-base-devel gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi
for Intel graphics); in some cases, you may need to use gstreamer packages for OpenSUSE
from [Packman](https://ftp.gwdg.de/pub/linux/misc/packman/suse/) "Essentials"
(which provides packages including plugins that OpenSUSE does not ship for license reasons).
* **Arch Linux**
@@ -351,8 +366,8 @@ Next get the latest macOS release of GStreamer-1.0.
from [https://gstreamer.freedesktop.org/download/](https://gstreamer.freedesktop.org/download/). The alternative is to install it from Homebrew
(MacPorts also supplies it, but compiled to use X11).
**For the "official" release**: install both the macOS runtime and development installer packages. Assuming that the latest release is 1.20.3.
install `gstreamer-1.0-1.20.3-universal.pkg` and ``gstreamer-1.0-devel-1.20.3-universal.pkg``. (If
**For the "official" release**: install both the macOS runtime and development installer packages. Assuming that the latest release is 1.20.4.
install `gstreamer-1.0-1.20.4-universal.pkg` and ``gstreamer-1.0-devel-1.20.4-universal.pkg``. (If
you have an Intel-architecture Mac, and have problems with the "universal" packages, you can also
use `gstreamer-1.0-1.18.6-x86_64.pkg` and ``gstreamer-1.0-devel-1.18.6-x86_64.pkg``.) Click on them to
install (they install to /Library/FrameWorks/GStreamer.framework).
@@ -383,7 +398,9 @@ Finally, build and install uxplay (without ZOOMFIX): open a terminal and change
* In the case of glimagesink, the resolution settings "-s wxh" do not affect
the (small) initial OpenGL mirror window size, but the window can be expanded using the mouse or trackpad.
In contrast, a window created with "-vs osxvideosink" is initially big, but has the wrong aspect ratio (stretched image);
in this case the aspect ratio changes when the window width is changed by dragging its side.
in this case the aspect ratio changes when the window width is changed by dragging its side;
the option "-vs osxvideosink force-aspect-ratio=true" can be used to make the window have the
correct aspect ratio when it first opens.
***Using GStreamer installed from MacPorts (not recommended):***
@@ -535,8 +552,8 @@ which will not work if a firewall is running.
**-vp _parser_** choses the GStreamer pipeline's h264 parser element, default is h264parse. Using
quotes "..." allows options to be added.
**-vd _decoder_** chooses the GStreamer pipeline's h264 decoder element, instead of letting
decodebin pick it for you. Software decoding is done by avdec_h264; various hardware decoders
**-vd _decoder_** chooses the GStreamer pipeline's h264 decoder element, instead of the default value
"decodebin" which chooses it for you. Software decoding is done by avdec_h264; various hardware decoders
include: vaapih264dec, nvdec, nvh264dec, v4l2h264dec (these require that the appropriate hardware is
available). Using quotes "..." allows some parameters to be included with the decoder name.
@@ -544,9 +561,10 @@ which will not work if a firewall is running.
value "videoconvert". When using Video4Linux2 hardware-decoding by a GPU,`-vc v4l2convert` will also use
the GPU for video conversion. Using quotes "..." allows some parameters to be included with the converter name.
**-vs _videosink_** chooses the GStreamer videosink, instead of letting
autovideosink pick it for you. Some videosink choices are: ximagesink, xvimagesink,
vaapisink (for intel graphics), gtksink, glimagesink, waylandsink, osximagesink (for macOS), kmssink (for systems without X11, like Raspberry Pi OS lite) or
**-vs _videosink_** chooses the GStreamer videosink, instead of the default value
"autovideosink" which chooses it for you. Some videosink choices are: ximagesink, xvimagesink,
vaapisink (for intel graphics), gtksink, glimagesink, waylandsink, osximagesink (for macOS), kmssink (for
systems without X11, like Raspberry Pi OS lite) or
fpsdisplaysink (which shows the streaming framerate in fps). Using quotes
"..." allows some parameters to be included with the videosink name.
For example, **fullscreen** mode is supported by the vaapisink plugin, and is
@@ -655,7 +673,8 @@ which will not work if a firewall is running.
**-d** Enable debug output. Note: this does not show GStreamer error or debug messages. To see GStreamer error
and warning messages, set the environment variable GST_DEBUG with "export GST_DEBUG=2" before running uxplay.
To see GStreamer debug messages, set GST_DEBUG=4; increase this to see even more of the GStreamer inner workings.
To see GStreamer information messages, set GST_DEBUG=4; for DEBUG messages, GST_DEBUG=5; increase this to see even
more of the GStreamer inner workings.
# Troubleshooting
@@ -816,6 +835,7 @@ The "features" code and other settings are set in `UxPlay/lib/dnssdint.h`.
# Changelog
1.58 2022-10-29 Add option "-nohold" that will drop existing connections when a new client connects.
Update llhttp to v8.1.0.
1.57 2022-10-09 Minor fixes: (fix coredump on AUR on "stop mirroring", occurs when compiled with
AUR CFLAGS -DFORTIFY_SOURCE); graceful exit when required plugins are missing;

View File

@@ -18,7 +18,7 @@ Highlights:
- Support for older iOS clients (such as 32-bit iPad 2nd gen., iPod
Touch 5th gen. and iPhone 4S, when upgraded to iOS 9.3.5, or later
64-bit versions), plus a Windows AirPlay-client emulator, AirMyPC.
64-bit devices), plus a Windows AirPlay-client emulator, AirMyPC.
- Uses GStreamer plugins for audio and video rendering (with options
to select different hardware-appropriate output "videosinks" and
@@ -29,9 +29,9 @@ Highlights:
- **New**: Support for Raspberry Pi, with hardware video acceleration
using Video4Linux2 (v4l2), which supports both 32- and 64-bit
systems: this is the replacement for 32-bit-only OpenMAX (omx), for
which support by RPi distributions is being discontinued. (Until
GStreamer 1.22 is released, a backport of changes from the GStreamer
systems: this is the replacement for 32-bit-only OpenMAX (omx), no
longer actively supported by RPi distributions. (Until GStreamer
1.22 is released, a backport of changes from the GStreamer
development branch is needed: this has now been done by Raspberry Pi
OS (Bullseye); for other distributions a
[patch](https://github.com/FDH2/UxPlay/wiki/Gstreamer-Video4Linux2-plugin-patches)
@@ -293,6 +293,11 @@ prevents UxPlay from receiving client connection requests unless some
network ports are opened. See [Troubleshooting](#troubleshooting) below
for help with this or other problems.
- By default, UxPlay is locked to its current client until that client
drops the connection; the option `-nohold` modifies this behavior so
that when a new client requests a connection, it removes the current
client and takes over.
To display the accompanying "Cover Art" from sources like Apple Music in
Audio-Only (ALAC) mode, run "`uxplay -ca <name> &`" in the background,
then run a image viewer with an autoreload feature: an example is "feh":
@@ -312,14 +317,20 @@ options.
- For good performance, the Raspberry Pi needs the GStreamer
Video4linux2 plugin to use its Broadcom GPU hardware for decoding
h264 video. You can also test UxPlay with software-only video
decoding using option `-avdec`.
h264 video. The plugin accesses the GPU using the bcm2835_codec
kernel module which is maintained by Raspberry Pi in the
drivers/staging/VC04_services part of the [Raspberry Pi kernel
tree](https://github.com/raspberrypi/linux), but is not yet included
in the mainline Linux kernel. Distributions for R Pi that supply it
include Raspberry Pi OS, Ubuntu, and Manjaro. Some others may not.
**Without this kernel module, UxPlay cannot use the GPU.**
- The upcoming GStreamer-1.22 release will work well, but older
releases of GStreamer will not work unless patched with backports of
the improvements from GStreamer-1.22. Raspberry Pi OS (Bullseye) now
has the needed backports. For other distributions, patches for
GStreamer are [available with instructions in the UxPlay
- The plugin in the upcoming GStreamer-1.22 release will work well,
but the one in older releases of GStreamer will not work unless
patched with backports of the improvements from GStreamer-1.22.
Raspberry Pi OS (Bullseye) now has a working backport. For a fuller
backport, or for other distributions, patches for the GStreamer
Video4Linux2 plugin are [available with instructions in the UxPlay
Wiki](https://github.com/FDH2/UxPlay/wiki/Gstreamer-Video4Linux2-plugin-patches).
The basic uxplay options for R Pi are
@@ -338,18 +349,18 @@ results.
GStreamer patches from the Wiki, you will need to use the UxPlay
option `-bt709`**: previously the GStreamer v4l2 plugin could not
recognise Apple's color format (an unusual "full-range" variant of
the bt709 HDTV standard), which -bt709 fixes. GStreamer-1.20.4 will
have a fix for this, which is included in the latest patches, so
beginning with UxPlay-1.56, the bt709 fix is no longer automatically
applied. **After a recent update, Raspberry Pi OS (Bullseye) now
supplies an already-patched GStreamer-1.18.4 that works with UxPlay,
but needs the `-bt709` option with UxPlay-1.56 or later.**
the bt709 HDTV standard), which -bt709 fixes. GStreamer-1.20.4 has a
fix for this, which is included in the latest patches, so beginning
with UxPlay-1.56, the bt709 fix is no longer automatically applied.
- **The option `-v4l2` (also `-rpi*` options) causes a crash when the
client screen is rotated, if used with current Raspberry Pi OS
version gstreamer1.0-plugins-good-1.18.4-2+deb11u1+rpt1. Solution:
don't use these options, or apply the GStreamer backport patch from
the UxPlay Wiki.**
- As mentioned, **Raspberry Pi OS (Bullseye) now supplies a
GStreamer-1.18.4 package with backports that works with UxPlay, but
needs the `-bt709` option with UxPlay-1.56 or later.** Although this
Raspberry Pi OS package
gstreamer1.0-plugins-good-1.18.4-2+deb11u1+rpt1 works without having
to be patched, **don't use options `-v4l2` and `-rpi*` with it, as
they cause a crash if the client screen is rotated**. (This does not
occur when the patch from the UxPlay Wiki has been applied.)
- Tip: to start UxPlay on a remote host (such as a Raspberry Pi) using
ssh:
@@ -371,9 +382,12 @@ running if the ssh session is closed. Terminal output is saved to FILE
Linux):** (sudo yum install) openssl-devel libplist-devel
avahi-compat-libdns_sd-devel (some from the "PowerTools" add-on
repository) (+libX11-devel for ZOOMFIX). The required GStreamer
packages (some from [rpmfusion.org](https://rpmfusion.org)) are:
gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav
gstreamer1-plugins-bad-free (+ gstreamer1-vaapi for intel graphics).
packages are: gstreamer1-devel gstreamer1-plugins-base-devel
gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi for
intel graphics); you may need to get some of them (in particular
gstreamer1-libav) from [rpmfusion.org](https://rpmfusion.org) (which
provides packages including plugins that RedHat does not ship for
license reasons).
- **OpenSUSE:** (sudo zypper install) libopenssl-devel libplist-devel
avahi-compat-mDNSResponder-devel (+ libX11-devel for ZOOMFIX). The
@@ -383,7 +397,8 @@ running if the ssh session is closed. Terminal output is saved to FILE
graphics); in some cases, you may need to use gstreamer packages for
OpenSUSE from
[Packman](https://ftp.gwdg.de/pub/linux/misc/packman/suse/)
"Essentials".
"Essentials" (which provides packages including plugins that
OpenSUSE does not ship for license reasons).
- **Arch Linux** (sudo pacman -Syu) openssl libplist avahi
gst-plugins-base gst-plugins-good gst-plugins-bad gst-libav (+
@@ -429,8 +444,8 @@ Next get the latest macOS release of GStreamer-1.0.
**For the "official" release**: install both the macOS runtime and
development installer packages. Assuming that the latest release is
1.20.3. install `gstreamer-1.0-1.20.3-universal.pkg` and
`gstreamer-1.0-devel-1.20.3-universal.pkg`. (If you have an
1.20.4. install `gstreamer-1.0-1.20.4-universal.pkg` and
`gstreamer-1.0-devel-1.20.4-universal.pkg`. (If you have an
Intel-architecture Mac, and have problems with the "universal" packages,
you can also use `gstreamer-1.0-1.18.6-x86_64.pkg` and
`gstreamer-1.0-devel-1.18.6-x86_64.pkg`.) Click on them to install (they
@@ -467,7 +482,9 @@ downloads, "UxPlay" for "git clone" downloads) and build/install with
can be expanded using the mouse or trackpad. In contrast, a window
created with "-vs osxvideosink" is initially big, but has the wrong
aspect ratio (stretched image); in this case the aspect ratio
changes when the window width is changed by dragging its side.
changes when the window width is changed by dragging its side; the
option "-vs osxvideosink force-aspect-ratio=true" can be used to
make the window have the correct aspect ratio when it first opens.
***Using GStreamer installed from MacPorts (not recommended):***
@@ -648,11 +665,11 @@ vaapisink.
default is h264parse. Using quotes "..." allows options to be added.
**-vd *decoder*** chooses the GStreamer pipeline's h264 decoder element,
instead of letting decodebin pick it for you. Software decoding is done
by avdec_h264; various hardware decoders include: vaapih264dec, nvdec,
nvh264dec, v4l2h264dec (these require that the appropriate hardware is
available). Using quotes "..." allows some parameters to be included
with the decoder name.
instead of the default value "decodebin" which chooses it for you.
Software decoding is done by avdec_h264; various hardware decoders
include: vaapih264dec, nvdec, nvh264dec, v4l2h264dec (these require that
the appropriate hardware is available). Using quotes "..." allows some
parameters to be included with the decoder name.
**-vc *converter*** chooses the GStreamer pipeline's videoconverter
element, instead of the default value "videoconvert". When using
@@ -660,17 +677,17 @@ Video4Linux2 hardware-decoding by a GPU,`-vc v4l2convert` will also use
the GPU for video conversion. Using quotes "..." allows some parameters
to be included with the converter name.
**-vs *videosink*** chooses the GStreamer videosink, instead of letting
autovideosink pick it for you. Some videosink choices are: ximagesink,
xvimagesink, vaapisink (for intel graphics), gtksink, glimagesink,
waylandsink, osximagesink (for macOS), kmssink (for systems without X11,
like Raspberry Pi OS lite) or fpsdisplaysink (which shows the streaming
framerate in fps). Using quotes "..." allows some parameters to be
included with the videosink name. For example, **fullscreen** mode is
supported by the vaapisink plugin, and is obtained using
`-vs "vaapisink fullscreen=true"`; this also works with `waylandsink`.
The syntax of such options is specific to a given plugin, and some
choices of videosink might not work on your system.
**-vs *videosink*** chooses the GStreamer videosink, instead of the
default value "autovideosink" which chooses it for you. Some videosink
choices are: ximagesink, xvimagesink, vaapisink (for intel graphics),
gtksink, glimagesink, waylandsink, osximagesink (for macOS), kmssink
(for systems without X11, like Raspberry Pi OS lite) or fpsdisplaysink
(which shows the streaming framerate in fps). Using quotes "..." allows
some parameters to be included with the videosink name. For example,
**fullscreen** mode is supported by the vaapisink plugin, and is
obtained using `-vs "vaapisink fullscreen=true"`; this also works with
`waylandsink`. The syntax of such options is specific to a given plugin,
and some choices of videosink might not work on your system.
**-vs 0** suppresses display of streamed video, but plays streamed
audio. (The client's screen is still mirrored at a reduced rate of 1
@@ -801,8 +818,9 @@ audio players.*
**-d** Enable debug output. Note: this does not show GStreamer error or
debug messages. To see GStreamer error and warning messages, set the
environment variable GST_DEBUG with "export GST_DEBUG=2" before running
uxplay. To see GStreamer debug messages, set GST_DEBUG=4; increase this
to see even more of the GStreamer inner workings.
uxplay. To see GStreamer information messages, set GST_DEBUG=4; for
DEBUG messages, GST_DEBUG=5; increase this to see even more of the
GStreamer inner workings.
# Troubleshooting
@@ -1015,7 +1033,7 @@ other settings are set in `UxPlay/lib/dnssdint.h`.
# Changelog
1.58 2022-10-29 Add option "-nohold" that will drop existing connections
when a new client connects.
when a new client connects. Update llhttp to v8.1.0.
1.57 2022-10-09 Minor fixes: (fix coredump on AUR on "stop mirroring",
occurs when compiled with AUR CFLAGS -DFORTIFY_SOURCE); graceful exit

View File

@@ -175,7 +175,7 @@ httpd_accept_connection(httpd_t *httpd, int server_fd, int is_ipv6)
/* for uxplay, remove existing connections to make way for new connections:
* this will only occur if max_connections > 2 */
if (httpd->open_connections >= 2) {
logger_log(httpd->logger, LOGGER_INFO, "removing current connections to make way for new connection");
logger_log(httpd->logger, LOGGER_INFO, "Destroying current connections to allow connection by new client");
for (int i = 0; i<httpd->max_connections; i++) {
http_connection_t *connection = &httpd->connections[i];
if (!connection->connected) {

View File

@@ -359,7 +359,7 @@ static void
conn_destroy(void *ptr) {
raop_conn_t *conn = ptr;
logger_log(conn->raop->logger, LOGGER_INFO, "Destroying connection");
logger_log(conn->raop->logger, LOGGER_DEBUG, "Destroying connection");
if (conn->raop->callbacks.conn_destroy) {
conn->raop->callbacks.conn_destroy(conn->raop->callbacks.cls);

View File

@@ -949,14 +949,14 @@ int main (int argc, char *argv[]) {
extern "C" void conn_init (void *cls) {
open_connections++;
connections_stopped = false;
LOGI("Open connections: %i", open_connections);
//LOGD("Open connections: %i", open_connections);
//video_renderer_update_background(1);
}
extern "C" void conn_destroy (void *cls) {
//video_renderer_update_background(-1);
open_connections--;
LOGI("Open connections: %i", open_connections);
//LOGD("Open connections: %i", open_connections);
if (!open_connections) {
connections_stopped = true;
}