CustomData JSON Syntax Documentation
Parameters are entered in a JSON blob added to the LicenseRequest.CustomData node:
- Pure JSON syntax
- Allows to requests for multiple licenses in one license response, and set parameters for each of them.
- Allow all sorts of properties and combinations of rights and right restrictions
- Require the client to be able to insert data in LicenseRequest.CustomData
Examples
(LAURL = http://test.playready.microsoft.com/service/rightsmanager.asmx) CustomData |
Description |
---|---|
json=[{'kid':'B6E39626-1CFB-4AA1-BCBD-4EF1ABA7843A','sl':'3000'},{'kid':'7C9484BA-C238-467A-869C-CDD8C7167712','sl':'2000'}] |
return two non-persistent licenses with PLAY rights, one with a Security Level of 3000, one with a Security Level of 2000. Note: these two KIDs must match the KIDs in the WRMHEADER |
Parameters
Parameter | Meaning | Values | Comments, Examples, Default Value |
---|---|---|---|
sl | Set the Minimum Security Level for a license | 150, 2000, 3000 | Example: 'sl':'3000' Default value is 150. Note: the video key may be set to 'sl':'3000', but in general, clients only support audio keys to be set to 'sl':'2000' maximum |
keyseed | Use the key seed provided to generate the content key in the licenses | base64 byte array | Example: 'keyseed':'Wdkg2jsl3djgqSFer26XVBoVVRPzVEggUOSKSQaz' Default value is the Test Key Seed provided here |
kid | Used in a group of properties to associate these properties to one KID | 'header', or Guid in registry format or base64 string | Example 1: 'kid':'header' Example 2: 'kid':'e13a7861-d8cc-4284-9245-7c835ebde9f0' Example 3: 'kid':'YXg64czYhEKSRXyDXr3p8A==' In the case of kid:header, the license server uses the KID found in the WRMHEADER coming along with the license request. In this case, the WRMHEADER has to include only one KID |
contentkey | Set the content key | base64 byte array | Example: 'contentkey':'eNqVnXrElmo2NSsn7IXeEA==' Default value is key(TestKeySeed, kid) |
ckt | Specifies the Content Key Encryption Type (CTR or CBC) | aesctr , aescbc | Example: ckt:aescbc Default value is aesctr The license will include a content key set for AESCBC encryption NEW IN PLAYREADY 4.0 |
tid | Set a TransactionId in the license response | guid (arbitrary) | Example: 'tid':'3033E8F0-FB1B-4170-AD5C-60549AAB2C79' Adds the provided value to the LicenseResponse.TransactionId property, which will require the client to post a license acknowledgement challenge using the specified transaction identifier back to the license server |
playright | Add a Play Right | false, true | Example: 'playright':'true' Default value is true Note: a license returned with no right will not allow the client to consume the content |
readright | Add a Read Right | false, true | Example: 'readright':'true' Default value is false |
executeright | Add an Execute Right | false, true | Example: 'executeright':'true' Default value is false |
extendedright | Add an Extended Right | Integer. See the example | Example: {'extendedright':{'type':'500', 'extended':[{'type':'400'; 'mustunderstand':'true';'besteffort':'false';'data':'Ah=='}]} |
persist | Set the License as Persistent or Not | false, true | Example: 'persist':'true' Default value is false. If the license is set non persistent, it is stored on the client in RAM only, in the context of the media player. |
simple | Use a SimpleNonPersistentLicense | false, true | Example: 'simple':'true' Default value is false. Uses a specific SimpleNonPersistentLicense class to issue the license response. This class was supported in older versions of Silverlight. |
begindate | Set a Date and Time before which the license is disabled | yyyymmdd[hhmmss] (GMT) | Example: 'begindate':'20170101' The license will not allow play back before Jan 1st, 2017 00:00:00 GMT |
enddate or expiration | Set a Date and Time after which the license is disabled | yyyymmdd[hhmmss] (GMT) | Example 1: 'enddate':'20170131' Example 2: 'enddate':'20170131235959' - The license will not allow play back after Jan 31st, 2017 23:59:59 GMT |
firstplayexpiration or firstexp | Set a relative expiration after first play | seconds in integer | Example: 'firstexp':'60' The license will not allow start a play back exactly 60 seconds after a first playback has been started with that same license. |
realtime | Add a Real Time expiration restriction | false, true | Example: 'realtime':'true' Default value is false If this property is set, it is required by the client to enforce expirations during a playback session in real time. Note: this is only supported by PlayReady 3 clients |
removaldate | Set a date when the license may be deleted on client (GMT) | yyyymmdd[hhmmss] | Example: 'removaldate':'20170228' Note that it is optional for clients to remove licenses based on this property. Windows runs this removal process at every license acquisition though. See the Server SDK documentation for additional constraints on setting this property. |
isroot | Requires the requested license to be a root license with the defined root KID | false, true | Example: cfg={'isroot':'true';'kid':'3C6F3C13-6207-4916-867C-8252B3993638'} |
rootid | Set the root KID for a leaf license | guid | Example: cfg={'rootid':'3C6F3C13-6207-4916-867C-8252B3993638';'kid':'header'},{'isroot':'true';'kid':'3C6F3C13-6207-4916-867C-8252B3993638'} |
sourceid | Set the SourceID or Restricted Source ID restriction | int | Example: 'sourceid':'267' Check the allowed values in the CRs section 6.12 |
caopl | Set a Compressed Digital Audio Output Protection Level restriction | integer | Example: 'caopl':'200' Default value is 0 Typically to require Secure Audio Drivers for compressed audio. Check the allowed values in the CRs section 6.7 and 3.6.2 Server SDK code: right.CompressedDigitalAudioOPL = 200; |
ucaopl | Set an Uncompressed Digital Audio Output Protection Level restriction | integer | Example: 'ucaopl':'300' Default value is 0 Typically to require HDCP or DTCP for uncompressed audio. Check the allowed values in the CRs section 6.7 and 3.6.3 Server SDK code: right.UncompressedDigitalAudioOPL = 300; |
cvopl | Set a Compressed Digital Video Output Protection Level restriction | integer | Example: 'cvopl':'500' All the allowed values have the same meaning that a PlayReady Product must not Pass the video portion of compressed decrypted Content to any video output. Check the allowed values in the CRs section 6.7 and 3.6.4 Server SDK code: right.CompressedDigitalVideoOPL = 500; |
ucvopl | Set an Uncompressed Digital Video Output Protection Level restriction | integer | Example: 'ucvopl':'300' Default value is 0 Typically to require HDCP on HDMI for uncompressed video. Check the allowed values in the CRs section 6.7 and 3.6.5 Server SDK code: right.UncompressedDigitalVideoOPL = 300; |
avopl | Set an Analog Video Output Protection Level restriction | integer | Example: 'avopl':'200' to require CGMS-A copy never Check the allowed values in the CRs section 6.7 and 3.6.6 Server SDK code: right.AnalogVideoOPL = 200; |
dvop | Add an Explicit Digital Video Output Protection | guid and optional data encoded in base 64 string | Example: 'dvop':'('guid':'ABB2C6F1-E663-4625-A945-972D17B231E7','data':'AAAAAQ==')' to require HDCP Type 1. See the CRs section 3.6.5.7. Server SDK code: right.AddDigitalVideoOutputProtection(new Guid("", 1)) |
daop | Add an Explicit Digital Audio Output Protection | guid and optional data encoded in base 64 string | Example: 'daop':'('guid':'6D5CFA59-C250-4426-930E-FAC72C8FCFA6','data':'AAAAAQ==')' to require SCMS. See the CRs section 3.6.3.8. Server SDK code: right.AddDigitalAudioOutputProtection(new Guid("{6D5CFA59-C250-4426-930E-FAC72C8FCFA6}", 1)) |
avop | Add an Explicit Analog Video Output Protection | guid and data encoded in base 64 string | Example: 'avop':'('guid':'760AE755-682A-41E0-B1B3-DCDF836A7306','data':'AAAAAQ==')' to Check the allowed values in the CRs section 6.5. Server SDK code: right.AddAnalogVideoOutputProtection(new Guid("{760AE755-682A-41E0-B1B3-DCDF836A7306}", 1) |
extendedrestrictions | Add one or multiple Extended Restrictions to the right | integer and properties, see example | Example: ('extendedrestrictions':(('type':'400', 'mustunderstand':'true','besteffort':'false','data':'Ah=='),('type':'401', 'mustunderstand':'true','besteffort':'false','data':'Ah=='))) Assumes applicable to the Play right if no other right is set. |
playenablers | Add one or multiple Play Enablers to the license | guid or group of guids | Example 1: 'playenablers':('786627D8-C2A6-44BE-8F88-08AE255B01A7') (allow Unknown Outputs). Example 2: 'playenablers':('786627D8-C2A6-44BE-8F88-08AE255B01A7','5ABF0F0D-DC29-4B82-9982-FD8E57525BFC') (allow Unknown Outputs and AirPlay). See the CRs for all the Play Enablers. |
The parameters below are shorthands for certain combinations of restrictions and play enablers described above | |||
explicitacp | Set an Automatic Gain Control and Color Stripe restriction for Analog Video | integer 0,1,2,3 | Example: 'explicitacp':'2' Equivalent to: 'avop'('guid':'C3FD11C6-F8B7-4D20-B008-1DB17D61F2DA','data':'AgAAAA==') See the CRs section 6.5.1 and 3.6.7.2. Server SDK code: right.AddAnalogVideoOutputProtection(new ExplicitOutputProtection(new Guid("C3FD11C6-F8B7-4D20-B008-1DB17D61F2DA"), HeightBytes.Concat(WidthBytes).ToArray())) |
maxres | Set a Maximum Effective Resolution Decode Size restriction | integer x integer | Example: 'maxres':'1920x1080' Equivalent to: 'dvop':('guid':'9645E831-E01D-4FFF-8342-0A720E3E028F','data':'AAAEOAAAB4A=') See the CRs section 6.5 and 3.6.5.7.1. Server SDK code: right.AddDigitalVideoOutputProtection(new ExplicitOutputProtection(new Guid("9645E831-E01D-4FFF-8342-0A720E3E028F"), BitConverter.GetBytes((int)value)) |
allowunknownsd | Add an Output Control for Unknown Output for constrained resolution | false, true | Example: 'allowunknownsd':'true' Equivalent to: 'playenablers':('B621D91F-EDCC-4035-8D4B-DC71760D43E9') See the CRs section 3.9.2. Server SDK code: right.AddPlayEnabler(new PlayEnabler(new Guid("B621D91F-EDCC-4035-8D4B-DC71760D43E9"))) |
allowunknownhd | Add an Output Control for Unknown Output for any resolution | false, true | Example: 'allowunknownhd':'true' Equivalent to: 'playenablers':('786627D8-C2A6-44BE-8F88-08AE255B01A7') See the CRs section 3.9.1. Server SDK code: right.AddPlayEnabler(new PlayEnabler(new Guid("786627D8-C2A6-44BE-8F88-08AE255B01A7"))) |