Group license support
This commit is contained in:
@@ -49,6 +49,34 @@ message LicenseIdentification {
|
||||
optional bytes provider_session_token = 6;
|
||||
}
|
||||
|
||||
// This message is used to indicate the license cateogry spec for a license as
|
||||
// a part of initial license issuance.
|
||||
message LicenseCategorySpec {
|
||||
// Possible license categories.
|
||||
enum LicenseCategory {
|
||||
// By default, License is used for single content.
|
||||
SINGLE_CONTENT_LICENSE_DEFAULT = 0;
|
||||
// License is used for multiple contents (could be a combination of
|
||||
// single contents and groups of contents).
|
||||
MULTI_CONTENT_LICENSE = 1;
|
||||
// License is used for contents logically grouped.
|
||||
GROUP_LICENSE = 2;
|
||||
}
|
||||
// Optional. License category indicates if license is used for single
|
||||
// content, multiple contents (could be a combination of
|
||||
// single contents and groups of contents) or a group of contents.
|
||||
optional LicenseCategory license_category = 1;
|
||||
// Optional. Content or group ID covered by the license.
|
||||
oneof content_or_group_id {
|
||||
// Content_id would be present if it is a license for single content.
|
||||
bytes content_id = 2;
|
||||
// Group_id would be present if the license is a multi_content_license or
|
||||
// group_license. Group Id could be the name of a group of contents,
|
||||
// defined by licensor.
|
||||
bytes group_id = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message License {
|
||||
message Policy {
|
||||
// Indicates that playback of the content is allowed.
|
||||
@@ -217,6 +245,27 @@ message License {
|
||||
optional bool allow_signature_verify = 4 [default = false];
|
||||
}
|
||||
|
||||
// KeyCategorySpec message is used to identify if current key is generated
|
||||
// for a single content or a group of contents.
|
||||
message KeyCategorySpec {
|
||||
// Represents what kind of content a key is used for.
|
||||
enum KeyCategory {
|
||||
// By default, key is created for single content.
|
||||
SINGLE_CONTENT_KEY_DEFAULT = 0;
|
||||
// Key is created for a group of contents.
|
||||
GROUP_KEY = 1;
|
||||
}
|
||||
// Indicate if the current key is created for single content or for group
|
||||
// use.
|
||||
optional KeyCategory key_category = 1;
|
||||
// Id for key category. If it is a key for single content, this id
|
||||
// represents the content_id. Otherwise, it represents a group_id.
|
||||
oneof content_or_group_id {
|
||||
bytes content_id = 2;
|
||||
bytes group_id = 3;
|
||||
}
|
||||
}
|
||||
|
||||
optional bytes id = 1;
|
||||
optional bytes iv = 2;
|
||||
optional bytes key = 3;
|
||||
@@ -242,6 +291,9 @@ message License {
|
||||
// Optional not limited to commonly known track types such as SD, HD.
|
||||
// It can be some provider defined label to identify the track.
|
||||
optional string track_label = 12;
|
||||
// A Key Category Spec is used to identify if current key is generated for a
|
||||
// single content or a group of contents.
|
||||
optional KeyCategorySpec key_category_spec = 13;
|
||||
}
|
||||
|
||||
optional LicenseIdentification id = 1;
|
||||
@@ -275,6 +327,10 @@ message License {
|
||||
[default = PLATFORM_NO_VERIFICATION];
|
||||
// IDs of the groups for which keys are delivered in this license, if any.
|
||||
repeated bytes group_ids = 11;
|
||||
// Optional. LicenseCategorySpec is used to indicate the license category for
|
||||
// a license. It could be used as a part of initial license issuance or shown
|
||||
// as a part of license in license response.
|
||||
optional LicenseCategorySpec license_category_spec = 12;
|
||||
}
|
||||
|
||||
enum ProtocolVersion {
|
||||
@@ -1038,6 +1094,15 @@ message CASDrmLicenseRequest {
|
||||
// Optionally specify even, odd or single slot for key rotation.
|
||||
repeated CASEncryptionResponse.KeyInfo entitlement_keys = 4;
|
||||
optional License.KeyContainer.KeyType key_type = 5;
|
||||
// A track type is used to represent a set of tracks that share the same
|
||||
// content key and security level. Common values are SD, HD, UHD1, UHD2
|
||||
// and AUDIO. Content providers may use arbitrary strings for track type
|
||||
// as long as they are consistent with the track types used at packaging
|
||||
// time.
|
||||
optional string track_type = 6;
|
||||
// A Key Category Spec is used to identify if current key is generated for a
|
||||
// single content or a group of contents.
|
||||
optional License.KeyContainer.KeyCategorySpec key_category_spec = 7;
|
||||
}
|
||||
repeated ContentKeySpec content_key_specs = 4;
|
||||
// Policy for the entire license such as playback duration.
|
||||
@@ -1053,6 +1118,10 @@ message CASEncryptionRequest {
|
||||
// return one key for EVEN and one key for ODD, otherwise only a single key is
|
||||
// returned.
|
||||
optional bool key_rotation = 4;
|
||||
// Optional value which can be used to indicate a group.
|
||||
// If present the CasEncryptionResponse will return key based on the group
|
||||
// id.
|
||||
optional bytes group_id = 5;
|
||||
}
|
||||
|
||||
message CASEncryptionResponse {
|
||||
@@ -1084,6 +1153,9 @@ message CASEncryptionResponse {
|
||||
optional string status_message = 2;
|
||||
optional bytes content_id = 3;
|
||||
repeated KeyInfo entitlement_keys = 4;
|
||||
// If keys shown in the encryption response are for group usage, this is the
|
||||
// group identifier.
|
||||
optional bytes group_id = 5;
|
||||
}
|
||||
|
||||
message SignedCASEncryptionRequest {
|
||||
|
||||
@@ -15,6 +15,10 @@ message CaDescriptorPrivateData {
|
||||
|
||||
// Content ID.
|
||||
optional bytes content_id = 2;
|
||||
|
||||
// Entitlement key IDs for current content per track. Each track will allow up
|
||||
// to 2 entitlement key ids (odd and even entitlement keys).
|
||||
repeated bytes entitlement_key_ids = 3;
|
||||
}
|
||||
|
||||
// Widevine fingerprinting.
|
||||
@@ -76,6 +80,18 @@ message EcmKeyData {
|
||||
optional bytes content_iv = 4;
|
||||
}
|
||||
|
||||
message EcmGroupKeyData {
|
||||
// Group id of this key data.
|
||||
optional bytes group_id = 1;
|
||||
// Required. The key data for the even slot. Fields wrapped_key_iv and
|
||||
// content_iv may be omitted if it is the same as EcmPayload.even_key_data.
|
||||
optional EcmKeyData even_key_data = 2;
|
||||
// Optional. The key data for the odd slot if key rotation is enabled. Fields
|
||||
// wrapped_key_iv and content_iv may be omitted if it is the same as
|
||||
// EcmPayload.odd_key_data.
|
||||
optional EcmKeyData odd_key_data = 3;
|
||||
}
|
||||
|
||||
message EcmPayload {
|
||||
// Required. Meta info carried by the ECM.
|
||||
optional EcmMetaData meta_data = 1;
|
||||
@@ -87,6 +103,9 @@ message EcmPayload {
|
||||
optional Fingerprinting fingerprinting = 4;
|
||||
// Optional. Widevine service blocking information.
|
||||
optional ServiceBlocking service_blocking = 5;
|
||||
// If a channel belongs to a group, the content keys can additionally be
|
||||
// encrypted by the group entitlement keys.
|
||||
repeated EcmGroupKeyData group_key_data = 6;
|
||||
}
|
||||
|
||||
// The payload field for an ECM with signature.
|
||||
|
||||
Reference in New Issue
Block a user