the psp internet radio

main project page

contents

back to top

introduction

the psp provides an "internet radio" feature, where users can download radio players online, for example from the official radio guide or from other sources such as pspradio, and listen to icecast or shoutcast radios.

radio players are in fact web pages, opened in the psp's NetFront internet browser with some special features enabled. the user will get prompted to "enable the plugin embedded in this page", just like when running flash animations, and this will give the web page's javascript code access to special features unique to the PSP, via an "extension plugin".

when downloading a radio player, the psp's browser detects the application/x-psp-radio-skin MIME type or the .prs extension and prompts the user to install the radio. this file seems to use a proprietary format and holds metadata about the radio, including its name and page URL, and a PNG file for the radio's icon in the XMB.

sony provides an official SDK for windows, mac and linux, including documentation for the extension plugin and a script to generate .prs files.

back to top

the prs format

When a user downloads a radio, they download a .prs file. This is an undocumented file format that seems to hold metadata about the radio and its icon. As an example, here is an hexdump of InternetRadioPlayerI.prs.

This PRS file includes:

the file's "magic numbers" seem to be 50 52 53 46 00 01 00 00, which stands for PRSF and the 01.00 version number. the file's unregistered MIME type is application/x-psp-radio-skin.

Sony's official SDK's documentation describes how to use a Python script they provided to generate this PRS file from an XML file. The Python script is in two modules: the prscompiler module uses the cxml module as a base and applies the radio player XML schema on top of it.

From my current understanding, Sony designed an undocumented "compressed XML" format called CXML and uses it for these PSP files. It is not impossible that other files, such as PSP themes, the internal registries, etc. use the same compression method. This format is unrelated to Commerce XML, and its name might be a copyright infringement.

I uploaded those scripts to a separate Git repository and am working on building a modernized encoder and decoder, documenting the format, and possibly sharing the magic headers with file signatures lists as those files seem to be unknown. The next goal would then be to explore both the PSP and PS3's files and see where this format might be used.

back to top

the javascript extension plugin

todo!