| <link rel="stylesheet" href="../style.css" /> |
| |
| [TOC] |
| # fuchsia.media.drm |
| |
| <div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div> |
| |
| |
| ## **PROTOCOLS** |
| |
| ## ClearKey {#ClearKey} |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=110)* |
| <p>A service hub providing access to the ClearKey key system. This key system |
| is defined by the <a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a>. It uses plain-text |
| keys to decrypt the source.</p> |
| <p>If the client closes the <code>ClearKey</code> channel, derived |
| <code>ContentDecryptionModule</code>s will remain active.</p> |
| <p><a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a>: |
| https://www.w3.org/TR/encrypted-media</p> |
| |
| |
| ### AddDataStore {#ClearKey.AddDataStore} |
| |
| <p>Adds a client data store to the <code>KeySystem</code>.</p> |
| <p>DRM systems generate data on behalf of clients as part of provisioning |
| and license management. This data is only usable by the DRM system, but |
| the client is the owner of the data. The client controls the lifetime of |
| the data and can select which data set is to be used for a |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <ul> |
| <li>request <code>data_store_id</code> a client-assigned identifier for the data |
| store. The identifier is scoped to the <code>KeySystem</code> channel. It is |
| invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already |
| added <code>data_store_id</code> and the server should close the channel.</li> |
| <li>request <code>data_store_params</code> the parameters to be used for this data |
| store.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ClearKey.AddDataStore_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>data_store_params</code></td> |
| <td> |
| <code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#ClearKey.AddDataStore_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### CreateContentDecryptionModule2 {#ClearKey.CreateContentDecryptionModule2} |
| |
| <p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <p>Creates a <code>ContentDecryptionModule</code> that will use the associated data |
| store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the |
| <code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only |
| support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type. |
| If a <code>data_store_id</code> is provided, then the created |
| <code>ContentDecryptionModule</code> will persist data to that data store. If the |
| <code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or |
| the <code>KeySystem</code> does not support data stores and one was provided, then |
| the server should close the <code>cdm</code>.</p> |
| <p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a |
| <code>ZX_ERR_NOT_FOUND</code> epitaph.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the data store that should be used by the |
| <code>ContentDecryptionModule</code>.</li> |
| <li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ClearKey.CreateContentDecryptionModule2_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>cdm</code></td> |
| <td> |
| <code>server_end<<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### DestroyDataStoreAndConfirm {#ClearKey.DestroyDataStoreAndConfirm} |
| |
| <p>Destroys the client data store.</p> |
| <p>This method permanently removes this data store and all of its contents. |
| All provisioning and license data will be removed and any active |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the client-assigned identifier for the data |
| store to be removed. It is invalid for the client to provide |
| <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously |
| been added or has been previously destroyed.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ClearKey.DestroyDataStoreAndConfirm_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#ClearKey.DestroyDataStoreAndConfirm_Response} |
| |
| <EMPTY> |
| |
| ### GetProperties {#ClearKey.GetProperties} |
| |
| <p>Get various static properties of the <code>KeySystem</code> implementation.</p> |
| <p>The properties include the capabilities and requirements of the |
| <code>KeySystem</code>, such as whether the implementation is hardware-based or |
| whether it requires client-provided data stores to operate.</p> |
| <ul> |
| <li>response <code>properties</code> the properties of the <code>KeySystem</code> |
| implementation.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ClearKey.GetProperties_Request} |
| |
| <EMPTY> |
| |
| |
| #### Response {#ClearKey.GetProperties_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>properties</code></td> |
| <td> |
| <code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ## ContentDecryptionModule {#ContentDecryptionModule} |
| *Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=24)* |
| <p>A protocol for managing content license sessions and providing decryption of |
| media content. There may be zero to many active <a class='link' href='#LicenseSession'>LicenseSession</a>s |
| associated with a <code>ContentDecryptionModule</code>, each with their own sets of |
| keys.</p> |
| <p>From an EME client's perspective, this protocol has a 1:1 relationship with |
| the MediaKeys object.</p> |
| |
| |
| ### CreateDecryptor {#ContentDecryptionModule.CreateDecryptor} |
| |
| <p>Creates a Decryptor <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a> to be used to |
| decrypt content.</p> |
| <p>This <code>decryptor</code> would have access to the union of keys created by all |
| the active sessions for this <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <ul> |
| <li>request <code>params</code> the parameters with which to create the <code>decryptor</code>.</li> |
| <li>request <code>decryptor</code> the server endpoint of the |
| <code>fuchsia.media/StreamProcessor</code>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ContentDecryptionModule.CreateDecryptor_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>params</code></td> |
| <td> |
| <code><a class='link' href='#DecryptorParams'>DecryptorParams</a></code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>decryptor</code></td> |
| <td> |
| <code>server_end<<a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### CreateLicenseSession {#ContentDecryptionModule.CreateLicenseSession} |
| |
| <p>Creates a new session for the given type.</p> |
| <p>The <code>session_id</code> will be generated by the <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> |
| and can be used to reload the session after closing. If the |
| <code>session_type</code> is not supported by the underlying DRM system, it will |
| immediately close the <code>license_session</code>.</p> |
| <ul> |
| <li>request <code>session_type</code> a field containing either |
| <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> or |
| <a class='link' href='#LicenseSessionType.PERSISTENT_LICENSE'>LicenseSessionType.PERSISTENT_LICENSE</a></li> |
| <li>request <code>license_session</code> the server endpoint of the |
| <a class='link' href='#LicenseSession'>LicenseSession</a></li> |
| </ul> |
| <ul> |
| <li>response <code>session_id</code> an identifier that can be used to reload the |
| session later (if persistent).</li> |
| </ul> |
| |
| |
| |
| #### Request {#ContentDecryptionModule.CreateLicenseSession_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>session_type</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSessionType'>LicenseSessionType</a></code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>license_session</code></td> |
| <td> |
| <code>server_end<<a class='link' href='#LicenseSession'>LicenseSession</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#ContentDecryptionModule.CreateLicenseSession_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>session_id</code></td> |
| <td> |
| <code><a class='link' href='#SessionId'>SessionId</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### GetKeyStatusForHdcpVersion {#ContentDecryptionModule.GetKeyStatusForHdcpVersion} |
| |
| <p>Queries the status of a hypothetical key associated with an HDCP policy.</p> |
| <p>This aids clients in determining which content type to fetch prior to |
| establishing a <a class='link' href='#LicenseSession'>LicenseSession</a>. For example, if the device would |
| restrict output for HDCP 1.x, then the client can choose to fetch SD |
| content rather than HD.</p> |
| <ul> |
| <li>request <code>hdcp_version</code> a field containing the HDCP version to check, |
| such as "1.2" or "2.0".</li> |
| </ul> |
| <ul> |
| <li>response <code>key_status</code> a field indicating what the status of a |
| hypothetical key would be for this device if one could be licensed.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ContentDecryptionModule.GetKeyStatusForHdcpVersion_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>hdcp_version</code></td> |
| <td> |
| <code><a class='link' href='#HdcpVersion'>HdcpVersion</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#ContentDecryptionModule.GetKeyStatusForHdcpVersion_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>key_status</code></td> |
| <td> |
| <code><a class='link' href='#KeyStatus'>KeyStatus</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### GetSupportedEncryptionSchemes {#ContentDecryptionModule.GetSupportedEncryptionSchemes} |
| |
| <p>Queries for the list of supported encryption schemes.</p> |
| <p>This returns a list of the supported encryption schemes that the |
| <code>ContentDecryptionModule</code> supports, such as 'cenc' or 'cbcs'. If the |
| implementation supports passing unencrypted frames through decryption |
| prior to license arrival, it should also report |
| <code>fuchsia.media.UNENCRYPTED</code> as a supported scheme.</p> |
| <ul> |
| <li>response <code>encryption_schemes</code> a list of the supported encryption |
| schemes.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ContentDecryptionModule.GetSupportedEncryptionSchemes_Request} |
| |
| <EMPTY> |
| |
| |
| #### Response {#ContentDecryptionModule.GetSupportedEncryptionSchemes_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>encryption_schemes</code></td> |
| <td> |
| <code>vector<string></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### LoadLicenseSession {#ContentDecryptionModule.LoadLicenseSession} |
| |
| <p>Loads an existing session from storage using the given <code>session_id</code>.</p> |
| <p>If the session is not found, then the <code>license_session</code> will be closed.</p> |
| <ul> |
| <li>request <code>session_id</code> contains an identifier of which session should be |
| loaded from storage.</li> |
| <li>request <code>license_session</code> the server endpoint of the |
| <a class='link' href='#LicenseSession'>LicenseSession</a>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ContentDecryptionModule.LoadLicenseSession_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>session_id</code></td> |
| <td> |
| <code><a class='link' href='#SessionId'>SessionId</a></code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>license_session</code></td> |
| <td> |
| <code>server_end<<a class='link' href='#LicenseSession'>LicenseSession</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### OnProvisioned {#ContentDecryptionModule.OnProvisioned} |
| |
| <p>Indicates that the <code>ContentDecryptionModule</code> is provisioned.</p> |
| <p>In order to create <code>LicenseSession</code>s, a <code>ContentDecryptionModule</code> must |
| be provisioned. A <code>ContentDecryptionModule</code> is not considered |
| provisioned until it meets the requirements for the underlying DRM |
| system. The DRM system may not require provisioning, may only require |
| factory provisioning or may require both factory provisioning and |
| service instance provisioning.</p> |
| <p>If the <code>ContentDecryptionModule</code> has already has sufficient |
| provisioning, this event will be sent immediately upon creation. If the |
| <code>ContentDecryptionModule</code> has its provisioning removed, then the server |
| will close the channel and also close any active <code>LicenseSession</code>s or |
| Decryptors.</p> |
| <p>If the DRM system does not require provisioning at all, this |
| event should still be sent to notify the client that it can create |
| <code>LicenseSession</code>s.</p> |
| |
| |
| |
| |
| #### Response {#ContentDecryptionModule.OnProvisioned_Response} |
| |
| <EMPTY> |
| |
| ### SetServerCertificate {#ContentDecryptionModule.SetServerCertificate} |
| |
| <p>Sets the certificate to be used for encrypting outgoing messages.</p> |
| <ul> |
| <li>request <code>certificate</code> a buffer containing the certificate to be used.</li> |
| </ul> |
| <ul> |
| <li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ContentDecryptionModule.SetServerCertificate_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>certificate</code></td> |
| <td> |
| <code>vector<uint8></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#ContentDecryptionModule.SetServerCertificate_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#ContentDecryptionModule_SetServerCertificate_Result'>ContentDecryptionModule_SetServerCertificate_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ## KeySystem {#KeySystem} |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=12)* |
| |
| |
| ### AddDataStore {#KeySystem.AddDataStore} |
| |
| <p>Adds a client data store to the <code>KeySystem</code>.</p> |
| <p>DRM systems generate data on behalf of clients as part of provisioning |
| and license management. This data is only usable by the DRM system, but |
| the client is the owner of the data. The client controls the lifetime of |
| the data and can select which data set is to be used for a |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <ul> |
| <li>request <code>data_store_id</code> a client-assigned identifier for the data |
| store. The identifier is scoped to the <code>KeySystem</code> channel. It is |
| invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already |
| added <code>data_store_id</code> and the server should close the channel.</li> |
| <li>request <code>data_store_params</code> the parameters to be used for this data |
| store.</li> |
| </ul> |
| |
| |
| |
| #### Request {#KeySystem.AddDataStore_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>data_store_params</code></td> |
| <td> |
| <code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#KeySystem.AddDataStore_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### CreateContentDecryptionModule2 {#KeySystem.CreateContentDecryptionModule2} |
| |
| <p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <p>Creates a <code>ContentDecryptionModule</code> that will use the associated data |
| store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the |
| <code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only |
| support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type. |
| If a <code>data_store_id</code> is provided, then the created |
| <code>ContentDecryptionModule</code> will persist data to that data store. If the |
| <code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or |
| the <code>KeySystem</code> does not support data stores and one was provided, then |
| the server should close the <code>cdm</code>.</p> |
| <p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a |
| <code>ZX_ERR_NOT_FOUND</code> epitaph.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the data store that should be used by the |
| <code>ContentDecryptionModule</code>.</li> |
| <li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#KeySystem.CreateContentDecryptionModule2_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>cdm</code></td> |
| <td> |
| <code>server_end<<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### DestroyDataStoreAndConfirm {#KeySystem.DestroyDataStoreAndConfirm} |
| |
| <p>Destroys the client data store.</p> |
| <p>This method permanently removes this data store and all of its contents. |
| All provisioning and license data will be removed and any active |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the client-assigned identifier for the data |
| store to be removed. It is invalid for the client to provide |
| <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously |
| been added or has been previously destroyed.</li> |
| </ul> |
| |
| |
| |
| #### Request {#KeySystem.DestroyDataStoreAndConfirm_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#KeySystem.DestroyDataStoreAndConfirm_Response} |
| |
| <EMPTY> |
| |
| ### GetProperties {#KeySystem.GetProperties} |
| |
| <p>Get various static properties of the <code>KeySystem</code> implementation.</p> |
| <p>The properties include the capabilities and requirements of the |
| <code>KeySystem</code>, such as whether the implementation is hardware-based or |
| whether it requires client-provided data stores to operate.</p> |
| <ul> |
| <li>response <code>properties</code> the properties of the <code>KeySystem</code> |
| implementation.</li> |
| </ul> |
| |
| |
| |
| #### Request {#KeySystem.GetProperties_Request} |
| |
| <EMPTY> |
| |
| |
| #### Response {#KeySystem.GetProperties_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>properties</code></td> |
| <td> |
| <code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ## LicenseSession {#LicenseSession} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=83)* |
| <p>A protocol for exchanging messages pertaining to the establishment of a |
| media license and the encryption keys associated with it.</p> |
| <p>If the client closes the <code>LicenseSession</code>, any derived Decryptors will also |
| be closed as the encryption keys will no longer be maintained.</p> |
| |
| |
| ### CreateDecryptor {#LicenseSession.CreateDecryptor} |
| |
| <p>Creates a Decryptor <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a> to be used to |
| decrypt content.</p> |
| <p>This <code>decryptor</code> would be restricted to only having access to the |
| keys maintained by this <a class='link' href='#LicenseSession'>LicenseSession</a>.</p> |
| <ul> |
| <li>request <code>params</code> the parameters with which to create the <code>decryptor</code>.</li> |
| <li>request <code>decryptor</code> the server endpoint of the |
| <code>fuchsia.media/StreamProcessor</code>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#LicenseSession.CreateDecryptor_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>params</code></td> |
| <td> |
| <code><a class='link' href='#DecryptorParams'>DecryptorParams</a></code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>decryptor</code></td> |
| <td> |
| <code>server_end<<a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### GenerateLicenseRelease {#LicenseSession.GenerateLicenseRelease} |
| |
| <p>Initiates the release process for the license session.</p> |
| <p>This will cause the <a class='link' href='#LicenseSession'>LicenseSession</a> to destroy the license and/or |
| keys associated with the session. If the session is temporary, the |
| session will send the reply for this request once the license has been |
| destroyed and then close the <code>LicenseSession</code> channel. If the session is |
| persistent, the session will send the reply for this request once the |
| license has been destroyed and then it will generate a license release |
| type <a class='link' href='#LicenseMessage'>LicenseMessage</a> through the <code>OnLicenseMessageGenerated</code> event. |
| The client must route that message to the license server and the |
| server's response to <code>ProcessLicenseServerMessage</code>. Once the |
| <code>LicenseSession</code> has received the license server's reply, it will close |
| the <code>LicenseSession</code> channel.</p> |
| <ul> |
| <li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li> |
| </ul> |
| |
| |
| |
| #### Request {#LicenseSession.GenerateLicenseRelease_Request} |
| |
| <EMPTY> |
| |
| |
| #### Response {#LicenseSession.GenerateLicenseRelease_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSession_GenerateLicenseRelease_Result'>LicenseSession_GenerateLicenseRelease_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### GenerateLicenseRequest {#LicenseSession.GenerateLicenseRequest} |
| |
| <p>Generates a license request for a session based on the <code>init_data</code>.</p> |
| <p>When the <a class='link' href='#LicenseMessage'>LicenseMessage</a> has been created, the |
| <code>OnLicenseMessageGenerated</code> event will be triggered with the message to |
| be sent to the license server.</p> |
| <ul> |
| <li>request <code>init_data</code> container-specific data that is used to generate a |
| <a class='link' href='#LicenseMessageType.REQUEST'>LicenseMessageType.REQUEST</a> <code>LicenseMessage</code>.</li> |
| </ul> |
| <ul> |
| <li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li> |
| </ul> |
| |
| |
| |
| #### Request {#LicenseSession.GenerateLicenseRequest_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>init_data</code></td> |
| <td> |
| <code><a class='link' href='#LicenseInitData'>LicenseInitData</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#LicenseSession.GenerateLicenseRequest_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSession_GenerateLicenseRequest_Result'>LicenseSession_GenerateLicenseRequest_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### OnKeyStatesChanged {#LicenseSession.OnKeyStatesChanged} |
| |
| <p>Provides updated key state information.</p> |
| <p>Some examples on when this might occur would be on license creation, |
| expiration, renewal, or load of a persistent license session.</p> |
| <ul> |
| <li>response <code>key_states</code> a list of the key_ids and their related |
| <a class='link' href='#KeyStatusCode'>KeyStatusCode</a>s</li> |
| </ul> |
| |
| |
| |
| |
| #### Response {#LicenseSession.OnKeyStatesChanged_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>key_states</code></td> |
| <td> |
| <code>vector<<a class='link' href='#KeyState'>KeyState</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### OnLicenseMessageGenerated {#LicenseSession.OnLicenseMessageGenerated} |
| |
| <p>Provides a <a class='link' href='#LicenseMessage'>LicenseMessage</a> that should be sent to the license server.</p> |
| <p>The client is responsible for transporting this message to the license |
| server.</p> |
| <ul> |
| <li>response <code>request</code> a message from the <code>LicenseSession</code> that the client |
| should send to the license server.</li> |
| </ul> |
| |
| |
| |
| |
| #### Response {#LicenseSession.OnLicenseMessageGenerated_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>request</code></td> |
| <td> |
| <code><a class='link' href='#LicenseMessage'>LicenseMessage</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### OnReady {#LicenseSession.OnReady} |
| |
| <p>Indicates that the <a class='link' href='#LicenseSession'>LicenseSession</a> has successfully initialized.</p> |
| <p>This is always the first message sent by the <code>LicenseSession</code>.</p> |
| |
| |
| |
| |
| #### Response {#LicenseSession.OnReady_Response} |
| |
| <EMPTY> |
| |
| ### ProcessLicenseResponse {#LicenseSession.ProcessLicenseResponse} |
| |
| <p>Updates the <a class='link' href='#LicenseSession'>LicenseSession</a> with a message from the license server.</p> |
| <p>All responses from license requests, renewals, and releases should be |
| routed to the <code>LicenseSession</code> through this method.</p> |
| <ul> |
| <li>request <code>response</code> a message from the license server to update the |
| state of the <code>LicenseSession</code>.</li> |
| </ul> |
| <ul> |
| <li>error an <a class='link' href='#Error'>Error</a> indicating the reason for failure.</li> |
| </ul> |
| |
| |
| |
| #### Request {#LicenseSession.ProcessLicenseResponse_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#LicenseServerMessage'>LicenseServerMessage</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#LicenseSession.ProcessLicenseResponse_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSession_ProcessLicenseResponse_Result'>LicenseSession_ProcessLicenseResponse_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ## PlayReady {#PlayReady} |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=128)* |
| <p>A service hub providing access to the PlayReady key system.</p> |
| <p>If the client closes the <code>PlayReady</code> channel, derived |
| <code>ContentDecryptionModule</code>s will remain active.</p> |
| |
| |
| ### AddDataStore {#PlayReady.AddDataStore} |
| |
| <p>Adds a client data store to the <code>KeySystem</code>.</p> |
| <p>DRM systems generate data on behalf of clients as part of provisioning |
| and license management. This data is only usable by the DRM system, but |
| the client is the owner of the data. The client controls the lifetime of |
| the data and can select which data set is to be used for a |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <ul> |
| <li>request <code>data_store_id</code> a client-assigned identifier for the data |
| store. The identifier is scoped to the <code>KeySystem</code> channel. It is |
| invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already |
| added <code>data_store_id</code> and the server should close the channel.</li> |
| <li>request <code>data_store_params</code> the parameters to be used for this data |
| store.</li> |
| </ul> |
| |
| |
| |
| #### Request {#PlayReady.AddDataStore_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>data_store_params</code></td> |
| <td> |
| <code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#PlayReady.AddDataStore_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### CreateContentDecryptionModule2 {#PlayReady.CreateContentDecryptionModule2} |
| |
| <p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <p>Creates a <code>ContentDecryptionModule</code> that will use the associated data |
| store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the |
| <code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only |
| support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type. |
| If a <code>data_store_id</code> is provided, then the created |
| <code>ContentDecryptionModule</code> will persist data to that data store. If the |
| <code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or |
| the <code>KeySystem</code> does not support data stores and one was provided, then |
| the server should close the <code>cdm</code>.</p> |
| <p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a |
| <code>ZX_ERR_NOT_FOUND</code> epitaph.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the data store that should be used by the |
| <code>ContentDecryptionModule</code>.</li> |
| <li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#PlayReady.CreateContentDecryptionModule2_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>cdm</code></td> |
| <td> |
| <code>server_end<<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### DestroyDataStoreAndConfirm {#PlayReady.DestroyDataStoreAndConfirm} |
| |
| <p>Destroys the client data store.</p> |
| <p>This method permanently removes this data store and all of its contents. |
| All provisioning and license data will be removed and any active |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the client-assigned identifier for the data |
| store to be removed. It is invalid for the client to provide |
| <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously |
| been added or has been previously destroyed.</li> |
| </ul> |
| |
| |
| |
| #### Request {#PlayReady.DestroyDataStoreAndConfirm_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#PlayReady.DestroyDataStoreAndConfirm_Response} |
| |
| <EMPTY> |
| |
| ### GetProperties {#PlayReady.GetProperties} |
| |
| <p>Get various static properties of the <code>KeySystem</code> implementation.</p> |
| <p>The properties include the capabilities and requirements of the |
| <code>KeySystem</code>, such as whether the implementation is hardware-based or |
| whether it requires client-provided data stores to operate.</p> |
| <ul> |
| <li>response <code>properties</code> the properties of the <code>KeySystem</code> |
| implementation.</li> |
| </ul> |
| |
| |
| |
| #### Request {#PlayReady.GetProperties_Request} |
| |
| <EMPTY> |
| |
| |
| #### Response {#PlayReady.GetProperties_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>properties</code></td> |
| <td> |
| <code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ## ProvisioningFetcher {#ProvisioningFetcher} |
| *Defined in [fuchsia.media.drm/provisioning.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/provisioning.fidl;l=43)* |
| <p>Fetches provisioning from a server.</p> |
| <p>Some DRM systems require additional runtime provisioning (also known as |
| individualization). This is a process by which a device receives DRM |
| credentials (e.g. a certificate) to use for license acquisition for an |
| individual content provider.</p> |
| <p>DRM systems use the <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> to fetch the provisioning when |
| the system determines that it is needed.</p> |
| |
| |
| ### Fetch {#ProvisioningFetcher.Fetch} |
| |
| <p>Fetches provisioning from a server.</p> |
| <p>Called by the DRM system when it is in need of provisioning.</p> |
| <ul> |
| <li>request <code>request</code> a <a class='link' href='#ProvisioningRequest'>ProvisioningRequest</a> message to be provided to |
| a provisioning server.</li> |
| </ul> |
| <ul> |
| <li>response <code>response</code> a <a class='link' href='#ProvisioningResponse'>ProvisioningResponse</a> message from the |
| provisioning server.</li> |
| </ul> |
| |
| |
| |
| #### Request {#ProvisioningFetcher.Fetch_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>request</code></td> |
| <td> |
| <code><a class='link' href='#ProvisioningRequest'>ProvisioningRequest</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#ProvisioningFetcher.Fetch_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#ProvisioningResponse'>ProvisioningResponse</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ## Widevine {#Widevine} |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=119)* |
| <p>A service hub providing access to the Widevine key system.</p> |
| <p>If the client closes the <code>Widevine</code> channel, derived |
| <code>ContentDecryptionModule</code>s will remain active.</p> |
| |
| |
| ### AddDataStore {#Widevine.AddDataStore} |
| |
| <p>Adds a client data store to the <code>KeySystem</code>.</p> |
| <p>DRM systems generate data on behalf of clients as part of provisioning |
| and license management. This data is only usable by the DRM system, but |
| the client is the owner of the data. The client controls the lifetime of |
| the data and can select which data set is to be used for a |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <ul> |
| <li>request <code>data_store_id</code> a client-assigned identifier for the data |
| store. The identifier is scoped to the <code>KeySystem</code> channel. It is |
| invalid for the client to provide <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or an already |
| added <code>data_store_id</code> and the server should close the channel.</li> |
| <li>request <code>data_store_params</code> the parameters to be used for this data |
| store.</li> |
| </ul> |
| |
| |
| |
| #### Request {#Widevine.AddDataStore_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>data_store_params</code></td> |
| <td> |
| <code><a class='link' href='#DataStoreParams'>DataStoreParams</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#Widevine.AddDataStore_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>result</code></td> |
| <td> |
| <code><a class='link' href='#KeySystem_AddDataStore_Result'>KeySystem_AddDataStore_Result</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| ### CreateContentDecryptionModule2 {#Widevine.CreateContentDecryptionModule2} |
| |
| <p>Creates a new <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>.</p> |
| <p>Creates a <code>ContentDecryptionModule</code> that will use the associated data |
| store, if provided. If <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> is provided for the |
| <code>data_store_id</code>, then the created <code>ContentDecryptionModule</code> will only |
| support <a class='link' href='#LicenseSession'>LicenseSession</a>s of <a class='link' href='#LicenseSessionType.TEMPORARY'>LicenseSessionType.TEMPORARY</a> type. |
| If a <code>data_store_id</code> is provided, then the created |
| <code>ContentDecryptionModule</code> will persist data to that data store. If the |
| <code>KeySystem</code> requires a data store and <code>NO_DATA_STORE</code> was provided or |
| the <code>KeySystem</code> does not support data stores and one was provided, then |
| the server should close the <code>cdm</code>.</p> |
| <p>If the <code>data_store_id</code> does not exist, the <code>cdm</code> will be closed with a |
| <code>ZX_ERR_NOT_FOUND</code> epitaph.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the data store that should be used by the |
| <code>ContentDecryptionModule</code>.</li> |
| <li>request <code>cdm</code> the server endpoint of the <code>ContentDecryptionModule</code>.</li> |
| </ul> |
| |
| |
| |
| #### Request {#Widevine.CreateContentDecryptionModule2_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| <tr> |
| <td><code>cdm</code></td> |
| <td> |
| <code>server_end<<a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a>></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ### DestroyDataStoreAndConfirm {#Widevine.DestroyDataStoreAndConfirm} |
| |
| <p>Destroys the client data store.</p> |
| <p>This method permanently removes this data store and all of its contents. |
| All provisioning and license data will be removed and any active |
| <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> using this data store will be closed.</p> |
| <ul> |
| <li>request <code>data_store_id</code> the client-assigned identifier for the data |
| store to be removed. It is invalid for the client to provide |
| <a class='link' href='#NO_DATA_STORE'>NO_DATA_STORE</a> or a <code>data_store_id</code> value that has not previously |
| been added or has been previously destroyed.</li> |
| </ul> |
| |
| |
| |
| #### Request {#Widevine.DestroyDataStoreAndConfirm_Request} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>data_store_id</code></td> |
| <td> |
| <code>uint32</code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| #### Response {#Widevine.DestroyDataStoreAndConfirm_Response} |
| |
| <EMPTY> |
| |
| ### GetProperties {#Widevine.GetProperties} |
| |
| <p>Get various static properties of the <code>KeySystem</code> implementation.</p> |
| <p>The properties include the capabilities and requirements of the |
| <code>KeySystem</code>, such as whether the implementation is hardware-based or |
| whether it requires client-provided data stores to operate.</p> |
| <ul> |
| <li>response <code>properties</code> the properties of the <code>KeySystem</code> |
| implementation.</li> |
| </ul> |
| |
| |
| |
| #### Request {#Widevine.GetProperties_Request} |
| |
| <EMPTY> |
| |
| |
| #### Response {#Widevine.GetProperties_Response} |
| |
| <table> |
| <tr><th>Name</th><th>Type</th></tr> |
| <tr> |
| <td><code>properties</code></td> |
| <td> |
| <code><a class='link' href='#KeySystemProperties'>KeySystemProperties</a></code> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ## **STRUCTS** |
| |
| ### ContentDecryptionModule_SetServerCertificate_Response {#ContentDecryptionModule_SetServerCertificate_Response data-text="ContentDecryptionModule_SetServerCertificate_Response"} |
| *Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=51)* |
| |
| <EMPTY> |
| |
| ### KeySystem_AddDataStore_Response {#KeySystem_AddDataStore_Response data-text="KeySystem_AddDataStore_Response"} |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=42)* |
| |
| <EMPTY> |
| |
| ### LicenseInitData {#LicenseInitData data-text="LicenseInitData"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=32)* |
| |
| <table> |
| <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr> |
| <tr id="LicenseInitData.type"> |
| <td><code>type</code></td> |
| <td> |
| <code><a class='link' href='#LicenseInitDataType'>LicenseInitDataType</a></code> |
| </td> |
| <td><p>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.</p> |
| </td> |
| <td>No default</td> |
| </tr> |
| <tr id="LicenseInitData.data"> |
| <td><code>data</code></td> |
| <td> |
| <code>vector<uint8></code> |
| </td> |
| <td></td> |
| <td>No default</td> |
| </tr> |
| </table> |
| |
| ### LicenseMessage [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#LicenseMessage data-text="LicenseMessage"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=42)* |
| <p>A message originating from the <a class='link' href='#LicenseSession'>LicenseSession</a> that the caller must route |
| to the license server.</p> |
| |
| <table> |
| <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr> |
| <tr id="LicenseMessage.type"> |
| <td><code>type</code></td> |
| <td> |
| <code><a class='link' href='#LicenseMessageType'>LicenseMessageType</a></code> |
| </td> |
| <td></td> |
| <td>No default</td> |
| </tr> |
| <tr id="LicenseMessage.message"> |
| <td><code>message</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code> |
| </td> |
| <td></td> |
| <td>No default</td> |
| </tr> |
| </table> |
| |
| ### LicenseServerMessage [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#LicenseServerMessage data-text="LicenseServerMessage"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=49)* |
| <p>A message originating from the license server that the caller must provide |
| to the <a class='link' href='#LicenseSession'>LicenseSession</a> via <code>ProcessLicenseServerMessage</code>.</p> |
| |
| <table> |
| <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr> |
| <tr id="LicenseServerMessage.message"> |
| <td><code>message</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code> |
| </td> |
| <td></td> |
| <td>No default</td> |
| </tr> |
| </table> |
| |
| ### LicenseSession_GenerateLicenseRelease_Response {#LicenseSession_GenerateLicenseRelease_Response data-text="LicenseSession_GenerateLicenseRelease_Response"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=117)* |
| |
| <EMPTY> |
| |
| ### LicenseSession_GenerateLicenseRequest_Response {#LicenseSession_GenerateLicenseRequest_Response data-text="LicenseSession_GenerateLicenseRequest_Response"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=100)* |
| |
| <EMPTY> |
| |
| ### LicenseSession_ProcessLicenseResponse_Response {#LicenseSession_ProcessLicenseResponse_Response data-text="LicenseSession_ProcessLicenseResponse_Response"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=129)* |
| |
| <EMPTY> |
| |
| ### ProvisioningRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#ProvisioningRequest data-text="ProvisioningRequest"} |
| *Defined in [fuchsia.media.drm/provisioning.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/provisioning.fidl;l=11)* |
| <p>Message passed to a <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> by a DRM system, to pass on to |
| the provisioning server.</p> |
| |
| <table> |
| <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr> |
| <tr id="ProvisioningRequest.default_provisioning_server_url"> |
| <td><code>default_provisioning_server_url</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.url/'>fuchsia.url</a>/<a class='link' href='../fuchsia.url/#Url'>Url</a></code> |
| </td> |
| <td><p>A suggested server to send the <code>message</code> to.</p> |
| </td> |
| <td>No default</td> |
| </tr> |
| <tr id="ProvisioningRequest.message"> |
| <td><code>message</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code> |
| </td> |
| <td><p>The DRM system specific provisioning request message body to be |
| delivered to the provisioning server. The VMO must at least have the |
| following rights: |
| ZX_RIGHT_READ |
| ZX_RIGHT_TRANSFER</p> |
| </td> |
| <td>No default</td> |
| </tr> |
| </table> |
| |
| ### ProvisioningResponse [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#ProvisioningResponse data-text="ProvisioningResponse"} |
| *Defined in [fuchsia.media.drm/provisioning.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/provisioning.fidl;l=25)* |
| <p>Message originating from the provisioning server that the |
| <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> must pass back to the DRM system.</p> |
| |
| <table> |
| <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr> |
| <tr id="ProvisioningResponse.message"> |
| <td><code>message</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.mem/'>fuchsia.mem</a>/<a class='link' href='../fuchsia.mem/#Buffer'>Buffer</a></code> |
| </td> |
| <td><p>The DRM system specific provisioning response message body received from |
| the provisioning server. The VMO must at least have the following |
| rights: |
| ZX_RIGHT_READ |
| ZX_RIGHT_TRANSFER</p> |
| </td> |
| <td>No default</td> |
| </tr> |
| </table> |
| |
| |
| ## **ENUMS** |
| |
| ### Error [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Error data-text="Error"} |
| Type: <code>uint32</code> |
| |
| *Defined in [fuchsia.media.drm/error.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/error.fidl;l=12)* |
| <p>Standard error codes for DRM related protocols. Many of the error code names |
| originate from the <a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a> specification to cover |
| common CDM exception cases.</p> |
| <p><a class='link' href='#W3C Encrypted Media Extensions'>W3C Encrypted Media Extensions</a>: |
| https://www.w3.org/TR/encrypted-media</p> |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="Error.TYPE"> |
| <td><h3 id="Error.TYPE" class="add-link hide-from-toc">TYPE</h3></td> |
| <td><code>1</code></td> |
| <td><p>An error that occurs when the client provides invalid parameter data to |
| the server, such as an invalid license response message.</p> |
| </td> |
| </tr> |
| <tr id="Error.NOT_SUPPORTED"> |
| <td><h3 id="Error.NOT_SUPPORTED" class="add-link hide-from-toc">NOT_SUPPORTED</h3></td> |
| <td><code>2</code></td> |
| <td><p>An error that occurs when a requested operation is not supported by the |
| CDM, such as a license generation request with an unknown initialization |
| data type.</p> |
| </td> |
| </tr> |
| <tr id="Error.INVALID_STATE"> |
| <td><h3 id="Error.INVALID_STATE" class="add-link hide-from-toc">INVALID_STATE</h3></td> |
| <td><code>3</code></td> |
| <td><p>An error that occurs when the CDM is not in a proper state to perform |
| the requested operation, such as calling |
| <a class='link' href='#LicenseSession.GenerateLicenseRequest'>LicenseSession.GenerateLicenseRequest</a> when the <a class='link' href='#LicenseSession'>LicenseSession</a> |
| has already started the license release process.</p> |
| </td> |
| </tr> |
| <tr id="Error.QUOTA_EXCEEDED"> |
| <td><h3 id="Error.QUOTA_EXCEEDED" class="add-link hide-from-toc">QUOTA_EXCEEDED</h3></td> |
| <td><code>4</code></td> |
| <td><p>An error that occurs when a requested action would exceed allowable |
| limits, such as attempting to load an already opened session. </p> |
| </td> |
| </tr> |
| <tr id="Error.INTERNAL"> |
| <td><h3 id="Error.INTERNAL" class="add-link hide-from-toc">INTERNAL</h3></td> |
| <td><code>100</code></td> |
| <td><p>An internal, unexpected error that is not actionable by the client.</p> |
| </td> |
| </tr> |
| <tr id="Error.NOT_PROVISIONED"> |
| <td><h3 id="Error.NOT_PROVISIONED" class="add-link hide-from-toc">NOT_PROVISIONED</h3></td> |
| <td><code>101</code></td> |
| <td><p>An error that occurs when the CDM is not usable because it requires |
| additional provisioning.</p> |
| </td> |
| </tr> |
| </table> |
| |
| ### KeyStatus [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#KeyStatus data-text="KeyStatus"} |
| Type: <code>uint32</code> |
| |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=53)* |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="KeyStatus.USABLE"> |
| <td><h3 id="KeyStatus.USABLE" class="add-link hide-from-toc">USABLE</h3></td> |
| <td><code>0</code></td> |
| <td><p>The key is currently usable for decryption.</p> |
| </td> |
| </tr> |
| <tr id="KeyStatus.EXPIRED"> |
| <td><h3 id="KeyStatus.EXPIRED" class="add-link hide-from-toc">EXPIRED</h3></td> |
| <td><code>1</code></td> |
| <td><p>The Key is no longer usable for decryption because it has expired.</p> |
| </td> |
| </tr> |
| <tr id="KeyStatus.RELEASED"> |
| <td><h3 id="KeyStatus.RELEASED" class="add-link hide-from-toc">RELEASED</h3></td> |
| <td><code>2</code></td> |
| <td><p>The Key is no longer usable for decryption, but is still known to the |
| CDM.</p> |
| </td> |
| </tr> |
| <tr id="KeyStatus.OUTPUT_RESTRICTED"> |
| <td><h3 id="KeyStatus.OUTPUT_RESTRICTED" class="add-link hide-from-toc">OUTPUT_RESTRICTED</h3></td> |
| <td><code>3</code></td> |
| <td><p>The Key has output restrictions that cannot currently be met and may be |
| unusable for decryption.</p> |
| </td> |
| </tr> |
| <tr id="KeyStatus.OUTPUT_DOWNSCALED"> |
| <td><h3 id="KeyStatus.OUTPUT_DOWNSCALED" class="add-link hide-from-toc">OUTPUT_DOWNSCALED</h3></td> |
| <td><code>4</code></td> |
| <td><p>The Key has output restrictions that cannot currently be met. The Key |
| may be usable for decryption with lower quality content.</p> |
| </td> |
| </tr> |
| <tr id="KeyStatus.STATUS_PENDING"> |
| <td><h3 id="KeyStatus.STATUS_PENDING" class="add-link hide-from-toc">STATUS_PENDING</h3></td> |
| <td><code>5</code></td> |
| <td><p>The Key is not yet known or usable for decryption.</p> |
| </td> |
| </tr> |
| <tr id="KeyStatus.INTERNAL_ERROR"> |
| <td><h3 id="KeyStatus.INTERNAL_ERROR" class="add-link hide-from-toc">INTERNAL_ERROR</h3></td> |
| <td><code>6</code></td> |
| <td><p>The Key is not usable for decryption because of an internal error.</p> |
| </td> |
| </tr> |
| </table> |
| |
| ### LicenseMessageType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseMessageType data-text="LicenseMessageType"} |
| Type: <code>uint32</code> |
| |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=26)* |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="LicenseMessageType.REQUEST"> |
| <td><h3 id="LicenseMessageType.REQUEST" class="add-link hide-from-toc">REQUEST</h3></td> |
| <td><code>1</code></td> |
| <td></td> |
| </tr> |
| <tr id="LicenseMessageType.RENEWAL"> |
| <td><h3 id="LicenseMessageType.RENEWAL" class="add-link hide-from-toc">RENEWAL</h3></td> |
| <td><code>2</code></td> |
| <td></td> |
| </tr> |
| <tr id="LicenseMessageType.RELEASE"> |
| <td><h3 id="LicenseMessageType.RELEASE" class="add-link hide-from-toc">RELEASE</h3></td> |
| <td><code>3</code></td> |
| <td></td> |
| </tr> |
| </table> |
| |
| ### LicenseSessionType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSessionType data-text="LicenseSessionType"} |
| Type: <code>uint32</code> |
| |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=16)* |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="LicenseSessionType.TEMPORARY"> |
| <td><h3 id="LicenseSessionType.TEMPORARY" class="add-link hide-from-toc">TEMPORARY</h3></td> |
| <td><code>1</code></td> |
| <td><p>A session for which the license, keys, and record of the session are not |
| persisted.</p> |
| </td> |
| </tr> |
| <tr id="LicenseSessionType.PERSISTENT_LICENSE"> |
| <td><h3 id="LicenseSessionType.PERSISTENT_LICENSE" class="add-link hide-from-toc">PERSISTENT_LICENSE</h3></td> |
| <td><code>2</code></td> |
| <td><p>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().</p> |
| </td> |
| </tr> |
| </table> |
| |
| ### Requirement [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Requirement data-text="Requirement"} |
| Type: <code>uint32</code> |
| |
| *Defined in [fuchsia.media.drm/properties.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/properties.fidl;l=15)* |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="Requirement.NOT_SUPPORTED"> |
| <td><h3 id="Requirement.NOT_SUPPORTED" class="add-link hide-from-toc">NOT_SUPPORTED</h3></td> |
| <td><code>1</code></td> |
| <td></td> |
| </tr> |
| <tr id="Requirement.OPTIONAL"> |
| <td><h3 id="Requirement.OPTIONAL" class="add-link hide-from-toc">OPTIONAL</h3></td> |
| <td><code>2</code></td> |
| <td></td> |
| </tr> |
| <tr id="Requirement.REQUIRED"> |
| <td><h3 id="Requirement.REQUIRED" class="add-link hide-from-toc">REQUIRED</h3></td> |
| <td><code>3</code></td> |
| <td></td> |
| </tr> |
| </table> |
| |
| |
| ## **TABLES** |
| |
| ### DataStoreParams [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#DataStoreParams data-text="DataStoreParams"} |
| |
| |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=82)* |
| |
| <table> |
| <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr> |
| <tr id="DataStoreParams.data_directory"> |
| <td><h3 id="DataStoreParams.data_directory" class="add-link hide-from-toc">1</h3></td> |
| <td><code>data_directory</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Directory'>Directory</a></code> |
| </td> |
| <td><p>Directory into which this data store should write persistent |
| provisioning and licenses, or their proxy. This field is required.</p> |
| </td> |
| </tr> |
| <tr id="DataStoreParams.provision_server_certificate"> |
| <td><h3 id="DataStoreParams.provision_server_certificate" class="add-link hide-from-toc">2</h3></td> |
| <td><code>provision_server_certificate</code></td> |
| <td> |
| <code>vector<uint8></code> |
| </td> |
| <td><p>Certificate to use for encrypting provisioning messages. This field is |
| optional.</p> |
| </td> |
| </tr> |
| <tr id="DataStoreParams.provisioning_fetcher"> |
| <td><h3 id="DataStoreParams.provisioning_fetcher" class="add-link hide-from-toc">3</h3></td> |
| <td><code>provisioning_fetcher</code></td> |
| <td> |
| <code><a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a></code> |
| </td> |
| <td><p>The client endpoint of the <a class='link' href='#ProvisioningFetcher'>ProvisioningFetcher</a> to be used when this |
| data store requires provisioning. If the DRM system requires data store |
| provisioning, then this field is required to be set. Otherwise, it is |
| optional.</p> |
| </td> |
| </tr> |
| </table> |
| |
| ### DecryptorParams {#DecryptorParams data-text="DecryptorParams"} |
| |
| |
| *Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=8)* |
| |
| <table> |
| <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr> |
| <tr id="DecryptorParams.require_secure_mode"> |
| <td><h3 id="DecryptorParams.require_secure_mode" class="add-link hide-from-toc">1</h3></td> |
| <td><code>require_secure_mode</code></td> |
| <td> |
| <code>bool</code> |
| </td> |
| <td><p>Requires the decryptor <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a> to only output |
| to secure buffers.</p> |
| </td> |
| </tr> |
| <tr id="DecryptorParams.input_details"> |
| <td><h3 id="DecryptorParams.input_details" class="add-link hide-from-toc">2</h3></td> |
| <td><code>input_details</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#FormatDetails'>FormatDetails</a></code> |
| </td> |
| <td><p>Initial format details for the <a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#StreamProcessor'>StreamProcessor</a>.</p> |
| </td> |
| </tr> |
| </table> |
| |
| ### KeyState {#KeyState data-text="KeyState"} |
| |
| |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=73)* |
| |
| <table> |
| <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr> |
| <tr id="KeyState.key_id"> |
| <td><h3 id="KeyState.key_id" class="add-link hide-from-toc">1</h3></td> |
| <td><code>key_id</code></td> |
| <td> |
| <code><a class='link' href='../fuchsia.media/'>fuchsia.media</a>/<a class='link' href='../fuchsia.media/#KeyId'>KeyId</a></code> |
| </td> |
| <td></td> |
| </tr> |
| <tr id="KeyState.status"> |
| <td><h3 id="KeyState.status" class="add-link hide-from-toc">2</h3></td> |
| <td><code>status</code></td> |
| <td> |
| <code><a class='link' href='#KeyStatus'>KeyStatus</a></code> |
| </td> |
| <td></td> |
| </tr> |
| </table> |
| |
| ### KeySystemProperties {#KeySystemProperties data-text="KeySystemProperties"} |
| |
| |
| *Defined in [fuchsia.media.drm/properties.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/properties.fidl;l=21)* |
| |
| <table> |
| <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr> |
| <tr id="KeySystemProperties.features"> |
| <td><h3 id="KeySystemProperties.features" class="add-link hide-from-toc">1</h3></td> |
| <td><code>features</code></td> |
| <td> |
| <code><a class='link' href='#Features'>Features</a></code> |
| </td> |
| <td><p>Various flags indicating supported features of the <a class='link' href='#KeySystem'>KeySystem</a>. This |
| field is required.</p> |
| </td> |
| </tr> |
| <tr id="KeySystemProperties.data_store_requirement"> |
| <td><h3 id="KeySystemProperties.data_store_requirement" class="add-link hide-from-toc">2</h3></td> |
| <td><code>data_store_requirement</code></td> |
| <td> |
| <code><a class='link' href='#Requirement'>Requirement</a></code> |
| </td> |
| <td><p>Indicates the data store requirements of the <a class='link' href='#KeySystem'>KeySystem</a>.</p> |
| <p>See <a class='link' href='#KeySystem.ContentDecryptionModule2'>KeySystem.ContentDecryptionModule2</a> for implications of different |
| values. This field is required.</p> |
| </td> |
| </tr> |
| <tr id="KeySystemProperties.license_session_types"> |
| <td><h3 id="KeySystemProperties.license_session_types" class="add-link hide-from-toc">3</h3></td> |
| <td><code>license_session_types</code></td> |
| <td> |
| <code>vector<<a class='link' href='#LicenseSessionType'>LicenseSessionType</a>></code> |
| </td> |
| <td><p>Indicates the supported license session types. This field is required |
| and the list must not be empty.</p> |
| </td> |
| </tr> |
| <tr id="KeySystemProperties.init_data_types"> |
| <td><h3 id="KeySystemProperties.init_data_types" class="add-link hide-from-toc">4</h3></td> |
| <td><code>init_data_types</code></td> |
| <td> |
| <code>vector<string></code> |
| </td> |
| <td><p>Indicates the supported init data types. This field is required and the |
| list must not be empty.</p> |
| </td> |
| </tr> |
| <tr id="KeySystemProperties.encryption_schemes"> |
| <td><h3 id="KeySystemProperties.encryption_schemes" class="add-link hide-from-toc">5</h3></td> |
| <td><code>encryption_schemes</code></td> |
| <td> |
| <code>vector<string></code> |
| </td> |
| <td><p>Indicates the supported encryption schemes. This field is required and |
| the list must not be empty.</p> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ## **UNIONS** |
| |
| ### ContentDecryptionModule_SetServerCertificate_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#ContentDecryptionModule_SetServerCertificate_Result data-text="ContentDecryptionModule_SetServerCertificate_Result"} |
| *Defined in [fuchsia.media.drm/content_decryption.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/content_decryption.fidl;l=51)* |
| <table> |
| <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr> |
| <tr id="ContentDecryptionModule_SetServerCertificate_Result.response"> |
| <td><h3 id="ContentDecryptionModule_SetServerCertificate_Result.response" class="add-link hide-from-toc">1</h3></td> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#ContentDecryptionModule_SetServerCertificate_Response'>ContentDecryptionModule_SetServerCertificate_Response</a></code> |
| </td> |
| <td></td> |
| </tr> |
| <tr id="ContentDecryptionModule_SetServerCertificate_Result.err"> |
| <td><h3 id="ContentDecryptionModule_SetServerCertificate_Result.err" class="add-link hide-from-toc">2</h3></td> |
| <td><code>err</code></td> |
| <td> |
| <code><a class='link' href='#Error'>Error</a></code> |
| </td> |
| <td></td> |
| </tr> |
| </table> |
| |
| ### KeySystem_AddDataStore_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#KeySystem_AddDataStore_Result data-text="KeySystem_AddDataStore_Result"} |
| *Defined in [fuchsia.media.drm/services.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=42)* |
| <table> |
| <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr> |
| <tr id="KeySystem_AddDataStore_Result.response"> |
| <td><h3 id="KeySystem_AddDataStore_Result.response" class="add-link hide-from-toc">1</h3></td> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#KeySystem_AddDataStore_Response'>KeySystem_AddDataStore_Response</a></code> |
| </td> |
| <td></td> |
| </tr> |
| <tr id="KeySystem_AddDataStore_Result.err"> |
| <td><h3 id="KeySystem_AddDataStore_Result.err" class="add-link hide-from-toc">2</h3></td> |
| <td><code>err</code></td> |
| <td> |
| <code><a class='link' href='#Error'>Error</a></code> |
| </td> |
| <td></td> |
| </tr> |
| </table> |
| |
| ### LicenseSession_GenerateLicenseRelease_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSession_GenerateLicenseRelease_Result data-text="LicenseSession_GenerateLicenseRelease_Result"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=117)* |
| <table> |
| <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr> |
| <tr id="LicenseSession_GenerateLicenseRelease_Result.response"> |
| <td><h3 id="LicenseSession_GenerateLicenseRelease_Result.response" class="add-link hide-from-toc">1</h3></td> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSession_GenerateLicenseRelease_Response'>LicenseSession_GenerateLicenseRelease_Response</a></code> |
| </td> |
| <td></td> |
| </tr> |
| <tr id="LicenseSession_GenerateLicenseRelease_Result.err"> |
| <td><h3 id="LicenseSession_GenerateLicenseRelease_Result.err" class="add-link hide-from-toc">2</h3></td> |
| <td><code>err</code></td> |
| <td> |
| <code><a class='link' href='#Error'>Error</a></code> |
| </td> |
| <td></td> |
| </tr> |
| </table> |
| |
| ### LicenseSession_GenerateLicenseRequest_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSession_GenerateLicenseRequest_Result data-text="LicenseSession_GenerateLicenseRequest_Result"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=100)* |
| <table> |
| <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr> |
| <tr id="LicenseSession_GenerateLicenseRequest_Result.response"> |
| <td><h3 id="LicenseSession_GenerateLicenseRequest_Result.response" class="add-link hide-from-toc">1</h3></td> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSession_GenerateLicenseRequest_Response'>LicenseSession_GenerateLicenseRequest_Response</a></code> |
| </td> |
| <td></td> |
| </tr> |
| <tr id="LicenseSession_GenerateLicenseRequest_Result.err"> |
| <td><h3 id="LicenseSession_GenerateLicenseRequest_Result.err" class="add-link hide-from-toc">2</h3></td> |
| <td><code>err</code></td> |
| <td> |
| <code><a class='link' href='#Error'>Error</a></code> |
| </td> |
| <td></td> |
| </tr> |
| </table> |
| |
| ### LicenseSession_ProcessLicenseResponse_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LicenseSession_ProcessLicenseResponse_Result data-text="LicenseSession_ProcessLicenseResponse_Result"} |
| *Defined in [fuchsia.media.drm/license_session.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=129)* |
| <table> |
| <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr> |
| <tr id="LicenseSession_ProcessLicenseResponse_Result.response"> |
| <td><h3 id="LicenseSession_ProcessLicenseResponse_Result.response" class="add-link hide-from-toc">1</h3></td> |
| <td><code>response</code></td> |
| <td> |
| <code><a class='link' href='#LicenseSession_ProcessLicenseResponse_Response'>LicenseSession_ProcessLicenseResponse_Response</a></code> |
| </td> |
| <td></td> |
| </tr> |
| <tr id="LicenseSession_ProcessLicenseResponse_Result.err"> |
| <td><h3 id="LicenseSession_ProcessLicenseResponse_Result.err" class="add-link hide-from-toc">2</h3></td> |
| <td><code>err</code></td> |
| <td> |
| <code><a class='link' href='#Error'>Error</a></code> |
| </td> |
| <td></td> |
| </tr> |
| </table> |
| |
| |
| ## **BITS** |
| |
| ### Features [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Features} |
| Type: <code>uint32</code> |
| |
| *Defined in [fuchsia.media.drm/properties.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/properties.fidl;l=6)* |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="Features.HARDWARE_CRYPTO"> |
| <td><h3 id="Features.HARDWARE_CRYPTO" class="add-link hide-from-toc">HARDWARE_CRYPTO</h3></td> |
| <td>1</td> |
| <td><p>All key management and crypto operations are performed in a hardware |
| based trusted execution environment. If not set, a software |
| implementation is used.</p> |
| </td> |
| </tr> |
| <tr id="Features.SECURE_OUTPUT"> |
| <td><h3 id="Features.SECURE_OUTPUT" class="add-link hide-from-toc">SECURE_OUTPUT</h3></td> |
| <td>2</td> |
| <td><p>Decrypted data can be written to hardware secure buffers.</p> |
| </td> |
| </tr> |
| </table> |
| |
| |
| ## **CONSTANTS** |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr> |
| <tr id="LICENSE_INIT_DATA_TYPE_CENC"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=11">LICENSE_INIT_DATA_TYPE_CENC</a></td> |
| <td><code>cenc</code></td> |
| <td><code>String</code></td> |
| <td></td> |
| </tr> |
| <tr id="LICENSE_INIT_DATA_TYPE_HLS"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=14">LICENSE_INIT_DATA_TYPE_HLS</a></td> |
| <td><code>hls</code></td> |
| <td><code>String</code></td> |
| <td></td> |
| </tr> |
| <tr id="LICENSE_INIT_DATA_TYPE_KEYIDS"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=12">LICENSE_INIT_DATA_TYPE_KEYIDS</a></td> |
| <td><code>keyids</code></td> |
| <td><code>String</code></td> |
| <td></td> |
| </tr> |
| <tr id="LICENSE_INIT_DATA_TYPE_WEBM"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/license_session.fidl;l=13">LICENSE_INIT_DATA_TYPE_WEBM</a></td> |
| <td><code>webm</code></td> |
| <td><code>String</code></td> |
| <td></td> |
| </tr> |
| <tr id="MAX_HDCP_VERSION_SIZE"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=10">MAX_HDCP_VERSION_SIZE</a></td> |
| <td> |
| <code>16</code> |
| </td> |
| <td><code>uint32</code></td> |
| <td></td> |
| </tr> |
| <tr id="MAX_LICENSE_INIT_DATA_TYPE_SIZE"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=9">MAX_LICENSE_INIT_DATA_TYPE_SIZE</a></td> |
| <td> |
| <code>100</code> |
| </td> |
| <td><code>uint32</code></td> |
| <td></td> |
| </tr> |
| <tr id="MAX_SESSION_ID_SIZE"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=8">MAX_SESSION_ID_SIZE</a></td> |
| <td> |
| <code>512</code> |
| </td> |
| <td><code>uint32</code></td> |
| <td></td> |
| </tr> |
| <tr id="NO_DATA_STORE"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/services.fidl;l=10">NO_DATA_STORE</a></td> |
| <td> |
| <code>0</code> |
| </td> |
| <td><code>uint32</code></td> |
| <td><p>A sentinel value for use with <a class='link' href='#KeySystem.CreateContentDecryptionModule2'>KeySystem.CreateContentDecryptionModule2</a> |
| to create a <a class='link' href='#ContentDecryptionModule'>ContentDecryptionModule</a> without a client data store.</p> |
| </td> |
| </tr> |
| </table> |
| |
| ## **ALIASES** |
| |
| <table> |
| <tr><th>Name</th><th>Value</th><th>Description</th></tr> |
| <tr id="EncryptionScheme"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=15">EncryptionScheme</a></td> |
| <td> |
| <code>string</code></td> |
| <td></td> |
| </tr> |
| <tr id="HdcpVersion"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=14">HdcpVersion</a></td> |
| <td> |
| <code>string</code>[<code><a class='link' href='#MAX_HDCP_VERSION_SIZE'>MAX_HDCP_VERSION_SIZE</a></code>]</td> |
| <td></td> |
| </tr> |
| <tr id="LicenseInitDataType"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=13">LicenseInitDataType</a></td> |
| <td> |
| <code>string</code>[<code><a class='link' href='#MAX_LICENSE_INIT_DATA_TYPE_SIZE'>MAX_LICENSE_INIT_DATA_TYPE_SIZE</a></code>]</td> |
| <td></td> |
| </tr> |
| <tr id="SessionId"> |
| <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.media.drm/types.fidl;l=12">SessionId</a></td> |
| <td> |
| <code>string</code>[<code><a class='link' href='#MAX_SESSION_ID_SIZE'>MAX_SESSION_ID_SIZE</a></code>]</td> |
| <td></td> |
| </tr> |
| </table> |