mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-15 00:34:05 +09:00
edit README discussion of old protocol clients
This commit is contained in:
@@ -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 Wayland’s 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 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 <em>AirMyPC</em>, 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 <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 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.</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 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.</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>
|
||||
|
||||
31
README.md
31
README.md
@@ -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
|
||||
|
||||
41
README.txt
41
README.txt
@@ -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
|
||||
=========
|
||||
|
||||
Reference in New Issue
Block a user