I've been reading up recently on different ways of wirelessly streaming media. At first I ignored bluetooth connections because of the quality, but then I started reading about aptX, which sounded pretty good (no pun intended). The only problem is that I have no idea if my devices support aptX - one of them being a Galaxy Player 4.0 (it is totally OK if you don't know what that is) with a custom ROM, where I'm figuring that it's probably not supported. Here's my question, though - the way I understand it, aptX is only a sort of codec that is used during the transmission via Bluetooth - so I'm figuring that it should, in theory at least, be possible to install this aptX codec on any computer or phone. Obviously the company/companies behind aptX are not advertising it this way - but is it still possible to do this somehow?
At its core, Apt-X is "just" a particular encoding for audio, taking advantage of clauses in the Bluetooth spec that allow vendor extensions.
In effect, from a hardware standpoint, all you technically need is a Bluetooth radio supporting the data rates and physical layer transmission modes that come with Bluetooth 3.0 (or later, since all the later specs are backwards compatible). It is difficult to impossible to retrofit Bluetooth 3.0 support onto a 2.1 or earlier radio due to hardware limitations, but once you have a Bluetooth 3.0 stack, adding apt-X is simply a software challenge.
So the Bluetooth stack for apt-X looks something like this:
- Bluetooth 3.0 "base platform" (this includes physical radio specifications, link-layer protocols, minimum data transfer rates, connectivity and authentication, and eventually the A2DP stereo audio profile).
- The apt-X codec, or an implementation thereof, which sits on top of A2DP and is advertised as being available. The client device and the host negotiate on what codec to use, then decide to use apt-X as the preferred codec if it's available on both sides.
Bob is 100% correct that doing this on an Android device, even with root, would be nigh-on impossible, because of how deeply the Bluetooth stack is buried in the system.
Furthermore, obtaining a copy of the apt-X codec is extremely difficult if you don't already have one. Possible issues include:
- How do you get a copy of binaries of the apt-X codec for your platform?
- Assuming you get the binaries, what's the chance they're compatible with your Bluetooth stack and toolchain? If any library versions, etc. are incompatible, it won't work.
- Licensing. CSR licenses apt-X on a per-device basis. If they were aware of you doing this, they might have cause to go after you on legal grounds for copyright violation.
- If you were to try and implement your own version of the apt-X codec, how are you going to find out how to do this, without an open standard? apt-X is proprietary, so you'd have to reverse engineer their code (which may be illegal).
- Assuming you were able to find a working implementation of apt-X, how would you then integrate that into the Bluetooth stack of your device, which can vary widely in implementation? You'd have to compile it, fix any interface or header errors, linkage errors, etc.
- Finally, even if you get all the software 100% working and everything is great, you could still be strung up on patent license violations in the extremely likely instance of CSR having exclusive software patents on some algorithms or ideas used in the apt-X codec. Think you can't patent an idea? Think again. Software OEMs do it all the time.
These days, the only reliable way to get apt-X is to buy devices (host devices and client devices) that actively advertise built-in apt-X support. They will probably have a CSR logo on the device or in the marketing literature advertising this support. Absent that, it's very unlikely that apt-X support has been added, and you're probably using something like SBC (or possibly AAC if you're lucky).