Developers     Developer center

Developer center

under hero banner

About PlayReady Apps

Apps for devices which support PlayReady need to acquire and process the PlayReady tokens (provided by ExpressPlay through the app developer’s back-end server). Not all PlayReady-capable devices will look for this token in the same way. Below are some notes which may be helpful during app development on some of these platforms.

Using PlayReady Tokens

The response of the ExpressPlay REST API for PlayReady License Token Request is a JSON payload that contains two fields:“licenseAcquisitionUrl” and “token”

Example:

{
"licenseAcquisitionUrl" : "http://pr.service.expressplay.com/playready/RightsManager.asmx",
"token" : "AQAAAAM7XMMAAABgi9a1RsqqtZFxW_b_xWsb3OH0E-8m6of-4ZYbZFDiG3cQNsUiZnA15T4C61Fx8Z2xJsUZpxFeHZg7zK6HGlA5bb7gLM9WxPKYF1TQPmICNvnJPkhkyyMz0yWqzEC_TzDgVcZ1MaSWIwtz3Ob-oVMDAKNa2oI"
}

The licenseAcquisitionUrl field is the URL at which the PlayReady license server is reachable. Depending on the client platform on which your media application is running, there are different ways to make use of the “token” value to trigger the PlayReady license acquisition:

  1. The most convenient way to use the token is when the application platform on which your application is running provides you with a way to pass the CustomData payload of the PlayReady license request (this is the case, for example, with the Silverlight API, the Chromecast API, the Samsung TV application API, and many others).
    When such an API is available, the result is that the body of the PlayReady SOAP request issued by the PlayReady client will include a <CustomData> element (soap:Envelop/soap:Body/AquireLicense/challenge/Challenge/LA/CustomData in the SOAP body) containing the token value.
  2. The second most common option, when the CustomData method isn’t available (some platforms only let you specify a Smooth Streaming Manifest URL or a DASH MPD URL, but don’t let you specify the CustomData part of the license request), is to pass the token value as a License Acquisition URL query parameter. The method uses a query parameter, ExpressPlayToken=XXXXX, (where XXXX is the value of the token) to the licenseAcquisitionUrl. In our example here, this means that the extended license acquisition URL would be:
    http://pr.service.expressplay.com/playready/RightsManager.asmx?ExpressPlayToken=AQAAAAM7XMMAAABgi9a1RsqqtZFxW_b_xWsb3OH0E-8m6of-4ZYbZFDiG3cQNsUiZnA15T4C61Fx8Z2xJsUZpxFeHZg7zK6HGlA5bb7gLM9WxPKYF1TQPmICNvnJPkhkyyMz0yWqzEC_TzDgVcZ1MaSWIwtz3Ob-oVMDAKNa2oIThe License Acquisition URL may be signaled to the PlayReady client in different ways, depending on the content packaging and the media client you are using:

    2.a) It may be signaled as part of the PlayReady Header Object, in the LA_URL field. The PlayReady header object may itself be located in a PSSH box in the media data (or init segment), and/or in the DASH MPD or Smooth Manifest (this is the case on Roku). On most PlayReady clients, a PlayReady Header Object located in the Smooth Manifest or DASH MPD takes priority over a PlayReady Header Object located in a PSSH box.

    2.b) It may be signaled to the player through a player API (available, for example, in the SilverLight or Chromecast media player APIs)

    If options 1) and 2) are not available, 3 more advanced methods are available, as a last resort:

  3. The token value may be passed via a HTTP request header. This assumes that you have the ability to customize the HTTP headers of the outgoing PlayReady license requests. In that case, you may set the HTTP header ‘ExpressPlayToken’ to the value of the token.
  4. The token value may be passed using a cookie parameter named ‘ExpressPlayToken’ for the domain name of the license acquisition URL
  5. The token value may be passed in the SOAP headers of the PlayReady request. This assumes that you have the ability to customize the SOAP request made by the PlayReady client. The token can be included in an <ExpressPlayToken> element in the SOAP header (XML namespace: http://expressplay.com/schemas/xml-token-1-0)