The various iPlayer implementations use an XML service to find the stream location. This service is found at:{version_pid}

version_pid in turn can be found by querying:{group_pid}

where group_pid is the 8-digit code in the URL of an iPlayer URL, at which you can also find the SWF file used by the iPlayer.

If you have an RTMP client that will send along a SHA256 HMAC of a shared string and the SWF when requested by the server—such as, say, rtmpdump—you now know pretty much all you need to implement a downloader that will fetch the highest quality files available.

The BBC has recently added a stern comment to the top of the mediaselector XML:

This code and data form part of the BBC iPlayer content protection system. Tampering with, removal of, misuse of, or unauthorised use of this code or data constitutes circumvention of the BBC’s content protection measures and may result in legal action. BBC (C) 2010.

Is that a legal opinion? Or just a vain hope? After all, it’s not an effective protection system. I’m not sure it’s even a protection system at all: I’ve just told you everything you need to get past it.