top

PlayReady®

Published 2014-10-28 | (Compatible with SDK 2.5,3.5,4.5,5.0,5.1 and 2011,2012,2013,2014 models)

PlayReady(R) is a content access and protection technology that is the successor to WM DRM (Windows(R) Media Digital Rights Management). It provides new, advanced, and frequently-requested features, such as domain control, embedded licenses, and the ability to protect a wide range of content types and formats.

Samsung Smart TVs released after 2011 support PlayReady® technology. The previous releases support only WM DRM. Since PlayReady® provides backward compatibility with WM DRM, Samsung Smart TV can acquire content from both the existing WM DRM-based services and the new PlayReady® -based services.

PlayReady® Application

This tutorial demonstrates how to use Microsoft® PlayReady® technology for protecting the streaming content for Samsung Smart TV Applications.

Specifications

This section briefly explains the PlayReady® features supported by Samsung Smart TV.

License Acquisition Modes

The license acquisition modes are as follows:

Direct License Acquisition (DLA)
acquire license directly from a license server over an IP network (rather than through a proxy client).
Indirect License Acquisition (ILA)
acquire license indirectly through a proxy client such as a personal computer using Media Transfer Protocol over a USB connection.

Since Samsung Smart TV can acquire a license directly from a license server, only DLA mode is supported.

Silent License Acquisition with User Custom Data

In silent license acquisition, whenever a license challenge is received by a license server, the license server responds by sending a license response to the device. In non-silent license acquisition, the license server needs additional information from the user before issuing a license. For example, the identity of a user is not authenticated and therefore needs a user name and password.

There is no intermediate step asking user input during the license-acquisition process. However, any custom data generated in the authentication or the payment stage can be added to the license challenge message.

If WM DRM 10-based service is used, set the custom data using the cookie property. If the service is PlayReady® -based, set the custom data in the cookie of HTTP header or set the data in challenge message. See Setting Cookie in HTTP Header and Setting User Custom Data. The Drm_LicenseAcq_GenerateChallenge function uses the data.

Setting User Custom Data

This feature is available only in PlayReady® -based service. Use the SetPlayerProperty function to set a custom data in the challenge message. See API Guidelines for the detailed API usage.

An example of the license challenge message with user custom data is shown below.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>AcquireLicense
    xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols">
<challenge>
<Challenge xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols/messages">
<LA xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols"
    id="SignedData" xml:space="preserve">
<Version>1</Version>
<ContentHeader>
    <WRMHEADER xmlns=http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader
        version="4.0.0.0">....</WRMHEADER>
</ContentHeader>

<ClientInfo> ... </ClientInfo>
<CustomData>MyCustomData</CustomData>

Post-delivery and Pre-delivery License Acquisition

The most common pattern of acquiring a license is by downloading a piece of content, and acquiring a license based on the data contained within the header of the content. This approach is called post-delivery. An alternative approach is license pre-delivery, where the license for the content is acquired before it is available to the client.

Post-delivery

Samsung Smart TV invokes the license acquisition on playing a media file. After processing the header of the media file, it acquires a license based on the data contained in the header. By default, Samsung Smart TV uses license-acquisition URL parsed from the header. However, the URL can be modified or replaced using SetPlayerProperty function. See API Guidelines for the detailed API usage.

Pre-delivery using Web Initiator

License acquisition Web Initiator can be used for pre-delivery of license for models launched after 2011.

The Web Initiators are introduced in PlayReady® technology, but a license acquisition initiator can be used in WM DRM 10.

For an example of license acquisition Web Initiator of the MS Test Content, see http://wmtap.smdisp.net/janus/download.asp?CaseID=9TC1&Content=9TC1_Amazing_Caves_720.wmv

<?xml version="1.0" encoding="utf-8"?>
<PlayReadyInitiator xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols/">
    <LicenseAcquisition>
        <Header>
            <WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
                <DATA>
                    <PROTECTINFO>
                        <KEYLEN>16</KEYLEN>
                        <ALGID>AESCTR</ALGID>
                    </PROTECTINFO>
                    <LA_URL>http://131.107.149.211/pr/svc/rightsmanager.asmx?</LA_URL>
                    <LUI_URL>http://131.107.149.211/pr/svc/rightsmanager.asmx?</LUI_URL>
                    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
                    <KID>yX4UET3sWkKGXy+wM1mdeA==</KID>
                    <CHECKSUM>BCtmCyebnIg=</CHECKSUM>
                </DATA>
            </WRMHEADER>
        </Header>
        <Content>
            http://wmtap.smdisp.net/janus/download.asp?CaseID=9TC1&amp;Content=9TC1_Amazing_Caves_720.wmv
        </Content>
        </LicenseAcquisition>
</PlayReadyInitiator>

Modify the DRM Header (<Header>[DRM Header]</Header>) and Content URL (<Content>[Content URL]</Content>) to suit the content.

Method 1 : Place the XML file in the web server and call the Application API with the URL as follows.

var pURL = "http://yourserver/LicenseAcquisition_WMDRM10.cms";
SefPluginPlayReady = document.getElementById('PluginSefPlayReady');
SefPluginPlayReady.Open("PlayReadyDrm", "1.000", "PlayReadyDrm");
SefPluginPlayReady.Execute("ProcessInitiatorsFromUrl", pURL);
SefPluginPlayReady.Close ();

The DRM module sends a GET request to the URL and performs the license acquisition process with the information in the file.

GET /LicenseAcquisition_WMDRM10.cms HTTP/1.0
Host: yourserver
User-Agent: PlayReadyClient
Content-Type: application/x-www-form-urlencoded
Pragma: no-cache

Method 2 : Use the ProcessInitiatorsFromXml function to pass the XML document as a string to the DRM module.

var pXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
SefPluginPlayReady = document.getElementById('PluginSefPlayReady');
SefPluginPlayReady.Open("PlayReadyDrm", "1.000", "PlayReadyDrm");
SefPluginPlayReady.Execute("ProcessInitiatorsFromXml", pXml, pXml.length());
SefPluginPlayReady.Close();

Note

The APIs are available for Samsung Smart TV models launched after 2011.

Web Initiators

Web Initiators are XML documents sent from the portal to the device to initiate a DRM protocol between the client and the service. Web Initiators can be sent to initiate a license acquisition, metering, a join domain protocol, or a leave domain protocol.

Use ProcessInitiatorsFromXml or ProcessInitiatorsFromUrl to initiate a DRM protocol. See API Guidelines for the detailed API usage.

This feature is only available in PlayReady® -based service. Samsung Smart TV supports all defined PlayReady Web Initiators.

Joining and Leaving Domain

PlayReady® allows a group of devices that are members of a domain to playback all the contents that bind to the same domain. Previously, only device-bound licenses could be issued for content. Only one client in a domain needs to acquire a license for a given piece of content, and then the license can be embedded into the content. The content can then be shared and played among all members of the domain.

Samsung Smart TV can join a specific domain using the JoinDomain function, or leave the domain with LeaveDomain function. See API Guidelines for the detailed API usage.

This feature is available only in PlayReady® -based service.

Embedded License

PlayReady® allows an application to store the license for a DRM-protected content file in its PlayReady® object itself. As the license is stored (or embedded) in the content file, it is immediately available. This enables a player application to decrypt and play the content without completing the license acquisition process or checking the HDS store.

Samsung Smart TV parses and playbacks the PlayReady® media file which has embedded license.

This feature is available only in PlayReady® -based service.

<SECURITYVERSION> / <CLIENTVERSION> / User-Agent

Add the <SECURITYVERSION>, <CLIENTVERSION>, and User-Agent values in the accept list for a Samsung Smart TV, if the license server checks for these values in the license challenge request message before issuing a license.

  2010 Products After 2011 Products
<SECURITYVERSION> 2.4.115.165 2.4.117.27
<CLIENTVERSION> 9.00.00.2778 11.2.0.1404
User-Agent
WMDRM_DLA
Windows-Media-DRM/11.0.7600.16385
PlayReadyClient

Note

The devices do not require any minimum value for <SECURITYVERSION>. <SECURITYVERSION> corresponds to the robustness version of the computer-client black box, and is only meaningful when the client is a computer application. Enforce a minimum <SECURITYVERSION> on computers (includes Silverlight® clients) to ensure that only a patched computer receives the content in case of a breach. For other devices, the <SECURITYVERSION> value is not meaningful as the device certificate will be revoked during a breach, and the server will not deliver a license.

Security Level

Samsung devices use Security Level 2000 certificates.

Deleting a License

After acquiring a valid license from a license server, Samsung Smart TV stores the license in the permanent storage to avoid performing the license-acquisition process during the validity period. Use the SetPlayerProperty function to delete a license after playing a content using the license. The license is deleted on stopping the content. See API Guidelines for the detailed API usage.

API Guidelines

Define the following objects in the HTML file for using pluginPlayer and P``luginSefPlayReady``.

<object id="pluginPlayer"border=0 classid="clsid:SAMSUNG-INFOLINK-PLAYER"></object>

<object id="PluginSefPlayReady" border=0 classid="clsid:SAMSUNG-INFOLINK-SEF"></object>

  2010 Products 2011 Products
WM DRM 10 WM DRM 10 PlayReady®
Setting Cookie SetPlayerProperty (1) O* O O
Setting User Custom Data SetPlayerProperty (3) X X O
Changing License Server URL SetPlayerProperty (4) X O O
Process Web Initiator
ProcessInitiatorsFromUrl
ProcessInitiatorsFromXml
X X O
Join/Leave Domain
JoinDomain
LeaveDomain
X X O
Deleting License SetPlayerProperty (6) X O** O**
  • (*) Supported after T-INFOLINK-2010-1009
  • (**) Supported after T-INFOLINK-2011-1002

PlayReady® URL Format

To play PlayReady® /WM DRM protected content, add the predefined postfix |COMPONENT=WMDRM to the original URL.

avplayObj.show();
avplayObj.open(
    url,
    {
        drm : {
            type : "Playready",
            company : 'Microsoft Corporation',
            deviceID : '1'
        }
    }
);
avplayObj.play(
    self.playSuccess,
    function (error) {
        console.error(error.message);
    },
    0
);

Setting User Custom Data

Use the SetPlayerProperty before calling the StartPlayback() function.

avplayObj.setPlayerProperty(3, customdata, customdata.length);

Changing License Server URL

Use the SetPlayerProperty before calling the StartPlayback() function.

avplayObj.setPlayerProperty(4, licenseURL, licenseURL.length);

Processing the Web Initiators

Use ProcessInitiatorsFromUrl to pass the Web Initiator URL. Samsung Smart TV sends HTTP GET request to the URL and parses the result.

var url ="http://www.yourserver.com/initiators/LicenseAcquisitionInitiatorxml";
SefPluginPlayReady = document.getElementById('PluginSefPlayReady');
SefPluginPlayReady.Open("PlayReadyDrm",  "1.000",  "PlayReadyDrm");
SefPluginPlayReady.Execute("ProcessInitiatorsFromUrl",  url);
SefPluginPlayReady.Close();

Use ProcessInitiatorsFromXml to pass the XML string which complies with the XML Schema defined by the PlayReady® technology.

var xml ="<?xml version=\"1.0\"...";
SefPluginPlayReady = document.getElementById('PluginSefPlayReady');
SefPluginPlayReady.Open("PlayReadyDrm", "1.000", "PlayReadyDrm");
SefPluginPlayReady.Execute("ProcessInitiatorsFromXml",  xml, xml.length);
SefPluginPlayReady.Close();

Joining Domain

Use JoinDomain to join a specific domain.

var certserver = "http://www.yourdomainserver",
    serviceid = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
    accountid = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
    customdata = "customdata";
SefPluginPlayReady = document.getElementById('PluginSefPlayready');
SefPluginPlayReady.Open("PlayReadyDrm",  "1.000",  "PlayReadyDrm");
SefPluginPlayReady.Execute("JoinDomain",  certserver, serviced, accounted, customdata, customdata.length);
SefPluginPlayReady.Close();

Leaving Domain

Use LeaveDomain to leave a specific domain.

var certserver = "http://www.yourdomainserver";
var serviceid = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}";
var accountid = "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}";
var customdata = "customdata";
SefPluginPlayReady = document.getElementById('PluginSefPlayready');
SefPluginPlayReady.Open("PlayReadyDrm",  "1.000",  "PlayReadyDrm");
SefPluginPlayReady.Execute("LeaveDomain",  certserver, serviced, accounted, customdata, customdata.length);
SefPluginPlayReady.Close();

Deleting License

Use SetPlayerProperty before calling the StartPlayback() function.

avplayObj.setPlayerProperty(6, null, 1);