Changelog
+1.65.1 2023-07-22 Add RPM spec file; add graceful exit if required
+gstreamer libav feature “avdec_aac” is missing: (this occurs in
+RPM-based distributions that ship an incomplete FFmpeg for Patent or
+License reasons, and rely on users installing an externally-supplied
+complete FFmpeg).
1.65 2023-06-03 Eliminate pair_setup part of connection protocol to
allow faster connections with clients (thanks to @shuax #176 for this discovery); to revert,
diff --git a/README.md b/README.md
index af1270c..5a884ba 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,15 @@
* Install uxplay on Debian-based Linux systems with "`sudo apt install uxplay`"; on FreeBSD with "``sudo pkg install uxplay``". Also
available on Arch-based systems through AUR.
+* **NEW**: while no RPM-based distributions have yet packaged UxPlay, a RPM "specfile" **uxplay.spec** is now provided with recent
+[releases](https://github.com/FDH2/UxPlay/releases) (see their "Assets"), and can also be found in the UxPlay source top directory. To
+build a RPM package, install rpmdevtools, create a rpmbuild tree with "`rpmdev-setuptree`", and copy uxplay.spec into ``~/rpmbuild/SPECS``.
+In that directory, run "`rpmdev-spectool -g uxplay.spec`" to download the corresponding source file `uxplay-*.tar.gz`, which should then be
+moved into ``~/rpmbuild/SOURCES``; then run "```rpmbuild -ba uxplay.spec```" (you will need to install
+any required dependencies this reports). This should create an installable uxplay RPM package in a subdirectory of `~/rpmbuild/RPMS`.
+(**uxplay.spec** is tested on Fedora 38, Rocky Linux 9.2, OpenSUSE Leap 15.5, and Mageia 9; it can be easily modified to include dependency
+lists for other RPM-based distributions.)
+
* On Linux and \*BSD the mDNS/DNS-SD (Bonjour/ZeroConf) local network services needed by UxPlay are usually provided by Avahi: **if
there is a firewall on the server that will host UxPlay, make sure the default network port for mDNS queries (UDP 5353) is open**. (Uxplay
can work without this port by using only the host's loopback interface, but its visibility to clients will be
@@ -61,11 +70,11 @@ main [UxPlay site](https://github.com/FDH2/UxPlay)).
UxPlay is tested on a number of systems, including (among others) Debian (10 "Buster", 11 "Bullseye", 12 "Bookworm"),
Ubuntu (20.04 LTS, 22.04 LTS, 23.04; also Ubuntu derivatives Linux Mint 20.3, Pop!\_OS 22.04 (NVIDIA edition)), Red Hat and clones (Fedora 38,
-Rocky Linux 9.2), openSUSE 15.4, Arch Linux 23.05, macOS 13.3 (Intel and M2),
+Rocky Linux 9.2), Mageia 9, openSUSE 15.5, Arch Linux 23.05, macOS 13.3 (Intel and M2),
FreeBSD 13.2, Windows 10 and 11 (64 bit).
On Raspberry Pi 4 model B, it is tested on Raspberry Pi OS (Bullseye) (32- and 64-bit), Ubuntu 22.04 LTS and 23.04, Manjaro RPi4 23.02,
-and (without hardware video decoding) on openSUSE 15.4. Also tested on Raspberry Pi 3 model B+.
+and (without hardware video decoding) on openSUSE 15.5. Also tested on Raspberry Pi 3 model B+.
Its main use is to act like an AppleTV for screen-mirroring (with audio) of iOS/iPadOS/macOS clients
(iPhone, iPod Touch, iPad, Mac computers) on the server display
@@ -243,12 +252,18 @@ the GStreamer plugins must first be installed).
### Building on non-Debian Linux and \*BSD
+**For those with RPM-based distributions, a RPM spec file uxplay.spec is also available for
+building a rpm package with rpmbuild** (tested on Fedora 38, Rocky Linux 9.2 (RHEL clone),
+OpenSUSE 15.5, and Mageia 9; see "Packaging Status" section)
+
* **Red Hat, or clones like CentOS (now continued as Rocky Linux or Alma Linux):**
(sudo dnf install, or sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel
gstreamer1-devel gstreamer1-plugins-base-devel (+libX11-devel for fullscreen X11) _(some of these
may be in the "CodeReady" add-on repository, called "PowerTools" by clones)_
+* **Mageia:**
+Same as Red Hat, except "gstreamer1-" becomes "gstreamer1.0-".
* **openSUSE:**
(sudo zypper install) libopenssl-3-devel (formerly
@@ -299,6 +314,11 @@ patent-encumbered code which RedHat does not provide: check with "`rpm -qi ffmpe
"Packager" as RPM Fusion; if this is not installed, uxplay will fail to start, with
error: **no element "avdec_aac"** ]_.
+* **Mageia:**
+(sudo dnf install, or sudo yum install) gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi
+for Intel/AMD graphics). _Install ffmpeg from the "tainted" repository (so gstreamer-1.0-libav can provide
+the required plugin avdec_aac), which also provides a more complete gstreamer1.0-plugins-bad._
+
* **openSUSE:**
(sudo zypper install)
gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi
@@ -981,14 +1001,15 @@ That user found that a solution to a "**Required gstreamer plugin 'libav' not fo
cache.
If it fails to start with an error like '`no element "avdec_aac"`' this is
-because even though gstreamer-libav is installed. it is incomplete because some plugins are missing: "`gst-inspect-1.0 | grep avdec_aac`" will
-show if avdec_aac is available. Some distributions (RedHat, SUSE, etc) provide incomplete versions of libav because of patent issues with codecs used by
-certain plugins. In those cases there will be some "extra package" provider
-like [RPM fusion](https://rpmfusion.org) (RedHat) or [packman](http://packman.links2linux.org/) (SUSE) where you can get complete packages (your
-distribution will usually provide instructions for this). The packages
-needed may be "libav\*" or "ffmpeg\*" packages: the GStreamer libav plugin package does not contain any codecs itself, it just provides a way
+because even though gstreamer-libav is installed. it is incomplete because some plugin features are missing: "`gst-inspect-1.0 | grep avdec_aac`" will
+show if avdec_aac is available. Unlike other GStreamer plugins, the libav plugin is a front end to FFmpeg codecs which provide avdec_*.
+Some distributions (RedHat, SUSE, etc) provide incomplete versions of FFmpeg because of patent issues with codecs used by
+certain plugins. In those cases there will be some "extra package" provider like [RPM fusion](https://rpmfusion.org) (RedHat),
+[packman](http://packman.links2linux.org/) (SUSE) where you can get complete packages (your
+distribution will usually provide instructions for this, Mageia puts them in an optional "tainted" repo). The packages
+needed may be "ffmpeg\*" or "libav\*" packages: the GStreamer libav plugin package does not contain any codecs itself, it just provides a way
for GStreamer to use ffmpeg/libav codec libraries which must be installed separately. For similar reasons, distributions may ship incomplete packages
-of GStreamer "plugins-bad", which is where "license-problematical" plugins go.
+of GStreamer "plugins-bad".
To troubleshoot GStreamer execute "export GST_DEBUG=2"
to set the GStreamer debug-level environment-variable in the terminal
@@ -1058,8 +1079,11 @@ sourceVersion 380.20.1 (an AppleTV 4K 1st gen, introduced 2017, running
tvOS 12.2.1), so it does not seem to matter what UxPlay claims to be.
-
# Changelog
+1.65.1 2023-07-22 Add RPM spec file; add graceful exit if required gstreamer libav feature "avdec_aac" is
+ missing: (this occurs in RPM-based distributions that ship an incomplete FFmpeg for Patent
+ or License reasons, and rely on users installing an externally-supplied complete FFmpeg).
+
1.65 2023-06-03 Eliminate pair_setup part of connection protocol to allow faster connections with clients
(thanks to @shuax #176 for this discovery); to revert, uncomment a line in lib/dnssdint.h.
Disconnect from audio device when connection closes, to not block its use by other apps if
diff --git a/README.txt b/README.txt
index 2599f70..277b6c7 100644
--- a/README.txt
+++ b/README.txt
@@ -37,6 +37,23 @@ status](https://repology.org/badge/vertical-allrepos/uxplay.svg)](https://repolo
"`sudo pkg install uxplay`". Also available on Arch-based systems
through AUR.
+- **NEW**: while no RPM-based distributions have yet packaged UxPlay,
+ a RPM "specfile" **uxplay.spec** is now provided with recent
+ [releases](https://github.com/FDH2/UxPlay/releases) (see their
+ "Assets"), and can also be found in the UxPlay source top directory.
+ To build a RPM package, install rpmdevtools, create a rpmbuild tree
+ with "`rpmdev-setuptree`", and copy uxplay.spec into
+ `~/rpmbuild/SPECS`. In that directory, run
+ "`rpmdev-spectool -g uxplay.spec`" to download the corresponding
+ source file `uxplay-*.tar.gz`, which should then be moved into
+ `~/rpmbuild/SOURCES`; then run "`rpmbuild -ba uxplay.spec`" (you
+ will need to install any required dependencies this reports). This
+ should create an installable uxplay RPM package in a subdirectory of
+ `~/rpmbuild/RPMS`. (**uxplay.spec** is tested on Fedora 38, Rocky
+ Linux 9.2, OpenSUSE Leap 15.5, and Mageia 9; it can be easily
+ modified to include dependency lists for other RPM-based
+ distributions.)
+
- On Linux and \*BSD the mDNS/DNS-SD (Bonjour/ZeroConf) local network
services needed by UxPlay are usually provided by Avahi: **if there
is a firewall on the server that will host UxPlay, make sure the
@@ -80,12 +97,12 @@ UxPlay is tested on a number of systems, including (among others) Debian
(10 "Buster", 11 "Bullseye", 12 "Bookworm"), Ubuntu (20.04 LTS, 22.04
LTS, 23.04; also Ubuntu derivatives Linux Mint 20.3, Pop!\_OS 22.04
(NVIDIA edition)), Red Hat and clones (Fedora 38, Rocky Linux 9.2),
-openSUSE 15.4, Arch Linux 23.05, macOS 13.3 (Intel and M2), FreeBSD
-13.2, Windows 10 and 11 (64 bit).
+Mageia 9, openSUSE 15.5, Arch Linux 23.05, macOS 13.3 (Intel and M2),
+FreeBSD 13.2, Windows 10 and 11 (64 bit).
On Raspberry Pi 4 model B, it is tested on Raspberry Pi OS (Bullseye)
(32- and 64-bit), Ubuntu 22.04 LTS and 23.04, Manjaro RPi4 23.02, and
-(without hardware video decoding) on openSUSE 15.4. Also tested on
+(without hardware video decoding) on openSUSE 15.5. Also tested on
Raspberry Pi 3 model B+.
Its main use is to act like an AppleTV for screen-mirroring (with audio)
@@ -289,6 +306,11 @@ GStreamer plugins must first be installed).
### Building on non-Debian Linux and \*BSD
+**For those with RPM-based distributions, a RPM spec file uxplay.spec is
+also available for building a rpm package with rpmbuild** (tested on
+Fedora 38, Rocky Linux 9.2 (RHEL clone), OpenSUSE 15.5, and Mageia 9;
+see "Packaging Status" section)
+
- **Red Hat, or clones like CentOS (now continued as Rocky Linux or
Alma Linux):** (sudo dnf install, or sudo yum install) openssl-devel
libplist-devel avahi-compat-libdns_sd-devel gstreamer1-devel
@@ -296,6 +318,9 @@ GStreamer plugins must first be installed).
*(some of these may be in the "CodeReady" add-on repository, called
"PowerTools" by clones)*
+- **Mageia:** Same as Red Hat, except "gstreamer1-" becomes
+ "gstreamer1.0-".
+
- **openSUSE:** (sudo zypper install) libopenssl-3-devel (formerly
libopenssl-devel) libplist-2_0-devel (formerly libplist-devel)
avahi-compat-mDNSResponder-devel gstreamer-devel
@@ -349,6 +374,13 @@ installed, depending on how your audio is set up.
as RPM Fusion; if this is not installed, uxplay will fail to start,
with error: **no element "avdec_aac"** \]*.
+- **Mageia:** (sudo dnf install, or sudo yum install)
+ gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi
+ for Intel/AMD graphics). *Install ffmpeg from the "tainted"
+ repository (so gstreamer-1.0-libav can provide the required plugin
+ avdec_aac), which also provides a more complete
+ gstreamer1.0-plugins-bad.*
+
- **openSUSE:** (sudo zypper install) gstreamer-plugins-libav
gstreamer-plugins-bad (+ gstreamer-plugins-vaapi for Intel/AMD
graphics). *In some cases, you may need to use gstreamer or libav\*
@@ -1246,19 +1278,22 @@ cache.
If it fails to start with an error like '`no element "avdec_aac"`' this
is because even though gstreamer-libav is installed. it is incomplete
-because some plugins are missing: "`gst-inspect-1.0 | grep avdec_aac`"
-will show if avdec_aac is available. Some distributions (RedHat, SUSE,
-etc) provide incomplete versions of libav because of patent issues with
-codecs used by certain plugins. In those cases there will be some "extra
-package" provider like [RPM fusion](https://rpmfusion.org) (RedHat) or
+because some plugin features are missing:
+"`gst-inspect-1.0 | grep avdec_aac`" will show if avdec_aac is
+available. Unlike other GStreamer plugins, the libav plugin is a front
+end to FFmpeg codecs which provide avdec\_\*. Some distributions
+(RedHat, SUSE, etc) provide incomplete versions of FFmpeg because of
+patent issues with codecs used by certain plugins. In those cases there
+will be some "extra package" provider like [RPM
+fusion](https://rpmfusion.org) (RedHat),
[packman](http://packman.links2linux.org/) (SUSE) where you can get
complete packages (your distribution will usually provide instructions
-for this). The packages needed may be "libav\*" or "ffmpeg\*" packages:
-the GStreamer libav plugin package does not contain any codecs itself,
-it just provides a way for GStreamer to use ffmpeg/libav codec libraries
-which must be installed separately. For similar reasons, distributions
-may ship incomplete packages of GStreamer "plugins-bad", which is where
-"license-problematical" plugins go.
+for this, Mageia puts them in an optional "tainted" repo). The packages
+needed may be "ffmpeg\*" or "libav\*" packages: the GStreamer libav
+plugin package does not contain any codecs itself, it just provides a
+way for GStreamer to use ffmpeg/libav codec libraries which must be
+installed separately. For similar reasons, distributions may ship
+incomplete packages of GStreamer "plugins-bad".
To troubleshoot GStreamer execute "export GST_DEBUG=2" to set the
GStreamer debug-level environment-variable in the terminal where you
@@ -1351,6 +1386,12 @@ what UxPlay claims to be.
# Changelog
+1.65.1 2023-07-22 Add RPM spec file; add graceful exit if required
+gstreamer libav feature "avdec_aac" is missing: (this occurs in
+RPM-based distributions that ship an incomplete FFmpeg for Patent or
+License reasons, and rely on users installing an externally-supplied
+complete FFmpeg).
+
1.65 2023-06-03 Eliminate pair_setup part of connection protocol to
allow faster connections with clients (thanks to @shuax #176 for this
discovery); to revert, uncomment a line in lib/dnssdint.h. Disconnect
diff --git a/uxplay.spec b/uxplay.spec
new file mode 100644
index 0000000..634671d
--- /dev/null
+++ b/uxplay.spec
@@ -0,0 +1,101 @@
+Name: uxplay
+Version: 1.65.1
+Release: 1%{?dist}
+
+%define gittag v%{version}
+
+Summary: AirPlay-Mirror and AirPlay-Audio server
+License: GPLv3+
+URL: https://github.com/FDH2/UxPlay
+Source0: https://github.com/FDH2/UxPlay/archive/%{gittag}/%{name}-%{version}.tar.gz
+
+Packager: UxPlay maintainer
+
+BuildRequires: cmake >= 3.4.1
+BuildRequires: make
+BuildRequires: gcc
+BuildRequires: gcc-c++
+Requires: avahi
+
+#RedHat and clones
+%if %{defined fedora} || %{defined rhel}
+BuildRequires: pkgconf
+BuildRequires: openssl-devel >= 3.0
+BuildRequires: libplist-devel >= 2.0
+BuildRequires: avahi-compat-libdns_sd-devel
+BuildRequires: gstreamer1-devel
+BuildRequires: gstreamer1-plugins-base-devel
+Requires: gstreamer1-plugins-base
+Requires: gstreamer1-plugins-good
+Requires: gstreamer1-plugins-bad-free
+Requires: gstreamer1-libav
+%endif
+
+#Mageia
+%if %{defined mkrel}
+BuildRequires: pkgconf
+BuildRequires: openssl-devel >= 3.0
+BuildRequires: libplist-devel >= 2.0
+BuildRequires: avahi-compat-libdns_sd-devel
+BuildRequires: gstreamer1.0-devel
+BuildRequires: gstreamer1.0-plugins-base-devel
+Requires: gstreamer1.0-plugins-base
+Requires: gstreamer1.0-plugins-good
+Requires: gstreamer1.0-plugins-bad
+Requires: gstreamer1.0-libav
+%endif
+
+#SUSE
+%if %{defined suse_version}
+BuildRequires: pkg-config
+BuildRequires: libopenssl-3-devel
+BuildRequires: libplist-2_0-devel
+BuildRequires: avahi-compat-mDNSResponder-devel
+BuildRequires: gstreamer-devel
+BuildRequires: gstreamer-plugins-base-devel
+Requires: gstreamer-plugins-base
+Requires: gstreamer-plugins-good
+Requires: gstreamer-plugins-bad
+Requires: gstreamer-plugins-libav
+%endif
+
+%description
+An AirPlay2 Mirror and AirPlay2 Audio (but not Video) server that provides
+screen-mirroring (with audio) of iOS/MacOS clients in a display window on
+the server host (which can be shared using a screen-sharing application);
+Apple Lossless Audio (ALAC) (e.g.,iTunes) can be streamed from client to
+server in non-mirror mode
+
+%prep
+
+%autosetup -n UxPlay-%{version}
+
+%cmake -DCMAKE_INSTALL_DOCDIR=%{_docdir}/%{name}
+%cmake_build
+
+%if %{defined suse_version}
+#suse macro cmake_install installs from _topdir/build (misses docs in _topdir)
+cd ..
+%endif
+
+%cmake_install
+
+%files
+%{_bindir}/uxplay
+%{_mandir}/man1/uxplay.1*
+
+%doc
+%{_docdir}/%{name}/README.txt
+%{_docdir}/%{name}/README.html
+%{_docdir}/%{name}/README.md
+
+%license
+%{_docdir}/%{name}/LICENSE
+%{_docdir}/%{name}/llhttp/LICENSE-MIT
+
+
+%changelog
+* Thu Jul 20 2023 UxPlay maintainer
+ Initial uxplay.spec: tested on Fedora 38, Rocky Linux 9.2, OpenSUSE
+ Leap 15.5, Mageia 9.
+-