edit README discussion of old protocol clients

This commit is contained in:
fduncanh
2022-01-03 00:02:03 -05:00
parent 006f21a1ba
commit c8047afcf1
3 changed files with 39 additions and 39 deletions

View File

@@ -99,9 +99,9 @@
<h3 id="gstreamer-issues-missing-plugins-etc.">4. GStreamer issues (missing plugins, etc.):</h3>
<p>To troubleshoot GStreamer execute “export GST_DEBUG=2” to set the GStreamer debug-level environment-variable in the terminal where you will run uxplay, so that you see warning and error messages; (replace “2” by “4” to see much (much) more of what is happening inside GStreamer). Run “gst-inspect-1.0” to see which GStreamer plugins are installed on your system.</p>
<p>Some extra GStreamer packages for special plugins may need to be installed (or reinstalled: a user using a Wayland display system as an alternative to X11 reported that after reinstalling Lubuntu 18.4, UxPlay would not work until gstreamer1.0-x was installed, presumably for Waylands X11-compatibility mode). Different distributions may break up GStreamer 1.x into packages in different ways; the packages listed above in the build instructions should bring in other required GStreamer packages as dependencies, but will not install all possible plugins.</p>
<h3 id="failure-to-decrypt-all-video-andor-audio-streams-from-old-or-non-apple-clients">5. Failure to decrypt ALL video and/or audio streams from old or non-Apple clients:</h3>
<p>This triggers error messages, and will be probably due to use of an incorrect protocol for getting the AES decryption key from the client. This happened when a user tried to use the Windows AirPlay-emulator client <em>AirMyPC</em> with UxPlay. It turned out that <em>AirMyPC</em> used an older less-encrypted protocol similar to AirPlay1, relying only on Apples “FairPlay” encryption of the AES key used to decrypt the encrypted audio stream from the client (and which is also used as part of the video decryption); on top of FairPlay encryption, AirPlay2 adds a hash of the AES key with a “shared secret” created in the initial handshake between client and server. This hash is omitted in the older protocol used by <em>AirMyPC</em>, which is detected using the “User Agent” string it reports: “AirMyPC/2.0”. The client User Agent string is shown in uxplays terminal output; if it is suspected that some other old or non-Apple client is also using this modified protocol, you can add its “User Agent” string to <code>OLD_PROTOCOL_CLIENT_USER_AGENT_LIST</code> in lib/global.c, and rebuild UxPlay.</p>
<p>Note that Uxplay declares itself to be an AppleTV2,1 with a sourceVersion 220.68 taken from an AppleTV3,1; this can also be changed in global.h. (It is crucial for UxPlay to declare this old value of sourceVersion, as this prompts the Apple client to use the iOS 12 “legacy” protocol to make the connection with the UxPlay server; it is probably not necessary for UxPlay to claim to be such an old AppleTV model.)</p>
<h3 id="failure-to-decrypt-all-video-and-audio-streams-from-old-or-non-apple-clients">5. Failure to decrypt ALL video and audio streams from old or non-Apple clients:</h3>
<p>This triggers an unending stream of error messages, and means that the audio decryption key (also used in video decryption) was not correctly extracted from data sent by the client. This should not happen for iOS 9.3 or later clients. However, if a client uses the same older version of the protocol that is used by the Windows-based AirPlay client emulator <em>AirMyPC</em>, the protocol can be switched to the older version by the setting <code>OLD_PROTOCOL_CLIENT_USER_AGENT_LIST</code> in lib/global.h. UxPlay reports the clients “User Agent string when it connects. If some other client also fails to decrypt all audio and video, try adding its “User Agent” string in place of “xxx” in the entry “AirMyPC/2.0;xxx” in global.h and rebuild uxplay.</p>
<p>Note that Uxplay declares itself to be an AppleTV2,1 with a sourceVersion 220.68; this can also be changed in global.h. It is crucial for UxPlay to declare this old value of sourceVersion, as this prompts the Apple client to use a less-encrypted “legacy” protocol needed by third-generation Apple TVs, which are 32-bit devices that cannot run modern tvOS; it is probably not necessary for UxPlay to claim to be such an old AppleTV model.</p>
<h1 id="changelog">ChangeLog</h1>
<p>1.44 2021-12-13 Omit hash of aeskey with ecdh_secret for an AirMyPC client; make an internal rearrangement of where this hash is done. Fully report all initial communications between client and server in -d debug mode. Replace decodebin in GStreamer video pipeline by h264-specific elements.</p>
<p>1.43 2021-12-07 Various internal changes, such as tests for successful decryption, uniform treatment of informational/debug messages, etc., updated README.</p>

View File

@@ -415,22 +415,27 @@ reported that after reinstalling Lubuntu 18.4, UxPlay would not work until gstr
Different distributions may break up GStreamer 1.x into packages in different ways; the packages listed above in the build instructions should bring in
other required GStreamer packages as dependencies, but will not install all possible plugins.
### 5. Failure to decrypt ALL video and/or audio streams from old or non-Apple clients:
### 5. Failure to decrypt ALL video and audio streams from old or non-Apple clients:
This triggers error messages, and will be probably due to use of an incorrect protocol for getting the AES decryption key from the
client. This happened when a user tried to use the Windows AirPlay-emulator client _AirMyPC_ with UxPlay. It turned out that _AirMyPC_ used an older
less-encrypted protocol similar to AirPlay1, relying only on Apple's "FairPlay" encryption of the AES key used to decrypt the encrypted
audio stream from the client (and which is also used as part of the video decryption); on top of FairPlay encryption, AirPlay2 adds a hash of the AES key
with a "shared secret" created in the initial handshake between client and server. This hash is omitted in the older protocol used by _AirMyPC_,
which is detected using the "User Agent" string it reports: "AirMyPC/2.0". The client User Agent string is shown in uxplay's terminal output; if it is suspected that
some other old or non-Apple client is also using this modified protocol, you can add its "User Agent" string to ```OLD_PROTOCOL_CLIENT_USER_AGENT_LIST``` in lib/global.c,
and rebuild UxPlay.
This triggers an unending stream of error messages, and means that the
audio decryption key (also used in video decryption)
was not correctly extracted from data sent by the client.
This should not happen for iOS 9.3 or later clients. However, if a client
uses the same older version of the protocol that is used by the Windows-based
AirPlay client emulator _AirMyPC_, the protocol can be switched to the older version
by the setting ```OLD_PROTOCOL_CLIENT_USER_AGENT_LIST``` in lib/global.h.
UxPlay reports the client's "User Agent" string when it connects. If
some other client also fails to decrypt all audio and video, try adding
its "User Agent" string in place of "xxx" in the entry "AirMyPC/2.0;xxx"
in global.h and rebuild uxplay.
Note that Uxplay declares itself to be an AppleTV2,1 with a
sourceVersion 220.68 taken from an AppleTV3,1;
this can also be changed in global.h. (It is crucial for UxPlay to declare this old value of sourceVersion, as this prompts the Apple client to use
the iOS 12 "legacy" protocol to make the connection with the UxPlay server; it is probably not necessary for UxPlay to
claim to be such an old AppleTV model.)
sourceVersion 220.68;
this can also be changed in global.h. It is crucial for UxPlay to
declare this old value of sourceVersion, as this prompts the Apple client to use
a less-encrypted "legacy" protocol needed by third-generation Apple TV's, which are 32-bit
devices that cannot run modern tvOS; it is probably
not necessary for UxPlay to claim to be such an old AppleTV model.
# ChangeLog
1.44 2021-12-13 Omit hash of aeskey with ecdh_secret for an AirMyPC client; make an internal rearrangement of where this hash is

View File

@@ -525,32 +525,27 @@ GStreamer 1.x into packages in different ways; the packages listed above
in the build instructions should bring in other required GStreamer
packages as dependencies, but will not install all possible plugins.
### 5. Failure to decrypt ALL video and/or audio streams from old or non-Apple clients:
### 5. Failure to decrypt ALL video and audio streams from old or non-Apple clients:
This triggers error messages, and will be probably due to use of an
incorrect protocol for getting the AES decryption key from the client.
This happened when a user tried to use the Windows AirPlay-emulator
client *AirMyPC* with UxPlay. It turned out that *AirMyPC* used an older
less-encrypted protocol similar to AirPlay1, relying only on Apple's
"FairPlay" encryption of the AES key used to decrypt the encrypted audio
stream from the client (and which is also used as part of the video
decryption); on top of FairPlay encryption, AirPlay2 adds a hash of the
AES key with a "shared secret" created in the initial handshake between
client and server. This hash is omitted in the older protocol used by
*AirMyPC*, which is detected using the "User Agent" string it reports:
"AirMyPC/2.0". The client User Agent string is shown in uxplay's
terminal output; if it is suspected that some other old or non-Apple
client is also using this modified protocol, you can add its "User
Agent" string to `OLD_PROTOCOL_CLIENT_USER_AGENT_LIST` in lib/global.c,
and rebuild UxPlay.
This triggers an unending stream of error messages, and means that the
audio decryption key (also used in video decryption) was not correctly
extracted from data sent by the client. This should not happen for iOS
9.3 or later clients. However, if a client uses the same older version
of the protocol that is used by the Windows-based AirPlay client
emulator *AirMyPC*, the protocol can be switched to the older version by
the setting `OLD_PROTOCOL_CLIENT_USER_AGENT_LIST` in lib/global.h.
UxPlay reports the client's "User Agent" string when it connects. If
some other client also fails to decrypt all audio and video, try adding
its "User Agent" string in place of "xxx" in the entry "AirMyPC/2.0;xxx"
in global.h and rebuild uxplay.
Note that Uxplay declares itself to be an AppleTV2,1 with a
sourceVersion 220.68 taken from an AppleTV3,1; this can also be changed
in global.h. (It is crucial for UxPlay to declare this old value of
sourceVersion, as this prompts the Apple client to use the iOS 12
"legacy" protocol to make the connection with the UxPlay server; it is
probably not necessary for UxPlay to claim to be such an old AppleTV
model.)
sourceVersion 220.68; this can also be changed in global.h. It is
crucial for UxPlay to declare this old value of sourceVersion, as this
prompts the Apple client to use a less-encrypted "legacy" protocol
needed by third-generation Apple TV's, which are 32-bit devices that
cannot run modern tvOS; it is probably not necessary for UxPlay to claim
to be such an old AppleTV model.
ChangeLog
=========