CustomData JSON Syntax Documentation

Parameters are entered in a JSON blob added to the LicenseRequest.CustomData node:

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)
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-8252B399363';'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")))