Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Aperçu
Le serveur de test PlayReady prend en charge la syntaxe JSON CustomData pour la configuration avancée des licences. Cette méthode permet aux développeurs de spécifier des paramètres de licence et des stratégies complexes à l’aide du format JSON dans le champ CustomData des demandes de licence.
JSON Structure
Le champ CustomData accepte un objet JSON avec différents paramètres de configuration :
{
"version": "1.0",
"config": {
"licenseType": "persistent|non-persistent|rental|subscription",
"keyId": "GUID",
"contentKey": "base64-encoded-key",
"policies": {
"outputProtection": {
"digital": "required|optional|never",
"analog": "required|optional|never"
},
"playback": {
"allowOffline": true|false,
"expirationDate": "ISO-8601-datetime",
"gracePeriod": "duration-in-seconds"
}
}
}
}
Paramètres de configuration
Type de licence
Spécifie le type de licence à générer :
- persistant : Licence stockée sur l’appareil, survive au redémarrage de l’application
- non persistant : licence temporaire, expire lorsque l’application se ferme
- location : licence limitée dans le temps avec expiration spécifique
- abonnement : licence basée sur un abonnement avec validation périodique
Gestion de clés
Configurez les clés de chiffrement et les identificateurs :
{
"keyId": "12345678-1234-1234-1234-123456789012",
"contentKey": "base64EncodedContentKey",
"keyRotation": {
"enabled": true,
"interval": "PT1H"
}
}
Stratégies de protection de sortie
Contrôler les exigences de protection de sortie :
{
"outputProtection": {
"digital": {
"hdcp": "required",
"cgmsa": "copy-never"
},
"analog": {
"macrovision": "required",
"cgmsa": "copy-once"
}
}
}
Exemples de configurations
Licence permanente de base
{
"version": "1.0",
"config": {
"licenseType": "persistent",
"keyId": "12345678-1234-1234-1234-123456789012",
"policies": {
"playback": {
"allowOffline": true
}
}
}
}
Licence de location avec restrictions de temps
{
"version": "1.0",
"config": {
"licenseType": "rental",
"keyId": "87654321-4321-4321-4321-210987654321",
"policies": {
"playback": {
"expirationDate": "2024-12-31T23:59:59Z",
"gracePeriod": 3600
},
"outputProtection": {
"digital": "required",
"analog": "optional"
}
}
}
}
Licence d’abonnement avec la protection de sortie
{
"version": "1.0",
"config": {
"licenseType": "subscription",
"keyId": "11111111-2222-3333-4444-555555555555",
"policies": {
"playback": {
"allowOffline": false
},
"outputProtection": {
"digital": "required",
"analog": "required"
},
"subscription": {
"renewalUrl": "https://subscription.service.com/renew",
"validationInterval": "PT24H"
}
}
}
}
Utilisation dans les demandes de licence
Requête HTTP POST
Incluez la configuration JSON dans le champ CustomData :
POST /pr/svc/rightsmanager.asmx HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream
[License Request with CustomData containing JSON configuration]
Intégration du client
Exemple JavaScript
const customData = {
version: "1.0",
config: {
licenseType: "persistent",
keyId: keyId,
policies: {
playback: {
allowOffline: true
}
}
}
};
// Include in license request
const licenseRequest = {
customData: JSON.stringify(customData),
// ... other license request parameters
};
Exemple C#
var customData = new {
version = "1.0",
config = new {
licenseType = "persistent",
keyId = keyId,
policies = new {
playback = new {
allowOffline = true
}
}
}
};
string jsonCustomData = JsonConvert.SerializeObject(customData);
// Include in PlayReady license request
Fonctionnalités avancées
Accès conditionnel
Configurez l’accès conditionnel en fonction des attributs de l’appareil ou de l’utilisateur :
{
"conditionalAccess": {
"deviceRestrictions": {
"allowedDeviceTypes": ["mobile", "desktop"],
"blockedDevices": ["emulator", "debugger"]
},
"geoRestrictions": {
"allowedCountries": ["US", "CA", "GB"],
"blockedRegions": ["region1", "region2"]
}
}
}
Prise en charge multifacteur
Prise en charge de plusieurs clés de chiffrement :
{
"keys": [
{
"keyId": "key-1-guid",
"contentKey": "base64-key-1",
"keyType": "content"
},
{
"keyId": "key-2-guid",
"contentKey": "base64-key-2",
"keyType": "track"
}
]
}
Gestion des erreurs
Erreurs de validation JSON
- JSON mal formé : HTTP 400 avec des détails d’erreur d’analyse JSON
- Champs obligatoires manquants : HTTP 400 avec des erreurs de validation de champ
- Valeurs de champ non valides : HTTP 400 avec violations de contrainte de valeur
Erreurs de configuration
- Type de licence non pris en charge : HTTP 400 avec la liste des types pris en charge
- Format de clé non valide : HTTP 400 avec les exigences de format de clé
- Conflits de stratégie : HTTP 400 avec des conseils de résolution de stratégie
Meilleures pratiques
- Validation JSON : Valider la structure JSON avant d’envoyer des demandes
- Compatibilité des versions : Utiliser la version appropriée pour la prise en charge des fonctionnalités
- Sécurité des clés : n’exposez jamais les clés de contenu dans le code côté client
- Test de stratégie : Tester minutieusement différentes combinaisons de stratégies
- Gestion des erreurs : Implémenter une gestion complète des erreurs pour tous les scénarios
Documentation connexe
- PlayReady Test Server Service - Vue d’ensemble du service principal
- Syntaxe de chaîne de requête - Configuration simple basée sur l’URL
- Syntaxe JSON Base64 - Format JSON encodé en Base64
- Serveurs de test PlayReady - Documentation complète sur le serveur
Support et résolution des problèmes
Pour les problèmes liés à la syntaxe JSON CustomData :
- Valider le format ET la structure JSON
- Vérifier la présence et les valeurs de champ requises
- Vérifier la compatibilité et les contraintes de stratégie
- Tester d’abord avec des configurations simplifiées
- Passer en revue la réponse du serveur pour obtenir des informations détaillées sur les erreurs
Pour obtenir une prise en charge supplémentaire, reportez-vous à la documentation principale des serveurs de test PlayReady .