CMakeLists.txt: update to use X_DISPLAY_FIX by default

This commit is contained in:
F. Duncanh
2022-12-09 10:03:30 -05:00
parent 7ecb10084c
commit 24f47dd943
8 changed files with 125 additions and 181 deletions

View File

@@ -8,11 +8,18 @@ include(GNUInstallDirs)
set ( CMAKE_CXX_STANDARD 11 )
if ( ZOOMFIX )
find_package( X11 REQUIRED )
link_libraries( ${X11_LIBRARIES} )
include_directories( ${X11_INCLUDE_DIR} )
endif ( ZOOMFIX )
if ( NOT NO_X11_DEPS )
find_package( X11 )
if ( X11_FOUND )
message (STATUS "Will compile using X11 Libraries" )
link_libraries( ${X11_LIBRARIES} )
include_directories( ${X11_INCLUDE_DIR} )
else ()
message (STATUS "X11 libraries not found, will compile without X11 dependence" )
endif ()
else()
message (STATUS "will compile without X11 dependence" )
endif()
if( UNIX AND NOT APPLE )
add_definitions( -DSUPPRESS_AVAHI_COMPAT_WARNING )

View File

@@ -1,6 +1,6 @@
<h1
id="uxplay-1.58-airplay-mirror-and-airplay-audio-server-for-linux-macos-and-unix-now-also-runs-on-windows.">UxPlay
1.58: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix
id="uxplay-1.59-airplay-mirror-and-airplay-audio-server-for-linux-macos-and-unix-now-also-runs-on-windows.">UxPlay
1.59: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix
(now also runs on Windows).</h1>
<h3
id="now-developed-at-the-github-site-httpsgithub.comfdh2uxplay-where-all-user-issues-should-be-posted.">Now
@@ -236,16 +236,18 @@ follow the instructions below:</p>
optimization for the computer it is built on; when this is not the case,
as when you are packaging for a distribution, use the cmake option
<code>-DNO_MARCH_NATIVE=ON</code>.</p>
<p>If you use Gstreamer older than 1.20, and wish to share the UxPlay
screen using screen-sharing apps such as Zoom, you should use the cmake
option “<code>-DZOOMFIX=ON</code>” in step 3. This requires the X11
development libraries to be installed: on Debian-based systems do this
with “<code>sudo apt-get install libx11-dev</code>” . “ZOOMFIX” is not
needed on macOS, or if you are using non-X11 windows (such as OpenGL) on
Linux. See <a href="#zoomfix-compile-time-option">ZOOMFIX compile-time
option</a> below for more information, and alternatives to “ZOOMFIX”.
<strong>ZOOMFIX will NOT be applied if GStreamer &gt;= 1.20 is
found.</strong></p>
<p>If you use X11 Windows on Linux or <em>BSD, and wish to toggle in/out
of fullscreen mode with key F11, UxPlay needs to be built with a
dependence on X11. Starting with UxPlay-1.59, this will be done by
default <strong>IF</strong> the X11 development libraries are installed
and detected. Install these with
<code>sudo apt-get install libx11-dev</code>”. If GStreamer &lt; 1.20
is detected, a fix (“ZOOMFIX”) to a problem (fixed since GStreamer-1.20)
that prevents screen-sharing apps like Zoom from detecting (and sharing)
an X11 UxPlay window will also be made. If you wish to build UxPlay
</em>without* any X11 dependence, use the cmake option
<code>-DNO_X11_DEPS=ON</code> (this is not necessary if the X11
development libraries are not installed).</p>
<ol type="1">
<li><code>sudo apt-get install libssl-dev libplist-dev</code>“. (unless
you need to build OpenSSL and libplist from source).</li>
@@ -255,7 +257,8 @@ modify the source, replace this by
<code>mkdir build; cd build; cmake ..</code>”: you can then delete the
<code>build</code> directory if needed, without affecting the source.)
Also add any cmake “<code>-D</code>” options here as needed (e.g,
<code>-DZOOMFIX=ON</code> or <code>-DNO_MARCH_NATIVE=ON</code>).</li>
<code>-DNO_X11_DEPS=ON</code> or
<code>-DNO_MARCH_NATIVE=ON</code>).</li>
<li><code>make</code></li>
<li><code>sudo make install</code> (you can afterwards uninstall with
<code>sudo make uninstall</code> in the same directory in which this was
@@ -390,8 +393,9 @@ FILE (which can be /dev/null to discard it).</p>
<li><p><strong>Red Hat, Fedora, CentOS (now continued as Rocky Linux or
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
are: gstreamer1-devel gstreamer1-plugins-base-devel gstreamer1-libav
repository) (+libX11-devel for fullscreen X11, and “ZOOMFIX” if needed).
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 <a
href="https://rpmfusion.org">rpmfusion.org</a> (which provides packages
@@ -399,10 +403,11 @@ 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
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
fullscreen X11, and ZOOMFIX if needed). 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 <a
href="https://ftp.gwdg.de/pub/linux/misc/packman/suse/">Packman</a>
“Essentials” (which provides packages including plugins that OpenSUSE
does not ship for license reasons).</p></li>
@@ -465,10 +470,10 @@ packages to be installed by Homebrew as dependencies. <strong>You may
need to set the environment variable
GST_PLUGIN_PATH=/usr/local/lib/gstreamer-1.0 to point to the Homebrew
GStreamer installation.</strong></p>
<p>Finally, build and install uxplay (without ZOOMFIX): open a terminal
and change into the UxPlay source directory (“UxPlay-master” for zipfile
downloads, “UxPlay” for “git clone” downloads) and build/install with
“cmake . ; make ; sudo make install” (same as for Linux).</p>
<p>Finally, build and install uxplay: open a terminal and change into
the UxPlay source directory (“UxPlay-master” for zipfile downloads,
“UxPlay” for “git clone” downloads) and build/install with “cmake . ;
make ; sudo make install” (same as for Linux).</p>
<ul>
<li><p>On macOS with this installation of GStreamer, the only videosinks
available seem to be glimagesink (default choice made by autovideosink)
@@ -906,19 +911,6 @@ grep Sink | grep Audio” ” will show you which audiosinks are available
on your system. (Replace “Audio” by “Video” to see videosinks). Some
possible audiosinks are pulsesink, alsasink, osssink, oss4sink, and
osxaudiosink (macOS).</p>
<p>If you ran cmake with “-DZOOMFIX=ON”, check if the problem is still
there without ZOOMFIX. ZOOMFIX is only applied to the default videosink
choice (“autovideosink”) and the two X11 videosinks “ximagesink” and
“xvimagesink”. ZOOMFIX is only designed for these last two; if
autovideosink chooses a different videosink, ZOOMFIX is now ignored. If
you are using the X11 windowing system (standard on Linux), and have
trouble with screen-sharing on Zoom, use ZOOMFIX and “-vs xvimagesink”
(or “-vs ximagesink” if the previous choice doesnt work).</p>
<p>As other videosink choices are not affected by ZOOMFIX, they may or
may not be visible to screen-sharing apps. Cairo-based windows created
on Linux with “-vs gtksink” are visible to screen-sharing aps without
ZOOMFIX; windows on macOS created by “-vs glimagesink” (default choice)
and “-vs osximagesink” are also visible.</p>
<p>The “OpenGL renderer” window created on Linux by “-vs glimagesink”
sometimes does not close properly when its “close” button is clicked.
(this is a GStreamer issue). You may need to terminate uxplay with
@@ -999,6 +991,13 @@ as “SupportsLegacyPairing”) of the “features” plist code (reported to
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.59 2022-12-10 remove “ZOOMFIX” compile option and make compilation
with X11 dependence (that now provides a toggle into/out of X11
fullscreen mode with the F11 key) the default if X11 development
libraries are detected. (ZOOMFIX is then automatically applied for
GStreamer &lt; 1.20.) The cmake option -DNO_X11_DEPS now allows
compilation with no X11 dependence. Also reworked internal handling of
metadata.</p>
<p>1.58 2022-10-29 Add option “-nohold” that will drop existing
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
@@ -1096,24 +1095,6 @@ stop_server()</p>
being made the first time the GStreamer window was created by uxplay,
and not if the server was relaunched after the GStreamer window was
closed, with uxplay still running. Corrected in v. 1.34</p>
<h3 id="zoomfix-compile-time-option">ZOOMFIX compile-time option</h3>
<p>In GStreamer-1.18.6 and earlier, if UxPlay is using an X11 window for
screen mirroring, this window is not visible to screen-sharing apps like
ZOOM. OpenGL-based windows (use <code>-vs glimagesink</code> or
<code>-vs gtksink</code>, <em>etc.</em>) do not have this problem.</p>
<p>A workaround is to manually make the X11 window visible to
screen-sharing apps with the X11 utility xdotool, if it is installed,
with: <code>xdotool selectwindow set_window --name &lt;name&gt;</code>
(where <code>&lt;name&gt;</code> is your choice of name), and then
select the uxplay window by clicking on it with the mouse.</p>
<p>However, if “<code>cmake -DZOOMFIX=ON .</code>” is run before
compiling, the mirrored window is visible to screen-sharing
applications, without this procedure. To compile with ZOOMFIX=ON, the
X11 development libraries must be installed. (Without ZOOMFIX, UxPlay
has no dependence on X11).</p>
<p><strong>ZOOMFIX is not needed in GStreamer-1.20 or later.</strong>
Thanks to David Ventura https://github.com/DavidVentura/UxPlay for the
fix and also for getting a fix into gstreamer-1.20.</p>
<h3 id="building-openssl-1.1.1-from-source.">Building OpenSSL &gt;=
1.1.1 from source.</h3>
<p>If you need to do this, note that you may be able to use a newer
@@ -1158,10 +1139,10 @@ user to make sure all local laws are adhered to.</p>
<p>This project makes use of a third-party GPL library for handling
FairPlay. The legal status of that library is unclear. Should you be a
representative of Apple and have any objections against the legality of
the library and its use in this project, please contact me and Ill take
the appropriate steps.</p>
the library and its use in this project, please contact the developers
and the appropriate steps will be taken.</p>
<p>Given the large number of third-party AirPlay receivers (mostly
closed-source) available for purchase, it is my understanding that an
closed-source) available for purchase, it is our understanding that an
open source implementation of the same functionality wouldnt violate
any of Apples rights either.</p>
<h1 id="uxplay-authors">UxPlay authors</h1>

View File

@@ -1,4 +1,4 @@
# UxPlay 1.58: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (now also runs on Windows).
# UxPlay 1.59: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (now also runs on Windows).
### Now developed at the GitHub site [https://github.com/FDH2/UxPlay](https://github.com/FDH2/UxPlay) (where all user issues should be posted).
@@ -196,12 +196,13 @@ zipfile downloads, "UxPlay" for "git clone" downloads), then follow the instruct
computer it is built on; when this is not the case, as when you are packaging
for a distribution, use the cmake option `-DNO_MARCH_NATIVE=ON`.
If you use Gstreamer older than 1.20, and wish to share the UxPlay screen using screen-sharing apps such
as Zoom, you should use the cmake option "` -DZOOMFIX=ON`" in step 3. This requires
the X11 development libraries to be installed: on Debian-based systems do this with "`sudo apt-get install libx11-dev`" .
"ZOOMFIX" is not needed on macOS, or if you are using non-X11 windows
(such as OpenGL) on Linux. See [ZOOMFIX compile-time option](#zoomfix-compile-time-option) below for more information,
and alternatives to "ZOOMFIX". **ZOOMFIX will NOT be applied if GStreamer >= 1.20 is found.**
If you use X11 Windows on Linux or *BSD, and wish to toggle in/out of fullscreen mode with key F11,
UxPlay needs to be built with a dependence on X11. Starting with UxPlay-1.59, this will be done by
default **IF** the X11 development libraries are installed and detected. Install these with
"`sudo apt-get install libx11-dev`". If GStreamer < 1.20 is detected, a fix ("ZOOMFIX") to a problem
(fixed since GStreamer-1.20) that prevents screen-sharing apps like Zoom from detecting (and sharing)
an X11 UxPlay window will also be made. If you wish to build UxPlay *without* any X11 dependence, use
the cmake option `-DNO_X11_DEPS=ON` (this is not necessary if the X11 development libraries are not installed).
1. `sudo apt-get install libssl-dev libplist-dev`".
(unless you need to build OpenSSL and libplist from source).
@@ -209,7 +210,7 @@ and alternatives to "ZOOMFIX". **ZOOMFIX will NOT be applied if GStreamer >= 1
3. `cmake .` (For a cleaner build, which is useful if you modify the source, replace this
by "``mkdir build; cd build; cmake ..``": you can then delete the
`build` directory if needed, without affecting the source.) Also add any cmake "`-D`" options
here as needed (e.g, `-DZOOMFIX=ON` or ``-DNO_MARCH_NATIVE=ON``).
here as needed (e.g, `-DNO_X11_DEPS=ON` or ``-DNO_MARCH_NATIVE=ON``).
4. `make`
5. `sudo make install` (you can afterwards uninstall with ``sudo make uninstall``
in the same directory in which this was run).
@@ -318,7 +319,7 @@ cause a crash if the client screen is rotated**. (This does not occur when the
* **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 are:
(+libX11-devel for fullscreen X11, and "ZOOMFIX" if needed). 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)
@@ -326,7 +327,7 @@ you may need to get some of them (in particular gstreamer1-libav) from [rpmfusio
* **OpenSUSE:**
(sudo zypper install) libopenssl-devel libplist-devel
avahi-compat-mDNSResponder-devel (+ libX11-devel for ZOOMFIX). The required GStreamer packages are: gstreamer-devel
avahi-compat-mDNSResponder-devel (+ libX11-devel for fullscreen X11, and ZOOMFIX if needed). 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"
@@ -382,9 +383,7 @@ to using GStreamer.framework, but causes a large number of extra packages to be
**You may need to set the environment variable GST_PLUGIN_PATH=/usr/local/lib/gstreamer-1.0 to point to the Homebrew GStreamer installation.**
Finally, build and install uxplay (without ZOOMFIX): open a terminal and change into the UxPlay source directory
Finally, build and install uxplay: open a terminal and change into the UxPlay source directory
("UxPlay-master" for zipfile downloads, "UxPlay" for "git clone" downloads) and build/install with
"cmake . ; make ; sudo make install " (same as for Linux).
@@ -756,17 +755,6 @@ have autoaudiosink pick one for you. The command "gst-inspect-1.0 | grep Sink
available on your system. (Replace "Audio" by "Video" to see videosinks). Some possible audiosinks are pulsesink, alsasink, osssink, oss4sink,
and osxaudiosink (macOS).
If you ran cmake with "-DZOOMFIX=ON", check if the problem is still there without ZOOMFIX.
ZOOMFIX is only applied to the default videosink choice ("autovideosink") and the two X11 videosinks
"ximagesink" and "xvimagesink". ZOOMFIX is only designed for these last two; if
autovideosink chooses a different videosink, ZOOMFIX is now ignored.
If you are using the X11 windowing system (standard on Linux), and have trouble with screen-sharing on Zoom, use
ZOOMFIX and "-vs xvimagesink" (or "-vs ximagesink" if the previous choice doesn't work).
As other videosink choices are not affected by ZOOMFIX, they may or may not be visible to screen-sharing apps.
Cairo-based windows created on Linux with "-vs gtksink" are visible to screen-sharing aps without ZOOMFIX; windows on macOS created by
"-vs glimagesink" (default choice) and "-vs osximagesink" are also visible.
The "OpenGL renderer" window created on Linux by "-vs glimagesink" sometimes does not close properly when its "close" button is clicked.
(this is a GStreamer issue). You may need to terminate uxplay with Ctrl-C to close a "zombie" OpenGl window. If similar problems happen when
the client sends the "Stop Mirroring" signal, try the no-close option "-nc" that leaves the video window open.
@@ -835,6 +823,13 @@ tvOS 12.2.1); it seems that the use of "legacy" protocol just requires bit 27 (l
The "features" code and other settings are set in `UxPlay/lib/dnssdint.h`.
# Changelog
1.59 2022-12-10 remove "ZOOMFIX" compile option and make compilation with X11 dependence (that now
provides a toggle into/out of X11 fullscreen mode with the F11 key) the default if
X11 development libraries are detected. (ZOOMFIX is then automatically applied for
GStreamer < 1.20.) The cmake option -DNO_X11_DEPS now allows compilation with no X11
dependence. Also reworked internal handling of metadata.
1.58 2022-10-29 Add option "-nohold" that will drop existing connections when a new client connects.
Update llhttp to v8.1.0.
@@ -928,26 +923,6 @@ The "features" code and other settings are set in `UxPlay/lib/dnssdint.h`.
not if the server was relaunched after the GStreamer window
was closed, with uxplay still running. Corrected in v. 1.34
### ZOOMFIX compile-time option
In GStreamer-1.18.6 and earlier, if UxPlay is using an X11 window for screen mirroring, this window is not visible
to screen-sharing apps like ZOOM. OpenGL-based windows (use `-vs glimagesink` or ``-vs gtksink``, _etc._) do not have this problem.
A workaround is to manually make the X11 window visible to screen-sharing apps with the X11 utility
xdotool, if it is installed, with: ``` xdotool selectwindow set_window --name <name>```
(where ```<name>``` is your choice of name), and then select the uxplay window
by clicking on it with the mouse.
However, if "`cmake -DZOOMFIX=ON .`" is run before compiling,
the mirrored window is visible to screen-sharing applications, without this procedure.
To compile with ZOOMFIX=ON, the X11 development libraries must be installed. (Without ZOOMFIX,
UxPlay has no dependence on X11).
**ZOOMFIX is not needed in GStreamer-1.20 or later.**
Thanks to David Ventura
https://github.com/DavidVentura/UxPlay for the fix and also for getting a fix into gstreamer-1.20.
### Building OpenSSL >= 1.1.1 from source.
If you need to do this, note that you may be able to use a newer version (OpenSSL-3.0.1 is known to work).
@@ -987,11 +962,15 @@ and then run "sudo ldconfig".
# Disclaimer
All the resources in this repository are written using only freely available information from the internet. The code and related resources are meant for educational purposes only. It is the responsibility of the user to make sure all local laws are adhered to.
All the resources in this repository are written using only freely available information from the internet. The code and related resources are meant for
educational purposes only. It is the responsibility of the user to make sure all local laws are adhered to.
This project makes use of a third-party GPL library for handling FairPlay. The legal status of that library is unclear. Should you be a representative of Apple and have any objections against the legality of the library and its use in this project, please contact me and I'll take the appropriate steps.
This project makes use of a third-party GPL library for handling FairPlay. The legal status of that library is unclear. Should you be a representative of
Apple and have any objections against the legality of the library and its use in this project, please contact the developers and the appropriate steps
will be taken.
Given the large number of third-party AirPlay receivers (mostly closed-source) available for purchase, it is my understanding that an open source implementation of the same functionality wouldn't violate any of Apple's rights either.
Given the large number of third-party AirPlay receivers (mostly closed-source) available for purchase, it is our understanding that an open source
implementation of the same functionality wouldn't violate any of Apple's rights either.

View File

@@ -1,4 +1,4 @@
# UxPlay 1.58: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (now also runs on Windows).
# UxPlay 1.59: AirPlay-Mirror and AirPlay-Audio server for Linux, macOS, and Unix (now also runs on Windows).
### Now developed at the GitHub site <https://github.com/FDH2/UxPlay> (where all user issues should be posted).
@@ -233,15 +233,17 @@ computer it is built on; when this is not the case, as when you are
packaging for a distribution, use the cmake option
`-DNO_MARCH_NATIVE=ON`.
If you use Gstreamer older than 1.20, and wish to share the UxPlay
screen using screen-sharing apps such as Zoom, you should use the cmake
option "`-DZOOMFIX=ON`" in step 3. This requires the X11 development
libraries to be installed: on Debian-based systems do this with
"`sudo apt-get install libx11-dev`" . "ZOOMFIX" is not needed on macOS,
or if you are using non-X11 windows (such as OpenGL) on Linux. See
[ZOOMFIX compile-time option](#zoomfix-compile-time-option) below for
more information, and alternatives to "ZOOMFIX". **ZOOMFIX will NOT be
applied if GStreamer \>= 1.20 is found.**
If you use X11 Windows on Linux or *BSD, and wish to toggle in/out of
fullscreen mode with key F11, UxPlay needs to be built with a dependence
on X11. Starting with UxPlay-1.59, this will be done by default **IF**
the X11 development libraries are installed and detected. Install these
with "`sudo apt-get install libx11-dev`". If GStreamer \< 1.20 is
detected, a fix ("ZOOMFIX") to a problem (fixed since GStreamer-1.20)
that prevents screen-sharing apps like Zoom from detecting (and sharing)
an X11 UxPlay window will also be made. If you wish to build UxPlay
*without\* any X11 dependence, use the cmake option `-DNO_X11_DEPS=ON`
(this is not necessary if the X11 development libraries are not
installed).
1. `sudo apt-get install libssl-dev libplist-dev`". (unless you need to
build OpenSSL and libplist from source).
@@ -250,7 +252,7 @@ applied if GStreamer \>= 1.20 is found.**
source, replace this by "`mkdir build; cd build; cmake ..`": you can
then delete the `build` directory if needed, without affecting the
source.) Also add any cmake "`-D`" options here as needed (e.g,
`-DZOOMFIX=ON` or `-DNO_MARCH_NATIVE=ON`).
`-DNO_X11_DEPS=ON` or `-DNO_MARCH_NATIVE=ON`).
4. `make`
5. `sudo make install` (you can afterwards uninstall with
`sudo make uninstall` in the same directory in which this was run).
@@ -383,18 +385,18 @@ running if the ssh session is closed. Terminal output is saved to FILE
- **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 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).
repository) (+libX11-devel for fullscreen X11, and "ZOOMFIX" if
needed). 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
avahi-compat-mDNSResponder-devel (+ libX11-devel for fullscreen X11,
and ZOOMFIX if needed). 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
@@ -461,10 +463,10 @@ installed by Homebrew as dependencies. **You may need to set the
environment variable GST_PLUGIN_PATH=/usr/local/lib/gstreamer-1.0 to
point to the Homebrew GStreamer installation.**
Finally, build and install uxplay (without ZOOMFIX): open a terminal and
change into the UxPlay source directory ("UxPlay-master" for zipfile
downloads, "UxPlay" for "git clone" downloads) and build/install with
"cmake . ; make ; sudo make install" (same as for Linux).
Finally, build and install uxplay: open a terminal and change into the
UxPlay source directory ("UxPlay-master" for zipfile downloads, "UxPlay"
for "git clone" downloads) and build/install with "cmake . ; make ; sudo
make install" (same as for Linux).
- On macOS with this installation of GStreamer, the only videosinks
available seem to be glimagesink (default choice made by
@@ -932,21 +934,6 @@ will show you which audiosinks are available on your system. (Replace
"Audio" by "Video" to see videosinks). Some possible audiosinks are
pulsesink, alsasink, osssink, oss4sink, and osxaudiosink (macOS).
If you ran cmake with "-DZOOMFIX=ON", check if the problem is still
there without ZOOMFIX. ZOOMFIX is only applied to the default videosink
choice ("autovideosink") and the two X11 videosinks "ximagesink" and
"xvimagesink". ZOOMFIX is only designed for these last two; if
autovideosink chooses a different videosink, ZOOMFIX is now ignored. If
you are using the X11 windowing system (standard on Linux), and have
trouble with screen-sharing on Zoom, use ZOOMFIX and "-vs xvimagesink"
(or "-vs ximagesink" if the previous choice doesn't work).
As other videosink choices are not affected by ZOOMFIX, they may or may
not be visible to screen-sharing apps. Cairo-based windows created on
Linux with "-vs gtksink" are visible to screen-sharing aps without
ZOOMFIX; windows on macOS created by "-vs glimagesink" (default choice)
and "-vs osximagesink" are also visible.
The "OpenGL renderer" window created on Linux by "-vs glimagesink"
sometimes does not close properly when its "close" button is clicked.
(this is a GStreamer issue). You may need to terminate uxplay with
@@ -1034,6 +1021,14 @@ other settings are set in `UxPlay/lib/dnssdint.h`.
# Changelog
1.59 2022-12-10 remove "ZOOMFIX" compile option and make compilation
with X11 dependence (that now provides a toggle into/out of X11
fullscreen mode with the F11 key) the default if X11 development
libraries are detected. (ZOOMFIX is then automatically applied for
GStreamer \< 1.20.) The cmake option -DNO_X11_DEPS now allows
compilation with no X11 dependence. Also reworked internal handling of
metadata.
1.58 2022-10-29 Add option "-nohold" that will drop existing connections
when a new client connects. Update llhttp to v8.1.0.
@@ -1152,28 +1147,6 @@ made the first time the GStreamer window was created by uxplay, and not
if the server was relaunched after the GStreamer window was closed, with
uxplay still running. Corrected in v. 1.34
### ZOOMFIX compile-time option
In GStreamer-1.18.6 and earlier, if UxPlay is using an X11 window for
screen mirroring, this window is not visible to screen-sharing apps like
ZOOM. OpenGL-based windows (use `-vs glimagesink` or `-vs gtksink`,
*etc.*) do not have this problem.
A workaround is to manually make the X11 window visible to
screen-sharing apps with the X11 utility xdotool, if it is installed,
with: `xdotool selectwindow set_window --name <name>` (where `<name>` is
your choice of name), and then select the uxplay window by clicking on
it with the mouse.
However, if "`cmake -DZOOMFIX=ON .`" is run before compiling, the
mirrored window is visible to screen-sharing applications, without this
procedure. To compile with ZOOMFIX=ON, the X11 development libraries
must be installed. (Without ZOOMFIX, UxPlay has no dependence on X11).
**ZOOMFIX is not needed in GStreamer-1.20 or later.** Thanks to David
Ventura https://github.com/DavidVentura/UxPlay for the fix and also for
getting a fix into gstreamer-1.20.
### Building OpenSSL \>= 1.1.1 from source.
If you need to do this, note that you may be able to use a newer version
@@ -1221,11 +1194,11 @@ user to make sure all local laws are adhered to.
This project makes use of a third-party GPL library for handling
FairPlay. The legal status of that library is unclear. Should you be a
representative of Apple and have any objections against the legality of
the library and its use in this project, please contact me and I'll take
the appropriate steps.
the library and its use in this project, please contact the developers
and the appropriate steps will be taken.
Given the large number of third-party AirPlay receivers (mostly
closed-source) available for purchase, it is my understanding that an
closed-source) available for purchase, it is our understanding that an
open source implementation of the same functionality wouldn't violate
any of Apple's rights either.

View File

@@ -10,13 +10,15 @@ if (APPLE )
endif()
find_package( PkgConfig REQUIRED )
if (ZOOMFIX)
if ( X11_FOUND )
message (STATUS "Will use X_DISPLAY_FIX" )
add_definitions( -DX_DISPLAY_FIX )
pkg_check_modules (GST120 gstreamer-1.0>=1.20)
if ( GST120_FOUND )
message( "-- Requested ZOOMFIX will NOT be applied as Gstreamer version is >= 1.20" )
message( "-- ZOOMFIX will NOT be applied as Gstreamer version is >= 1.20" )
else()
message( "-- Requested ZOOMFIX will be applied as Gstreamer version is < 1.20" )
add_definitions( -DX_DISPLAY_FIX )
message( "-- ZOOMFIX will be applied as Gstreamer version is < 1.20" )
add_definitions( -DZOOM_WINDOW_NAME_FIX )
endif()
endif()

View File

@@ -195,7 +195,9 @@ void video_renderer_start() {
gst_element_set_state (renderer->pipeline, GST_STATE_PLAYING);
renderer->bus = gst_element_get_bus(renderer->pipeline);
first_packet = true;
#ifdef X_DISPLAY_FIX
using_x11 = false;
#endif
}
void video_renderer_render_buffer(raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts, int nal_count) {

View File

@@ -1,11 +1,11 @@
.TH UXPLAY "1" "November 2022" "1.58" "User Commands"
.TH UXPLAY "1" "December 2022" "1.59" "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.58: An open\-source AirPlay mirroring server based on RPiPlay
UxPlay 1.59: An open\-source AirPlay mirroring server based on RPiPlay
.SH OPTIONS
.TP
.B

View File

@@ -50,7 +50,7 @@
#include "renderers/video_renderer.h"
#include "renderers/audio_renderer.h"
#define VERSION "1.58"
#define VERSION "1.59"
#define DEFAULT_NAME "UxPlay"
#define DEFAULT_DEBUG_LOG false