updates to README

This commit is contained in:
fduncanh
2021-11-13 19:32:07 -05:00
parent 3507f84503
commit a5b4a3d7d3
3 changed files with 63 additions and 44 deletions

View File

@@ -1,14 +1,14 @@
<h1 id="uxplay-1.41">UxPlay 1.41</h1>
<p>This project is a GPLv3 unix AirPlay server which now also works on macOS. Its main use is to act like an AppleTV for screen-mirroring (with audio) of iOS/macOS clients (iPads, iPhones, MacBooks) in a window on the server display (with the possibility of sharing that window on screen-sharing applications such as Zoom) on a host running Linux, macOS, or other unix, using Apples AirPlay Mirror protocol first available in iOS 5. (Details of what is known about the AirPlay2 protocol can be found <a href="https://github.com/SteeBono/airplayreceiver/wiki/AirPlay2-Protocol">here</a> and <a href="https://emanuelecozzi.net/docs/airplay2">here</a>).</p>
<h1 id="uxplay-1.41-airplayairplay-mirror-server-for-linux-macos-and-unix.">UxPlay 1.41: AirPlay/AirPlay-Mirror server for Linux, macOS, and Unix.</h1>
<p>This project is a GPLv3 unix AirPlay server which now also works on macOS. Its main use is to act like an AppleTV for screen-mirroring (with audio) of iOS/macOS clients (iPads, iPhones, MacBooks) in a window on the server display (with the possibility of sharing that window on screen-sharing applications such as Zoom) on a host running Linux, macOS, or other unix, using Apples AirPlay Mirror protocol first available in iOS 5. As well as screen mirroring, when not mirroring the screen it can also play Apple Lossless (ALAC) streamed from the client using the audio-only Airplay protocal. (Details of what is known about the AirPlay2 protocol can be found <a href="https://github.com/SteeBono/airplayreceiver/wiki/AirPlay2-Protocol">here</a> and <a href="https://emanuelecozzi.net/docs/airplay2">here</a>).</p>
<p>The UxPlay server and its client must be on the same local area network, on which a <strong>Bonjour/Zeroconf mDNS/DNS-SD server</strong> is also running (only DNS-SD “Service Discovery” service is necessary, it is not necessary that the local network also be of the “.local” mDNS-based type). On Linux and BSD Unix servers, this is usually provided by <a href="https://www.avahi.org">Avahi</a>, through the avahi-daemon service, and is included in most Linux distributions (this service can also be provided by macOS, iOS or Windows servers).</p>
<p><em>New: UxPlay &gt; 1.38 now also supports the Airplay audio-only protocol as well as AirPlay Mirror protocol, and (when the client screen is not being mirrored) can play Apple Lossless (ALAC) 44100/16/2 audio streamed from the client in 2-channel stereo without video (the accompanying cover-art and metadata is received by the server, but not displayed). The initial connection to the client can be in AirPlay audio mode, or an initial Airplay Mirror connection can be changed to Airplay audio by closing the Mirror window and reconnecting in audio-only mode (this changes back to AAC audio if screen mirroring is restarted).</em></p>
<p><em><strong>New:</strong> UxPlay &gt; 1.38 now also supports the Airplay audio-only protocol as well as AirPlay Mirror protocol, and (when the client screen is not being mirrored) can play Apple Lossless (ALAC) 44100/16/2 audio streamed from the client in 2-channel stereo without video (the accompanying cover-art and metadata is received by the server, but not displayed). The initial connection to the client can be in AirPlay audio mode, or an initial Airplay Mirror connection can be switched to Airplay audio by closing the Mirror window and reconnecting in audio-only mode (this changes back to AAC audio if screen mirroring is (re)started).</em></p>
<p>UxPlay 1.41 is based on https://github.com/FD-/RPiPlay, with GStreamer integration from https://github.com/antimof/UxPlay. (UxPlay only uses GStreamer, and does not contain the alternative Raspberry-Pi-specific audio and video renderers also found in RPiPlay.) Tested on Ubuntu 20.04, Linux Mint 20.2, OpenSUSE 15.3, macOS 10.15.</p>
<p>Features: 1. Based on Gstreamer. 2. Video and audio are supported out of the box. 3. Gstreamer decoding is plugin agnostic. Uses accelerated decoders if available. VAAPI is preferable, (but dont use VAAPI with nVidia). 4. Automatic screen orientation.</p>
<h1 id="getting-uxplay">Getting UxPlay:</h1>
<p>Either download and unzip <a href="https://github.com/FDH2/UxPlay/archive/refs/heads/master.zip">UxPlay-master.zip</a>, or (if git is installed): “git clone https://github.com/FDH2/UxPlay”.</p>
<p><em>This is a pull request on the original site https://github.com/antimof/UxPlay ; it may or may not ever get committed into the codebase on the antimof site, as that project appears to no longer be active. If the pull request ever gets committed, replace “FDH2” by “antimof” in the above.</em></p>
<h1 id="building-this-version">Building this version:</h1>
<p>(Instructions for Ubuntu; adapt these for other Linuxes; for macOS, see below).</p>
<h1 id="building-this-version-linux">Building this version (Linux):</h1>
<p>(Instructions for Debian/Ubuntu; adapt these for other Linuxes; for macOS, see below).</p>
<p>You need a C/C++ compiler (e.g. g++) with the standard development libraries installed.</p>
<p>Make sure that cmake&gt;=3.4.1 and pkg-config are also installed: “sudo apt-get install cmake pkg-config”. In a terminal window, change directories to the source directory of the downloaded source code (“UxPlay-master” for zipfile downloads, “UxPlay” for “git clone” downloads), then do</p>
<ol type="1">
@@ -25,7 +25,8 @@
<p>_If you cannot find a libplist-2.x package that installs on your older distribution, and you dont wish to upgrade, see the instructions below (in the macOS section) on building libplist from source (you need autoconf, automake, libtool, and may need to also install some libpython*-dev package) but (unlike the statically-linked macOS case) do not uninstall the libplist library after building uxplay; it must remain installed. It is in /usr/local/lib. If uxplay fails to find libplist when you run it, this is probably because /usr/local/lib is not in the library path (by default, this is the case in ubuntu). To fix this, run “sudo ldconfig” (you might also need to create a file /etc/ld.so.conf.d/libplist.conf containing the text “/usr/local/lib” before running ldconfig) to permanently add /usr/local/lib to the library path._</p>
<p><strong>Red Hat, Fedora, CentOS:</strong> (sudo yum install) openssl-devel libplist-devel avahi-compat-libdns_sd-devel (+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).</p>
<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).</p>
<p><strong>macOS</strong> (Intel X86_64 Macs only):</p>
<h1 id="building-this-version-macos">Building this version (macOS):</h1>
<p><strong>(Only tested on ntel X86_64 Macs)</strong></p>
<p><em>Note: A native AirPlay Server feature is included in upcoming macOS 12 Monterey, but UxPlay can run on older macOS systems that will not be able to run Monterey.</em></p>
<p>These instructions for macOS asssume that the Xcode command-line developer tools are installed (if Xcode is installed, open the Terminal, type “sudo xcode-select install” and accept the conditions).</p>
<p>It is also assumed that CMake &gt;= 3.13 is installed: this can be done with package managers <a href="http://www.macports.org">MacPorts</a>, <a href="http://finkproject.org">Fink</a> or <a href="http://brew.sh">Homebrew</a>, or by a download from <a href="https://cmake.org/download/">https://cmake.org/download/</a>.</p>
@@ -59,14 +60,14 @@
<p><strong>-o</strong> turns on an “overscanned” option for the display window. This reduces the image resolution by using some of the pixels requested by option -s wxh (or their default values 1920x1080) by adding an empty boundary frame of unused pixels (which would be lost in a full-screen display that overscans, and is not displayed by gstreamer). Recommendation: <strong>dont use this option</strong> unless there is some special reason to use it.</p>
<p><strong>-p</strong> allows you to select the network ports used by UxPlay (these need to be opened if the server is behind a firewall). By itself, -p sets “legacy” ports TCP 7100, 7000, 7001, UDP 6000, 6001, 7011. -p n (e.g. -p 35000) sets TCP and UDP ports n, n+1, n+2. -p n1,n2,n3 (comma-separated values) sets each port separately; -p n1,n2 sets ports n1,n2,n2+1. -p tcp n or -p udp n sets just the TCP or UDP ports. Ports must be in the range [1024-65535].</p>
<p>If the -p option is not used, the ports are chosen dynamically (randomly), which will not work if a firewall is running.</p>
<p><strong>-m</strong> generates a random MAC address to use instead of the true hardware MAC number of the computers network card. (Different server_name, MAC addresses, and network ports are needed for each running uxplay if you attempt to run two instances of uxplay on the same computer.) On macOS, random MAC addresses are always used.</p>
<p><strong>-m</strong> generates a random MAC address to use instead of the true hardware MAC number of the computers network card. (Different server_name, MAC addresses, and network ports are needed for each running uxplay if you attempt to run two instances of uxplay on the same computer.) If UxPlay fails to fing the true MAC address of the network card (as happens on macOS) a random MAC addresses will be used even if option <strong>-m</strong> was not specifed.</p>
<p>Also: image transforms that had been added to RPiPlay have been ported to UxPlay:</p>
<p><strong>-f {H|V|I}</strong> implements “videoflip” image transforms: H = horizontal flip (right-left flip, or mirror image); V = vertical flip ; I = 180 degree rotation or inversion (which is the combination of H with V).</p>
<p><strong>-r {R|L}</strong> 90 degree Right (clockwise) or Left (counter-clockwise) rotations; these are carried out after any <strong>-f</strong> transforms.</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), or fpsdisplaysink (which shows the streaming framerate in fps). Using quotes “…” might allow some parameters to be included with the videosink name. (Some choices of videosink might not work on your system.)</p>
<p><strong>-vs 0</strong> suppresses display of streamed video, but plays streamed audio. (The clients screen is still mirrored at a reduced rate of 1 frame per second, but is not rendered or displayed.)</p>
<p><strong>-vs 0</strong> suppresses display of streamed video, but plays streamed audio. (The clients screen is still mirrored at a reduced rate of 1 frame per second, but is not rendered or displayed.) This feature (which streams audio in AAC audio format) is now probably unneeded, as UxPlay can now stream superior-quality Apple Lossless audio without video in Airplay non-mirror mode.</p>
<p><strong>-as <em>audiosink</em></strong> chooses the GStreamer audiosink, instead of letting autoaudiosink pick it for you. Some audiosink choices are: pulsesink, alsasink, osssink, oss4sink, and osxaudiosink (for macOS). Using quotes “…” might allow some parameters to be included with the audiosink name. (Some choices of audiosink might not work on your system.)</p>
<p><strong>-as 0</strong> or <strong>-a</strong> suppresses playing of streamed audio, but displays streamed video.</p>
<p><strong>-as 0</strong> (or just <strong>-a</strong>) suppresses playing of streamed audio, but displays streamed video.</p>
<p><strong>-t <em>timeout</em></strong> will cause the server to relaunch (without stopping uxplay) if no connections have been present during the previous <em>timeout</em> seconds. (You may wish to use this because the Server may not be visible to new Clients that were inactive when the Server was launched, and an idle Bonjour registration also eventually becomes unavailable for new connections.) The timer only starts once a Client has first made a mirror connection and then has disconnected with “Stop Mirrroring”. <em>This option should <strong>not</strong> be used if the display window is an OpenGL window on macOS, as such an OpenGL window created by GStreamer does not terminate correctly (it causes a segfault) if it is still open when the GStreamer pipeline is closed.</em></p>
<h1 id="changelog">ChangeLog</h1>
<p>1.41 2021-11-11 Further cleanups of multiple audio format support (internal changes, separated RAOP and GStreamer audio/video startup)</p>
@@ -92,7 +93,7 @@
<li><p>The avahi_compat “nag” warning on startup is suppressed, by placing “AVAHI_COMPAT_NOWARN=1” into the runtime environment when uxplay starts. (This uses a call to putenv() in a form that is believed to be safe against memory leaks, at least in modern Linux; if for any reason you dont want this fix, comment out the line in CMakeLists.txt that activates it when uxplay is compiled.) On macOS, Avahi is not used.</p></li>
<li><p>UxPlay now builds on macOS.</p></li>
<li><p>The hostname of the server running uxplay is now appended to the AirPlay server name, which is now displayed as <em>name</em>@hostname, where <em>name</em> is “UxPlay”, (or whatever is set with the <strong>-n</strong> option).</p></li>
<li><p>Added support for audio-only streaming with original (non-Mirror) AirPlay protocal, with Apple Lossless (ALAC) audio.</p></li>
<li><p>Added support for audio-only streaming with original (non-Mirror) AirPlay protocol, with Apple Lossless (ALAC) audio.</p></li>
</ol>
<h1 id="disclaimer">Disclaimer</h1>
<p>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.</p>

View File

@@ -1,11 +1,13 @@
# UxPlay 1.41
# UxPlay 1.41: AirPlay/AirPlay-Mirror server for Linux, macOS, and Unix.
This project is a GPLv3 unix AirPlay server which now also works on macOS.
Its main use is to act like an AppleTV for screen-mirroring (with audio) of iOS/macOS clients
(iPads, iPhones, MacBooks) in a window on the server display (with the possibility of
sharing that window on screen-sharing applications such as Zoom)
on a host running Linux, macOS, or other unix, using Apple's AirPlay Mirror protocol first available in iOS 5.
As well as screen mirroring, when not mirroring the screen it can also play Apple Lossless (ALAC) streamed from the client
using the audio-only Airplay protocal.
(Details of what is known about the AirPlay2 protocol can be found [here](https://github.com/SteeBono/airplayreceiver/wiki/AirPlay2-Protocol) and
[here](https://emanuelecozzi.net/docs/airplay2)).
@@ -16,11 +18,11 @@ On Linux and BSD Unix servers, this is usually provided by [Avahi](https://www.a
through the avahi-daemon service, and is included in most Linux distributions (this
service can also be provided by macOS, iOS or Windows servers).
_New: UxPlay > 1.38 now also supports the Airplay audio-only protocol as well as AirPlay Mirror protocol, and (when the client screen is not being mirrored)
_**New:** UxPlay > 1.38 now also supports the Airplay audio-only protocol as well as AirPlay Mirror protocol, and (when the client screen is not being mirrored)
can play Apple Lossless (ALAC)
44100/16/2 audio streamed from the client in 2-channel stereo without video (the accompanying cover-art and metadata is received by the server,
but not displayed). The initial connection to the client can be in AirPlay audio mode, or an initial Airplay Mirror connection can be changed to
Airplay audio by closing the Mirror window and reconnecting in audio-only mode (this changes back to AAC audio if screen mirroring is restarted)._
but not displayed). The initial connection to the client can be in AirPlay audio mode, or an initial Airplay Mirror connection can be switched to
Airplay audio by closing the Mirror window and reconnecting in audio-only mode (this changes back to AAC audio if screen mirroring is (re)started)._
UxPlay 1.41 is based on https://github.com/FD-/RPiPlay, with GStreamer integration from
https://github.com/antimof/UxPlay.
@@ -46,9 +48,9 @@ get committed into the codebase on the antimof site, as that
project appears to no longer be active.
If the pull request ever gets committed, replace "FDH2" by "antimof" in the above.*
# Building this version:
# Building this version (Linux):
(Instructions for Ubuntu; adapt these for other Linuxes; for macOS, see below).
(Instructions for Debian/Ubuntu; adapt these for other Linuxes; for macOS, see below).
You need a C/C++ compiler (e.g. g++) with the standard development libraries installed.
@@ -96,7 +98,10 @@ 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).
**macOS** (Intel X86_64 Macs only):
# Building this version (macOS):
**(Only tested on ntel X86_64 Macs)**
_Note: A native AirPlay Server feature is included in upcoming macOS 12 Monterey,
but UxPlay can run on older macOS systems that will not be able to run Monterey._
@@ -276,7 +281,8 @@ which will not work if a firewall is running.
number of the computer's network card. (Different server_name, MAC
addresses, and network ports are needed for each running uxplay if you
attempt to run two instances of uxplay on the same computer.)
On macOS, random MAC addresses are always used.
If UxPlay fails to fing the true MAC address of the network card (as happens on macOS)
a random MAC addresses will be used even if option **-m** was not specifed.
@@ -297,7 +303,9 @@ Also: image transforms that had been added to RPiPlay have been ported to UxPlay
(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 frame per second, but is not rendered or displayed.)
is still mirrored at a reduced rate of 1 frame per second, but is not rendered or displayed.) This
feature (which streams audio in AAC audio format) is now probably unneeded, as UxPlay can now
stream superior-quality Apple Lossless audio without video in Airplay non-mirror mode.
**-as _audiosink_** chooses the GStreamer audiosink, instead of letting
autoaudiosink pick it for you. Some audiosink choices are: pulsesink, alsasink,
@@ -305,7 +313,7 @@ Also: image transforms that had been added to RPiPlay have been ported to UxPlay
"..." might allow some parameters to be included with the audiosink name.
(Some choices of audiosink might not work on your system.)
**-as 0** or **-a** suppresses playing of streamed audio, but displays streamed video.
**-as 0** (or just **-a**) suppresses playing of streamed audio, but displays streamed video.
**-t _timeout_** will cause the server to relaunch (without stopping uxplay) if no connections
have been present during the previous _timeout_ seconds. (You may wish to use this because the Server may not be
@@ -416,7 +424,7 @@ is compiled.) On macOS, Avahi is not used.
11. The hostname of the server running uxplay is now appended to the AirPlay server name,
which is now displayed as _name_@hostname, where _name_ is "UxPlay", (or whatever is set with the **-n** option).
12. Added support for audio-only streaming with original (non-Mirror) AirPlay protocal, with Apple Lossless (ALAC) audio.
12. Added support for audio-only streaming with original (non-Mirror) AirPlay protocol, with Apple Lossless (ALAC) audio.
# Disclaimer

View File

@@ -1,5 +1,5 @@
UxPlay 1.41
===========
UxPlay 1.41: AirPlay/AirPlay-Mirror server for Linux, macOS, and Unix.
======================================================================
This project is a GPLv3 unix AirPlay server which now also works on
macOS. Its main use is to act like an AppleTV for screen-mirroring (with
@@ -7,8 +7,10 @@ audio) of iOS/macOS clients (iPads, iPhones, MacBooks) in a window on
the server display (with the possibility of sharing that window on
screen-sharing applications such as Zoom) on a host running Linux,
macOS, or other unix, using Apple's AirPlay Mirror protocol first
available in iOS 5. (Details of what is known about the AirPlay2
protocol can be found
available in iOS 5. As well as screen mirroring, when not mirroring the
screen it can also play Apple Lossless (ALAC) streamed from the client
using the audio-only Airplay protocal. (Details of what is known about
the AirPlay2 protocol can be found
[here](https://github.com/SteeBono/airplayreceiver/wiki/AirPlay2-Protocol)
and [here](https://emanuelecozzi.net/docs/airplay2)).
@@ -21,15 +23,15 @@ Linux and BSD Unix servers, this is usually provided by
included in most Linux distributions (this service can also be provided
by macOS, iOS or Windows servers).
*New: UxPlay \> 1.38 now also supports the Airplay audio-only protocol
as well as AirPlay Mirror protocol, and (when the client screen is not
being mirrored) can play Apple Lossless (ALAC) 44100/16/2 audio streamed
from the client in 2-channel stereo without video (the accompanying
cover-art and metadata is received by the server, but not displayed).
The initial connection to the client can be in AirPlay audio mode, or an
initial Airplay Mirror connection can be changed to Airplay audio by
closing the Mirror window and reconnecting in audio-only mode (this
changes back to AAC audio if screen mirroring is restarted).*
***New:** UxPlay \> 1.38 now also supports the Airplay audio-only
protocol as well as AirPlay Mirror protocol, and (when the client screen
is not being mirrored) can play Apple Lossless (ALAC) 44100/16/2 audio
streamed from the client in 2-channel stereo without video (the
accompanying cover-art and metadata is received by the server, but not
displayed). The initial connection to the client can be in AirPlay audio
mode, or an initial Airplay Mirror connection can be switched to Airplay
audio by closing the Mirror window and reconnecting in audio-only mode
(this changes back to AAC audio if screen mirroring is (re)started).*
UxPlay 1.41 is based on https://github.com/FD-/RPiPlay, with GStreamer
integration from https://github.com/antimof/UxPlay. (UxPlay only uses
@@ -55,11 +57,11 @@ into the codebase on the antimof site, as that project appears to no
longer be active. If the pull request ever gets committed, replace
"FDH2" by "antimof" in the above.*
Building this version:
======================
Building this version (Linux):
==============================
(Instructions for Ubuntu; adapt these for other Linuxes; for macOS, see
below).
(Instructions for Debian/Ubuntu; adapt these for other Linuxes; for
macOS, see below).
You need a C/C++ compiler (e.g. g++) with the standard development
libraries installed.
@@ -127,7 +129,10 @@ required GStreamer packages are: gstreamer-devel
gstreamer-plugins-base-devel gstreamer-plugins-libav
gstreamer-plugins-bad (+ gstreamer-plugins-vaapi for Intel graphics).
**macOS** (Intel X86\_64 Macs only):
Building this version (macOS):
==============================
**(Only tested on ntel X86\_64 Macs)**
*Note: A native AirPlay Server feature is included in upcoming macOS 12
Monterey, but UxPlay can run on older macOS systems that will not be
@@ -340,7 +345,9 @@ If the -p option is not used, the ports are chosen dynamically
hardware MAC number of the computer's network card. (Different
server\_name, MAC addresses, and network ports are needed for each
running uxplay if you attempt to run two instances of uxplay on the same
computer.) On macOS, random MAC addresses are always used.
computer.) If UxPlay fails to fing the true MAC address of the network
card (as happens on macOS) a random MAC addresses will be used even if
option **-m** was not specifed.
Also: image transforms that had been added to RPiPlay have been ported
to UxPlay:
@@ -362,7 +369,10 @@ 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
frame per second, but is not rendered or displayed.)
frame per second, but is not rendered or displayed.) This feature (which
streams audio in AAC audio format) is now probably unneeded, as UxPlay
can now stream superior-quality Apple Lossless audio without video in
Airplay non-mirror mode.
**-as *audiosink*** chooses the GStreamer audiosink, instead of letting
autoaudiosink pick it for you. Some audiosink choices are: pulsesink,
@@ -370,8 +380,8 @@ alsasink, osssink, oss4sink, and osxaudiosink (for macOS). Using quotes
"..." might allow some parameters to be included with the audiosink
name. (Some choices of audiosink might not work on your system.)
**-as 0** or **-a** suppresses playing of streamed audio, but displays
streamed video.
**-as 0** (or just **-a**) suppresses playing of streamed audio, but
displays streamed video.
**-t *timeout*** will cause the server to relaunch (without stopping
uxplay) if no connections have been present during the previous
@@ -502,7 +512,7 @@ Improvements since the original UxPlay by antimof:
option).
12. Added support for audio-only streaming with original (non-Mirror)
AirPlay protocal, with Apple Lossless (ALAC) audio.
AirPlay protocol, with Apple Lossless (ALAC) audio.
Disclaimer
==========