# @ohos.multimedia.drm (数字版权保护) DRM(Digital Rights Management)框架组件支持音视频媒体业务数字版权管理功能的开发。开发者可以调用系统提供的DRM插件,完成以下功能: * DRM证书管理:生成证书请求、设置证书响应,实现对证书Provision(下载)功能。 * DRM媒体密钥管理:生成媒体密钥请求、设置媒体密钥响应、管理离线媒体密钥功能。 * DRM节目授权:支持DRM插件根据媒体密钥权限对DRM节目授权。 * DRM节目解密:支持媒体播放功能的解密调用,实现对DRM节目的解密。 > **说明:** > 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 ## 导入模块 ```ts import { drm } from '@kit.DrmKit'; ``` ## DrmErrorCode 枚举,错误码。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | ERROR_UNKNOWN | 24700101 | 未知错误 | | MAX_SYSTEM_NUM_REACHED | 24700103 | MediaKeySystem实例数量超过上限(64个) | | MAX_SESSION_NUM_REACHED | 24700104 | MediaKeySession实例数量超过上限(64个) | | SERVICE_FATAL_ERROR | 24700201 | DRM服务异常 | ## PreDefinedConfigName 枚举,预定义的配置属性。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | CONFIG_DEVICE_VENDOR | 'vendor' | 插件厂商名,通过[getConfigurationString](#getconfigurationstring)接口获取vendor对应配置值。 | | CONFIG_DEVICE_VERSION | 'version' | 插件版本号,通过[getConfigurationString](#getconfigurationstring)接口获取version对应配置值。 | | CONFIG_DEVICE_DESCRIPTION | 'description' | 设备描述符,通过[getConfigurationString](#getconfigurationstring)接口获取description对应配置值。 | | CONFIG_DEVICE_ALGORITHMS | 'algorithms' | 支持的算法,通过[getConfigurationString](#getconfigurationstring)接口获取algorithms对应配置值。 | | CONFIG_DEVICE_UNIQUE_ID | 'deviceUniqueId' | 设备唯一标识,通过[getConfigurationByteArray](#getconfigurationbytearray)接口获取deviceUniqueId对应配置值。 | | CONFIG_SESSION_MAX | 'maxSessionNum' | 设备支持的最大会话数,通过[getConfigurationString](#getconfigurationstring)接口获取maxSessionNum对应配置值。 | | CONFIG_SESSION_CURRENT | 'currentSessionNum' | 当前会话数量,通过[getConfigurationString](#getconfigurationstring)接口获取currentSessionNum对应配置值。 | ## MediaKeyType 枚举,媒体密钥类型。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | MEDIA_KEY_TYPE_OFFLINE | 0 | 离线 | | MEDIA_KEY_TYPE_ONLINE | 1 | 在线 | ## OfflineMediaKeyStatus 枚举,离线媒体密钥状态。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | OFFLINE_MEDIA_KEY_STATUS_UNKNOWN | 0 | 未知状态 | | OFFLINE_MEDIA_KEY_STATUS_USABLE | 1 | 可用状态 | | OFFLINE_MEDIA_KEY_STATUS_INACTIVE | 2 | 失活状态 | ## CertificateStatus 枚举,设备证书状态。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | CERT_STATUS_PROVISIONED | 0 | 设备已安装设备证书 | | CERT_STATUS_NOT_PROVISIONED | 1 | 设备未安装设备证书 | | CERT_STATUS_EXPIRED | 2 | 设备证书过期 | | CERT_STATUS_INVALID | 3 | 设备证书无效 | | CERT_STATUS_UNAVAILABLE | 4 | 设备证书不可用 | ## MediaKeyRequestType 枚举,媒体密钥请求类型。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | MEDIA_KEY_REQUEST_TYPE_UNKNOWN | 0 | 未知请求类型 | | MEDIA_KEY_REQUEST_TYPE_INITIAL | 1 | 初始化请求 | | MEDIA_KEY_REQUEST_TYPE_RENEWAL | 2 | 续订请求 | | MEDIA_KEY_REQUEST_TYPE_RELEASE | 3 | 释放请求 | | MEDIA_KEY_REQUEST_TYPE_NONE | 4 | 无请求 | | MEDIA_KEY_REQUEST_TYPE_UPDATE | 5 | 更新请求 | ## ContentProtectionLevel 枚举,内容保护级别。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 值 | 说明 | | ------------------------- | ---- | ------------ | | CONTENT_PROTECTION_LEVEL_UNKNOWN | 0 | 未知内容保护级别 | | CONTENT_PROTECTION_LEVEL_SW_CRYPTO | 1 | 软件内容保护级别 | | CONTENT_PROTECTION_LEVEL_HW_CRYPTO | 2 | 硬件内容保护级别 | | CONTENT_PROTECTION_LEVEL_ENHANCED_HW | 3 | 硬件增强内容保护级别 | | CONTENT_PROTECTION_LEVEL_MAX | 4 | 最高内容保护级别 | ## ProvisionRequest 设备证书请求。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | data | Uint8Array | 是 | 设备证书请求数据 | | defaultURL | string | 是 | Provision服务(设备证书请求服务)URL | ## OptionsData 设备证书请求的可选数据。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | name | string | 是 | 可选数据名 | | value | string | 是 | 可选数据值 | ## MediaKeyRequest 媒体密钥请求参数。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | mediaKeyRequestType | [MediaKeyRequestType](#mediakeyrequesttype) | 是 | 媒体密钥请求类型 | | data | Uint8Array | 是 | 媒体密钥请求数据 | | defaultURL | string | 是 | 媒体密钥服务URL | ## EventInfo 事件信息。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | info | Uint8Array | 是 | 事件信息数据 | | extraInfo | string | 是 | 事件扩展信息 | ## StatisticKeyValue 度量记录。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | name | string | 是 | 度量记录名 | | value | string | 是 | 度量记录值 | ## MediaKeyStatus 媒体密钥状态 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | name | string | 是 | 媒体密钥状态名称(如媒体密钥过期时间、内容保护安全级别等) | | value | string | 是 | 媒体密钥状态值 | ## KeysInfo 媒体密钥中密钥信息。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | keyId | Uint8Array | 是 | 媒体密钥标识 | | value | string | 是 | 媒体密钥状态值 | ## MediaKeySystemInfo 加密媒体内容的DRM信息。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | uuid | string | 是 | DRM内容保护系统的唯一标识 | | pssh | Uint8Array | 是 | DRM内容保护系统专用头(Protection System Specific Header) | ## MediaKeySystemDescription12+ 插件信息。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core | 名称 | 类型 | 必填 | 说明 | | -------- | ----------------------------- |---- | ------------- | | name | string | 是 | 插件名称 | | uuid | string | 是 | 插件唯一标识码 | ## drm.createMediaKeySystem createMediaKeySystem(name: string): MediaKeySystem 创建MediaKeySystem实例。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | name | string | 是 | DRM解决方案名称。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [MediaKeySystem](#mediakeysystem) | MediaKeySystem实例。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed. | | 24700101 | All unknown errors | | 24700103 | Meet max MediaKeySystem num limit | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); } catch (err) { let error = err as BusinessError; console.error(`createMediaKeySystem ERROR: ${error}`); } ``` ## drm.isMediaKeySystemSupported isMediaKeySystemSupported(name: string): boolean 判断设备是否支持指定的DRM解决方案。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | name | string | 是 | DRM解决方案名称。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | boolean | 返回是否支持。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed, the param name's length is zero or too big(exceeds 4096 Bytes). | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { let supported: boolean = drm.isMediaKeySystemSupported("com.clearplay.drm"); console.log("isMediaKeySystemSupported: ", supported); } catch (err) { let error = err as BusinessError; console.error(`isMediaKeySystemSupported ERROR: ${error}`); } ``` ## drm.isMediaKeySystemSupported isMediaKeySystemSupported(name: string, mimeType: string): boolean 判断设备是否支持指定DRM解决方案及媒体类型。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | name | string | 是 | DRM解决方案名称。 | | mimeType | string | 是 | 媒体类型,由DRM解决方案决定具体的支持类型。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | boolean | 返回是否支持。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { let supported: boolean = drm.isMediaKeySystemSupported("com.clearplay.drm", "video/avc"); console.log("isMediaKeySystemSupported: ", supported); } catch (err) { let error = err as BusinessError; console.error(`isMediaKeySystemSupported ERROR: ${error}`); } ``` ## drm.isMediaKeySystemSupported isMediaKeySystemSupported(name: string, mimeType: string, level: ContentProtectionLevel): boolean 判断设备是否支持指定DRM解决方案、媒体类型以及内容保护级别。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | name | string | 是 | DRM解决方案名称。 | | mimeType | string | 是 | 媒体类型,由DRM解决方案决定具体的支持类型。 | | level | [ContentProtectionLevel](#contentprotectionlevel) | 是 | 内容保护级别。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | boolean | 返回是否支持。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { let supported: boolean = drm.isMediaKeySystemSupported("com.clearplay.drm", "video/avc", drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO); console.log("isMediaKeySystemSupported: ", supported); } catch (err) { let error = err as BusinessError; console.error(`isMediaKeySystemSupported ERROR: ${error}`); } ``` ## drm.getMediaKeySystemUuid12+ getMediaKeySystemUuid(name: string): string; 获取DRM解决方案支持的DRM内容保护系统唯一标识。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | name | string | 是 | DRM解决方案名称。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | uuid | string | 是 | DRM内容保护系统的唯一标识。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed.Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { let uuid: String = drm.getMediaKeySystemUuid("com.clearplay.drm"); console.log("getMediaKeySystemUuid: ", uuid); } catch (err) { let error = err as BusinessError; console.error(`getMediaKeySystemUuid ERROR: ${error}`); } ``` ## drm.getMediaKeySystems12+ getMediaKeySystems(): MediaKeySystemDescription[] 获取设备支持的插件信息列表。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [MediaKeySystemDescription[]](#mediakeysystemdescription12) | 设备支持的插件信息列表。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { let description: drm.MediaKeySystemDescription[] = drm.getMediaKeySystems(); } catch (err) { let error = err as BusinessError; console.error(`getMediaKeySystems ERROR: ${error}`); } ``` ## MediaKeySystem 支持MediaKeySystem实例管理、设备证书申请与处理、会话创建、离线媒体密钥管理、获取DRM度量记录、设备属性等。在调用MediaKeySystem方法之前,必须使用[createMediaKeySystem](#drmcreatemediakeysystem)创建一个MediaKeySystem实例。 ### setConfigurationString setConfigurationString(configName: string, value: string): void 设置字符串类型的配置信息。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | configName | string | 是 | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。 | | value | string | 是 | 配置属性值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.| | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { mediaKeySystem.setConfigurationString("stringConfigName", "stringConfigValue"); // 确保stringConfigName是可配置的 } catch (err) { let error = err as BusinessError; console.error(`setConfigurationString ERROR: ${error}`); } ``` ### getConfigurationString getConfigurationString(configName: string): string 获取字符串类型的配置属性值。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | configName | string | 是 | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | string | 返回字符串类型的配置属性值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed, the param's length is zero or too big(exceeds 4096 Bytes). | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let configValue: string = mediaKeySystem.getConfigurationString("vendor"); } catch (err) { let error = err as BusinessError; console.error(`getConfigurationString ERROR: ${error}`); } ``` ### setConfigurationByteArray setConfigurationByteArray(configName: string, value: Uint8Array): void 设置数组类型的配置信息。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | configName | string | 是 | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。 | | value | Uint8Array | 是 | 数组类型的配置属性值,具体属性值由设备上DRM解决方案决定。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors. | | 24700201 | Fatal service error, for example, service died. | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); // 按实际需求填写configValue属性值,请按实际值传入 let configValue: Uint8Array = new Uint8Array([0x00, 0x00, 0x00, 0x00]); try { // 需确认当前DRM解决方案的byteArrayConfigName属性是可配置的 mediaKeySystem.setConfigurationByteArray("byteArrayConfigName", configValue); } catch (err) { let error = err as BusinessError; console.error(`setConfigurationByteArray ERROR: ${error}`); } ``` ### getConfigurationByteArray getConfigurationByteArray(configName: string): Uint8Array 获取数组类型的配置信息。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | configName | string | 是 | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Uint8Array | 数组类型的配置属性值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let configValue: Uint8Array = mediaKeySystem.getConfigurationByteArray("deviceUniqueId"); // 确保deviceUniqueId属性是存在的 } catch (err) { let error = err as BusinessError; console.error(`getConfigurationByteArray ERROR: ${error}`); } ``` ### getStatistics getStatistics(): StatisticKeyValue[] 获取性能度量记录。其中包括当前会话数、插件版本信息、每个会话最大三次解密耗时、解密次数和解密失败次数。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [StatisticKeyValue[]](#statistickeyvalue) | 度量记录。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let statisticKeyValue: drm.StatisticKeyValue[] = mediaKeySystem.getStatistics(); } catch (err) { let error = err as BusinessError; console.error(`getConfigurationByteArray ERROR: ${error}`); } ``` ### getMaxContentProtectionLevel getMaxContentProtectionLevel(): ContentProtectionLevel 获取当前DRM解决方案支持的最大内容保护级别。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [ContentProtectionLevel](#contentprotectionlevel) | 返回设备支持的最大内容保护级别。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let maxLevel: drm.ContentProtectionLevel = mediaKeySystem.getMaxContentProtectionLevel(); } catch (err) { let error = err as BusinessError; console.error(`getConfigurationByteArray ERROR: ${error}`); } ``` ### generateKeySystemRequest generateKeySystemRequest(): Promise 生成获取mediaKeySystem设备证书的请求。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise<[ProvisionRequest](#provisionrequest)\> | Promise对象,mediaKeySystem设备证书的请求。设备上如果已存在设备证书,会返回失败。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); // 设备上已有设备证书的情况下不需要调用 mediaKeySystem.generateKeySystemRequest().then((ProvisionRequest: drm.ProvisionRequest) => { console.log("generateKeySystemRequest"); }).catch((err: BusinessError) => { console.error(`generateKeySystemRequest: ERROR: ${err}`); }); ``` ### processKeySystemResponse processKeySystemResponse(response: Uint8Array): Promise 处理获得的设备证书请求的响应。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | response | Uint8Array | 是 | 设备证书响应。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); // keySystemResponse是从DRM服务获取的设备证书响应,请按实际值传入; let keySystemResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySystem.processKeySystemResponse(keySystemResponse).then(() => { console.log("processKeySystemResponse"); }).catch((err: BusinessError) => { console.error(`processKeySystemResponse: ERROR: ${err}`); }); ``` ### getCertificateStatus getCertificateStatus():CertificateStatus 获取设备证书状态值。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [CertificateStatus](#certificatestatus) | 设备证书状态值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let certificateStatus: drm.CertificateStatus = mediaKeySystem.getCertificateStatus(); } catch (err) { let error = err as BusinessError; console.error(`getCertificateStatus ERROR: ${error}`); } ``` ### on('keySystemRequired') on(type: 'keySystemRequired', callback: (eventInfo: EventInfo) => void): void 监听设备证书请求事件,获取事件信息。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 事件类型,MediaKeySystem实例创建成功后可监听,需要设备证书时触发该事件。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 是 | 回调函数,返回事件信息。只要有该事件返回就证明需请求设备证书。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); mediaKeySystem.on('keySystemRequired', (eventInfo: drm.EventInfo) => { console.log('keySystemRequired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ### off('keySystemRequired') off(type: 'keySystemRequired', callback?: (eventInfo: EventInfo) => void): void 注销设备证书请求事件的监听。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,MediaKeySystem实例创建成功后可监听。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | | 24700101 | All unknown errors | **示例:** ```ts let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); mediaKeySystem.off('keySystemRequired'); ``` ### createMediaKeySession createMediaKeySession(level: ContentProtectionLevel): MediaKeySession 创建指定内容保护级别的MediaKeySession实例。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | level | [ContentProtectionLevel](#contentprotectionlevel) | 是 | 内容保护级别。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [MediaKeySession](#mediakeysession) | MediaKeySession实例。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.The param level exceeds reasonable range, please use value in ContentProtectionLevel. | | 24700101 | All unknown errors | | 24700104 | Meet max MediaKeySession num limit | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO); } catch (err) { let error = err as BusinessError; console.error(`createMediaKeySession ERROR: ${error}`); } ``` ### createMediaKeySession createMediaKeySession(): MediaKeySession 创建DRM解决方案默认内容保护级别的MediaKeySession实例。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [MediaKeySession](#mediakeysession) | MediaKeySession实例。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700104 | Meet max MediaKeySession num limit | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); } catch (err) { let error = err as BusinessError; console.error(`createMediaKeySession ERROR: ${error}`); } ``` ### getOfflineMediaKeyIds getOfflineMediaKeyIds(): Uint8Array[] 获取离线媒体密钥标识列表。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Uint8Array[] | 离线媒体密钥标识列表。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { let offlineMediaKeyIds: Uint8Array[] = mediaKeySystem.getOfflineMediaKeyIds(); } catch (err) { let error = err as BusinessError; console.error(`getOfflineMediaKeyIds ERROR: ${error}`); } ``` ### getOfflineMediaKeyStatus getOfflineMediaKeyStatus(mediaKeyId: Uint8Array): OfflineMediaKeyStatus 获取指定离线媒体密钥标识的媒体密钥的状态值。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [OfflineMediaKeyStatus](#offlinemediakeystatus) | 离线媒体密钥状态值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); try { let configValue: drm.OfflineMediaKeyStatus = mediaKeySystem.getOfflineMediaKeyStatus(mediaKeyId); } catch (err) { let error = err as BusinessError; console.error(`getOfflineMediaKeyStatus ERROR: ${error}`); } ``` ### clearOfflineMediaKeys clearOfflineMediaKeys(mediaKeyId: Uint8Array): void 删除指定媒体密钥标识的离线媒体密钥。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed.Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); try { mediaKeySystem.clearOfflineMediaKeys(mediaKeyId); } catch (err) { let error = err as BusinessError; console.error(`clearOfflineMediaKeys ERROR: ${error}`); } ``` ### destroy destroy(): void 销毁MediaKeySystem实例。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); try { mediaKeySystem.destroy(); } catch (err) { let error = err as BusinessError; console.error(`mediaKeySystem destroy ERROR: ${error}`); } ``` ## MediaKeySession 支持媒体密钥管理。在调用MediaKeySession方法之前,必须使用[createMediaKeySession](#createmediakeysession)获取一个MediaKeySession实例。 ### generateMediaKeyRequest generateMediaKeyRequest(mimeType: string, initData: Uint8Array, mediaKeyType: number, options?: OptionsData[]): Promise 生成媒体密钥请求。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mimeType | string | 是 | 媒体类型,由DRM解决方案决定具体的支持类型。 | | initData | Uint8Array | 是 | 初始数据。 | | mediaKeyType| number | 是 | 媒体密钥类型。 | 0表示在线,1表示离线 | | options | [OptionsData[]](#optionsdata) | 否 | 可选数据。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise<[MediaKeyRequest](#mediakeyrequest)\> | Promise对象,媒体密钥请求。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // pssh数据为版权保护系统描述头,封装在加密码流中,mp4文件中位于pssh box、dash码流中位于mpd及mp4的pssh box、hls+ts的码流位于m3u8及每个ts片段中,请按实际值传入 let uint8pssh = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.generateMediaKeyRequest("video/avc", uint8pssh, drm.MediaKeyType.MEDIA_KEY_TYPE_ONLINE).then((mediaKeyRequest: drm.MediaKeyRequest) =>{ console.log('generateMediaKeyRequest' + mediaKeyRequest); }).catch((err: BusinessError) => { console.error(`generateMediaKeyRequest: ERROR: ${err}`); }); ``` ### processMediaKeyResponse processMediaKeyResponse(response: Uint8Array): Promise 处理媒体密钥响应。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | response | Uint8Array | 是 | 媒体密钥响应。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象,媒体密钥标识。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入 let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => { console.log('processMediaKeyResponse:' + mediaKeyId); }).catch((err: BusinessError) => { console.error(`processMediaKeyResponse: ERROR: ${err}`); }); ``` ### checkMediaKeyStatus checkMediaKeyStatus(): MediaKeyStatus[] 检查当前媒体密钥状态。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [MediaKeyStatus[]](#mediakeystatus) | 当前媒体密钥状态值。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { let keyStatus: drm.MediaKeyStatus[] = mediaKeySession.checkMediaKeyStatus(); } catch (err) { let error = err as BusinessError; console.error(`checkMediaKeyStatus ERROR: ${error}`); } ``` ### clearMediaKeys clearMediaKeys(): void 清除当前媒体密钥。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入 let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => { console.log('processMediaKeyResponse:' + mediaKeyId); }).catch((err: BusinessError) => { console.error(`processMediaKeyResponse: ERROR: ${err}`); }); try { mediaKeySession.clearMediaKeys(); } catch (err) { let error = err as BusinessError; console.error(`clearMediaKeys ERROR: ${error}`); } ``` ### generateOfflineReleaseRequest generateOfflineReleaseRequest(mediaKeyId: Uint8Array): Promise 生成离线媒体密钥释放请求。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回离线媒体密钥释放请求。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => { console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest); }).catch((err: BusinessError) => { console.error(`generateOfflineReleaseRequest: ERROR: ${err}`); }); ``` ### processOfflineReleaseResponse processOfflineReleaseResponse(mediaKeyId: Uint8Array, response: Uint8Array): Promise 处理离线媒体密钥释放响应。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | | response | Uint8Array | 是 | 离线媒体密钥释放响应。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际长度申请内存 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => { console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest); }).catch((err: BusinessError) => { console.error(`generateOfflineReleaseRequest: ERROR: ${err}`); }); // offlineReleaseResponse是从DRM服务获取的离线媒体密钥释放响应,请按实际长度申请内存 let offlineReleaseResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.processOfflineReleaseResponse(mediaKeyId, offlineReleaseResponse).then(() => { console.log('processOfflineReleaseResponse'); }).catch((err: BusinessError) => { console.error(`processOfflineReleaseResponse: ERROR: ${err}`); }); ``` ### restoreOfflineMediaKeys restoreOfflineMediaKeys(mediaKeyId: Uint8Array): Promise 恢复离线媒体密钥。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mediaKeyId | Uint8Array | 是 | 离线媒体密钥标识。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | Promise | Promise对象。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); // mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际数据传入 let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]); mediaKeySession.restoreOfflineMediaKeys(mediaKeyId).then(() => { console.log("restoreOfflineMediaKeys"); }).catch((err: BusinessError) => { console.error(`restoreOfflineMediaKeys: ERROR: ${err}`); }); ``` ### getContentProtectionLevel getContentProtectionLevel(): ContentProtectionLevel 获取当前会话的内容保护级别。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | [ContentProtectionLevel](#contentprotectionlevel) | 返回当前会话内容保护级别。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { let contentProtectionLevel: drm.ContentProtectionLevel = mediaKeySession.getContentProtectionLevel(); } catch (err) { let error = err as BusinessError; console.error(`getContentProtectionLevel ERROR: ${error}`); } ``` ### requireSecureDecoderModule requireSecureDecoderModule(mimeType: string): boolean 是否需要安全解码。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ---------------------------- | | mimeType | string | 是 | 媒体类型,由DRM解决方案决定具体的支持类型。 | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ---------------------------- | | boolean | 是否需要安全解码,true表示需要安全解码,false表示不需要安全解码。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { let status: boolean = mediaKeySession.requireSecureDecoderModule("video/avc"); } catch (err) { let error = err as BusinessError; console.error(`requireSecureDecoderModule ERROR: ${error}`); } ``` ### on('keyRequired') on(type: 'keyRequired', callback: (eventInfo: EventInfo) => void): void 监听密钥请求事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 事件类型,固定为'keyRequired',当播放DRM节目需要获取媒体密钥时触发。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('keyRequired', (eventInfo: drm.EventInfo) => { console.log('keyRequired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ### off('keyRequired') off(type: 'keyRequired', callback?: (eventInfo: EventInfo) => void): void 注销密钥请求事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keyRequired'。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('keyRequired'); ``` ### on('keyExpired') on(type: 'keyExpired', callback: (eventInfo: EventInfo) => void): void 监听密钥过期事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keyExpired'。密钥过期时触发。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('keyExpired', (eventInfo: drm.EventInfo) => { console.log('keyExpired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ### off('keyExpired') off(type: 'keyExpired', callback?: (eventInfo: EventInfo) => void): void 注销密钥过期事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keyExpired'。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('keyExpired'); ``` ### on('vendorDefined') on(type: 'vendorDefined', callback: (eventInfo: EventInfo) => void): void 监听DRM解决方案自定义事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件,固定为'vendorDefined'。自定义事件发生时触发。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('vendorDefined', (eventInfo: drm.EventInfo) => { console.log('vendorDefined ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ### off('vendorDefined') off(type: 'vendorDefined', callback?: (eventInfo: EventInfo) => void): void 注销DRM解决方案自定义事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件,固定为'vendorDefined'。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('vendorDefined'); ``` ### on('expirationUpdate') on(type: 'expirationUpdate', callback: (eventInfo: EventInfo) => void): void 监听密钥过期更新事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'expirationUpdate'。密钥过期更新时触发。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 是 | 回调函数,返回事件信息。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('expirationUpdate', (eventInfo: drm.EventInfo) => { console.log('expirationUpdate ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info); }); ``` ### off('expirationUpdate') off(type: 'expirationUpdate', callback?: (eventInfo: EventInfo) => void): void 注销过期更新事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'expirationUpdate'。 | | callback | Callback\<[EventInfo](#eventinfo)\> | 否 | 回调函数,返回事件信息。可选。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('expirationUpdate'); ``` ### on('keysChange') on(type: 'keysChange', callback: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void 监听密钥变化事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keysChange'。密钥变化时触发。 | | callback | Callback\<[KeysInfo[]](#keysinfo), boolean\> | 是 | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.on('keysChange', (keyInfo: drm.KeysInfo[], newKeyAvailable: boolean) => { for (let i = 0; i < keyInfo.length; i++) { console.log('keysChange' + 'keyId:' + keyInfo[i].keyId + ' data:' + keyInfo[i].value); } }); ``` ### off('keysChange') off(type: 'keysChange', callback?: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void 注销密钥变化事件监听。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------- | ---- | ------------------------------------- | | type | string | 是 | 监听事件类型,固定为'keysChange'。 | | callback | Callback\<[KeysInfo[]](#keysinfo), boolean\> | 否 | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。 | **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 401 | The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified or too many parameters. 2.Incorrect parameter types. 3.Parameter verification failed. | | 24700101 | All unknown errors | **示例:** ```ts import { drm } from '@kit.DrmKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); mediaKeySession.off('keysChange'); ``` ### destroy destroy(): void 销毁MediaKeySession实例。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.Drm.Core **错误码:** 以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。 | 错误码ID | 错误信息 | | --------------- | --------------- | | 24700101 | All unknown errors | | 24700201 | Fatal service error, for example, service died | **示例:** ```ts import { drm } from '@kit.DrmKit'; import { BusinessError } from '@kit.BasicServicesKit'; let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm"); let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(); try { mediaKeySession.destroy(); } catch (err) { let error = err as BusinessError; console.error(`mediaKeySession destroy ERROR: ${error}`); } ```