PlayReady Test Sunucusu için CustomData JSON Sözdizimi

Genel Bakış

PlayReady Test Sunucusu, gelişmiş lisans yapılandırması için CustomData JSON söz dizimini destekler. Bu yöntem, geliştiricilerin lisans isteklerinin CustomData alanında JSON biçimini kullanarak karmaşık lisans parametreleri ve ilkeleri belirtmesine olanak tanır.

JSON Yapısı

CustomData alanı çeşitli yapılandırma parametrelerine sahip bir JSON nesnesi kabul eder:

{
  "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"
      }
    }
  }
}

Yapılandırma Parametreleri

Lisans Türü

Oluşturulacak lisans türünü belirtir:

  • kalıcı: Cihazda depolanan lisans, uygulamanın yeniden başlatılmasına devam eder
  • kalıcı olmayan: Geçici lisans, uygulama kapatıldığında sona erer
  • kiralama: Belirli bir süre sonu ile sınırlı lisans
  • abonelik: Düzenli doğrulama ile abonelik tabanlı lisans

Anahtar Yönetimi

Şifreleme anahtarlarını ve tanımlayıcılarını yapılandırın:

{
  "keyId": "12345678-1234-1234-1234-123456789012",
  "contentKey": "base64EncodedContentKey",
  "keyRotation": {
    "enabled": true,
    "interval": "PT1H"
  }
}

Çıkış Koruma İlkeleri

Çıkış koruma gereksinimlerini denetleme:

{
  "outputProtection": {
    "digital": {
      "hdcp": "required",
      "cgmsa": "copy-never"
    },
    "analog": {
      "macrovision": "required",
      "cgmsa": "copy-once"
    }
  }
}

Örnek Yapılandırmalar

Temel Kalıcı Lisans

{
  "version": "1.0",
  "config": {
    "licenseType": "persistent",
    "keyId": "12345678-1234-1234-1234-123456789012",
    "policies": {
      "playback": {
        "allowOffline": true
      }
    }
  }
}

Zaman Kısıtlamaları olan Kiralama Lisansı

{
  "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"
      }
    }
  }
}

Çıkış Koruması ile Abonelik Lisansı

{
  "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"
      }
    }
  }
}

Lisans İsteklerinde Kullanım

HTTP POST İsteği

JSON yapılandırmasını CustomData alanına ekleyin:

POST /pr/svc/rightsmanager.asmx HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream

[License Request with CustomData containing JSON configuration]

İstemci Tümleştirmesi

JavaScript Örneği

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
};

C# Örneği

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

Gelişmiş Özellikler

Koşullu Erişim

Cihaz veya kullanıcı özniteliklerine göre koşullu erişimi yapılandırın:

{
  "conditionalAccess": {
    "deviceRestrictions": {
      "allowedDeviceTypes": ["mobile", "desktop"],
      "blockedDevices": ["emulator", "debugger"]
    },
    "geoRestrictions": {
      "allowedCountries": ["US", "CA", "GB"],
      "blockedRegions": ["region1", "region2"]
    }
  }
}

Çok Anahtarlı Destek

Birden çok şifreleme anahtarı desteği:

{
  "keys": [
    {
      "keyId": "key-1-guid",
      "contentKey": "base64-key-1",
      "keyType": "content"
    },
    {
      "keyId": "key-2-guid", 
      "contentKey": "base64-key-2",
      "keyType": "track"
    }
  ]
}

Hata İşleme

JSON Doğrulama Hataları

  • Hatalı Biçimlendirilmiş JSON: JSON ayrıştırma hata ayrıntılarıyla HTTP 400
  • Eksik Gerekli Alanlar: Alan doğrulama hatalarıyla HTTP 400
  • Geçersiz Alan Değerleri: Değer kısıtlama ihlalleriyle HTTP 400

Yapılandırma Hataları

  • Desteklenmeyen Lisans Türü: Desteklenen türler listesiyle HTTP 400
  • Geçersiz Anahtar Biçimi: Anahtar biçimi gereksinimleri olan HTTP 400
  • İlke Çakışmaları: İlke çözümleme kılavuzuyla HTTP 400

En İyi Yöntemler

  1. JSON Doğrulaması: İstek göndermeden önce JSON yapısını doğrulama
  2. Sürüm Uyumluluğu: Özellik desteği için uygun sürümü kullanın
  3. Anahtar Güvenliği: İçerik anahtarlarını hiçbir zaman istemci tarafı kodunda kullanıma sunma
  4. İlke Testi: Farklı ilke birleşimlerini kapsamlı bir şekilde test etme
  5. Hata İşleme: Tüm senaryolar için kapsamlı hata işleme uygulama

Destek ve Sorun Giderme

CustomData JSON söz dizimi ile ilgili sorunlar için:

  1. JSON biçimini ve yapısını doğrulama
  2. Gerekli alan varlığını ve değerlerini denetleme
  3. İlke uyumluluğunu ve kısıtlamalarını doğrulama
  4. Önce basitleştirilmiş yapılandırmalarla test edin
  5. Ayrıntılı hata bilgileri için sunucu yanıtlarını gözden geçirin

Ek destek için ana PlayReady Test Sunucuları belgelerine bakın.