# @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}`);
}
```