blob: a0bb68d8a9e4404899518483a2d045f82dce7bfb [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.media.drm;
using fuchsia.media;
using fuchsia.mem;
// Common initialization data formats. These are defined as strings rather than
// enums so as to not limit the types a ContentDecryptionModule may support.
const string LICENSE_INIT_DATA_TYPE_CENC = "cenc";
const string LICENSE_INIT_DATA_TYPE_KEYIDS = "keyids";
const string LICENSE_INIT_DATA_TYPE_WEBM = "webm";
const string LICENSE_INIT_DATA_TYPE_HLS = "hls";
enum LicenseSessionType {
/// A session for which the license, keys, and record of the session are not
/// persisted.
TEMPORARY = 1;
/// A session for which the license, keys, and record of the session will be
/// persisted for offline use and can subsequently be loaded using
/// LoadSession().
PERSISTENT_LICENSE = 2;
/// A session for which the the record of the session will be persisted, but
/// the keys and license will not be.
PERSISTENT_USAGE_RECORD = 3;
};
enum LicenseMessageType {
REQUEST = 1;
RENEWAL = 2;
RELEASE = 3;
};
struct LicenseInitData {
/// The type is a string that indicates the format of the accompanying init
/// data. Common types include "cenc", "keyids", "webm", and "hls". CDMs may
/// also define their own.
string type;
bytes data;
};
/// LicenseMessage is for messages originating from the LicenseSession that the
/// caller must route to the license server.
struct LicenseMessage {
LicenseMessageType type;
fuchsia.mem.Buffer message;
};
/// LicenseServerMessage is for messages originating from the license server
/// that the caller must provide to the LicenseSession via
/// |ProcessLicenseServerMessage|.
struct LicenseServerMessage {
fuchsia.mem.Buffer message;
};
struct KeyInfo {
KeyId key_id;
KeyStatus status;
};
table DecryptorParams {
/// Requires the decryptor to only output to secure buffers.
1: bool require_secure_mode;
/// Initial format details for the StreamProcessor.
2: fuchsia.media.FormatDetails input_details;
};
protocol LicenseSession {
/// Generate a license request for a session based on the |init_data|. When
/// the LicenseMessage has been created, the |OnLicenseMessageGenerated|
/// event will be triggered with the message to be sent to the license
/// server.
GenerateLicenseRequest(LicenseInitData init_data);
/// Inititiate the release process for the license session. This will cause
/// the CDM to generate a LicenseMessage through the
/// |OnLicenseMessageGenerated| event. The client must route that message
/// to the license server and the server's response to
/// |ProcessLicenseServerMessage|. Once the LicenseSession has received the
/// license server's reply, it will close the LicenseSession channel as this
/// session will no longer be usable.
GenerateLicenseRelease();
/// Update the LicenseSession with a message from the license server. All
/// responses from license requests, renewals, and releases should be routed
/// to the LicenseSession through this method.
ProcessLicenseServerMessage(LicenseServerMessage response);
/// Create a Decryptor StreamProcessor interface to be used to decrypt
/// content.
CreateDecryptor(DecryptorParams params,
request<fuchsia.media.StreamProcessor> decryptor);
/// The LicenseSession has generated a message to be sent to the license
/// server. The client is responsible for transporting this message to the
/// license server.
-> OnLicenseMessageGenerated(LicenseMessage request);
/// The LicenseSession has updated key status information.
-> OnKeysChanged(vector<KeyInfo> key_info);
};