In Silverlight4 RC, Microsoft has added a few important new features enabling some interesting scenarios related to PlayReady support.
1) The possibility to initiate PlayReady challenge and obtain the license programmatically.
The LicenseAcquirer class has been extended with the method AcquireLicenseAsync. Basically, you pass PlayReady Key-ID of the video and the used encryption (AES or cocktail) to that method, and it would generate the challenge, acquire the PlayReady license using the same LicenseAcquirer instance (so you still can override the process and add your custom bits) and store the license into the local PlayReady license store. Your code will be called back when it is finished, so you can then continue in your ordering workflow or whatever you were doing.
As far as I can see from the Silverlight4 RC SDK there is no class allowing to retrieve PlayReady header from common container formats, but it should be doable by ourselves with a little effort. Alternatively, PlayReady Key-ID can be retrieved using backchannel to web shop backend, because it has to be stored there anyway and doesn’t constitute security risk.
The locally stored licenses can be queried using new LicenseManagement class. A license is represented by the MediaLicense class. I find it interesting that it supports not only one-time play right (as it was in SL3), but apparently also several plays, because it has ExpirationDate property. I wonder what kind of changes would it require on the PlayReady server side to support that.
This feature allows both for license pre-delivery (in the ordering workflow, PlayReady license is delivered before the video file delivery starts) and for offline watching of PlayReady content (no request to the PlayReady server needed when starting locally downloaded PlayReady video file).
2) The possibility to query OPL-related features of local hardware
A collection of VideoOutputConnector instances can be retrieved from the LicenseManagement class. Each video output can be queried for its support of HDCP and CGMS-A. I’m not sure what this query functionality is good for; any checking of this functionality in managed Silverlight code can be easily circumvented and has therefore not much use.
I think, SL4 itself will enforce OPL specified in the license, so that it will be done in a PlayReady-typical secure manner. According to this post on Silverlight SDK blog, it will. Strangely enough, this post is not available anymore (you see the cached version above). Let’s wait a little and see, hopefully they’ll sort it out timely. Another question is what kind of changes would it require on the PlayReady server side. Will it be doable using Server SDK?
This feature could bring more insteresting and hot video content into web, because the possibility to enforce higher OPL might allow premium content shops to get better deals with majors. Not sure about of business aspect of that though.
3) PlayReady Domain management
The new class DomainAcquirer is available from LicenseAcquirer, allowing to handle JoinDomain requests of the PlayReady License Server. In PlayReady, you always bind the license either to the particular Client (= unique installation of the player) or to a domain (which is a virtual entity). When a real client asks for a license, you can force it now to join a domain, and issue a license valid for the domain. By adding several clients into the same domain, you can simplify client management on the server side. For example, you can generally create a domain for each customer of your web shop. All “Clients” of this customer (like, his desktop PC, his laptop and, hopefully, his windows phone) would join to this domain. On the server side, you would always issue the license for this domain, rather than for particular clients.
As far as I understand, it is not possible to transfer the locally stored license from one client to another, so that this feature is pretty much useless at the moment (given the fact we have already implemented it in our product 6 month ago without usage of PlayReady domains), but it can be a foundation for other interesting scenarios in the future (may be, sharing the license from SL4 to your Windows Phone?).
4) Support of license chains
Roughly speaking, this could simplify a subscription scenario. Say, your users pay a monthly fee, and get access to 500 movies on your web shop. You would then issue one root license valid till the end of the month, and several unlimited leaf licenses, one per movie, and then store all that stuff into the users local store. Not sure about practical advanages of this idea.
Generally speaking, Microsoft has done a substantial improvement of Silverlight DRM handling in the SL4 release. Thanks, guys! But what about PlayReady Metering?.. :)
Great Post. Yes there is a new PlayReady Server SDK coming out on 4.15