1# @ohos.multimedia.drm (数字版权保护)
2
3DRM(Digital Rights Management)框架组件支持音视频媒体业务数字版权管理功能的开发。开发者可以调用系统提供的DRM插件,完成以下功能:
4
5* DRM证书管理:生成证书请求、设置证书响应,实现对证书Provision(下载)功能。
6* DRM媒体密钥管理:生成媒体密钥请求、设置媒体密钥响应、管理离线媒体密钥功能。
7* DRM节目授权:支持DRM插件根据媒体密钥权限对DRM节目授权。
8* DRM节目解密:支持媒体播放功能的解密调用,实现对DRM节目的解密。
9
10> **说明:**
11> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
12
13## 导入模块
14
15```ts
16import { drm } from '@kit.DrmKit';
17```
18
19## DrmErrorCode
20
21枚举,错误码。
22
23**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
24
25**系统能力:** SystemCapability.Multimedia.Drm.Core
26
27| 名称                       | 值   | 说明            |
28| ------------------------- | ---- | ------------    |
29| ERROR_UNKNOWN       | 24700101    | 未知错误   |
30| MAX_SYSTEM_NUM_REACHED   | 24700103    | MediaKeySystem实例数量超过上限(64个)    |
31| MAX_SESSION_NUM_REACHED    | 24700104    | MediaKeySession实例数量超过上限(64个)     |
32| SERVICE_FATAL_ERROR  | 24700201    | DRM服务异常     |
33
34## PreDefinedConfigName
35
36枚举,预定义的配置属性。
37
38**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
39
40**系统能力:** SystemCapability.Multimedia.Drm.Core
41
42| 名称                       | 值   | 说明            |
43| ------------------------- | ---- | ------------    |
44| CONFIG_DEVICE_VENDOR        | 'vendor'    | 插件厂商名,通过[getConfigurationString](#getconfigurationstring)接口获取vendor对应配置值。   |
45| CONFIG_DEVICE_VERSION    | 'version'    | 插件版本号,通过[getConfigurationString](#getconfigurationstring)接口获取version对应配置值。     |
46| CONFIG_DEVICE_DESCRIPTION     | 'description'    | 设备描述符,通过[getConfigurationString](#getconfigurationstring)接口获取description对应配置值。      |
47| CONFIG_DEVICE_ALGORITHMS   | 'algorithms'    | 支持的算法,通过[getConfigurationString](#getconfigurationstring)接口获取algorithms对应配置值。     |
48| CONFIG_DEVICE_UNIQUE_ID    | 'deviceUniqueId'    | 设备唯一标识,通过[getConfigurationByteArray](#getconfigurationbytearray)接口获取deviceUniqueId对应配置值。     |
49| CONFIG_SESSION_MAX         | 'maxSessionNum'    | 设备支持的最大会话数,通过[getConfigurationString](#getconfigurationstring)接口获取maxSessionNum对应配置值。     |
50| CONFIG_SESSION_CURRENT   | 'currentSessionNum'    | 当前会话数量,通过[getConfigurationString](#getconfigurationstring)接口获取currentSessionNum对应配置值。     |
51
52## MediaKeyType
53
54枚举,媒体密钥类型。
55
56**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
57
58**系统能力:** SystemCapability.Multimedia.Drm.Core
59
60| 名称                       | 值   | 说明            |
61| ------------------------- | ---- | ------------    |
62| MEDIA_KEY_TYPE_OFFLINE        | 0    | 离线   |
63| MEDIA_KEY_TYPE_ONLINE   | 1    | 在线     |
64
65## OfflineMediaKeyStatus
66
67枚举,离线媒体密钥状态。
68
69**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
70
71**系统能力:** SystemCapability.Multimedia.Drm.Core
72
73| 名称                       | 值   | 说明            |
74| ------------------------- | ---- | ------------    |
75| OFFLINE_MEDIA_KEY_STATUS_UNKNOWN        | 0    | 未知状态   |
76| OFFLINE_MEDIA_KEY_STATUS_USABLE   | 1    | 可用状态     |
77| OFFLINE_MEDIA_KEY_STATUS_INACTIVE     | 2    | 失活状态       |
78
79## CertificateStatus
80
81枚举,设备证书状态。
82
83**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
84
85**系统能力:** SystemCapability.Multimedia.Drm.Core
86
87| 名称                       | 值   | 说明            |
88| ------------------------- | ---- | ------------    |
89| CERT_STATUS_PROVISIONED        | 0    | 设备已安装设备证书   |
90| CERT_STATUS_NOT_PROVISIONED   | 1    | 设备未安装设备证书     |
91| CERT_STATUS_EXPIRED    | 2    | 设备证书过期       |
92| CERT_STATUS_INVALID  | 3    | 设备证书无效     |
93| CERT_STATUS_UNAVAILABLE  | 4    | 设备证书不可用     |
94
95## MediaKeyRequestType
96
97枚举,媒体密钥请求类型。
98
99**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
100
101**系统能力:** SystemCapability.Multimedia.Drm.Core
102
103| 名称                       | 值   | 说明            |
104| ------------------------- | ---- | ------------    |
105| MEDIA_KEY_REQUEST_TYPE_UNKNOWN        | 0    | 未知请求类型   |
106| MEDIA_KEY_REQUEST_TYPE_INITIAL    | 1    | 初始化请求     |
107| MEDIA_KEY_REQUEST_TYPE_RENEWAL     | 2    | 续订请求       |
108| MEDIA_KEY_REQUEST_TYPE_RELEASE   | 3    | 释放请求     |
109| MEDIA_KEY_REQUEST_TYPE_NONE    | 4    | 无请求     |
110| MEDIA_KEY_REQUEST_TYPE_UPDATE    | 5    | 更新请求     |
111
112## ContentProtectionLevel
113
114枚举,内容保护级别。
115
116**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
117
118**系统能力:** SystemCapability.Multimedia.Drm.Core
119
120| 名称                       | 值   | 说明            |
121| ------------------------- | ---- | ------------    |
122| CONTENT_PROTECTION_LEVEL_UNKNOWN        | 0    | 未知内容保护级别   |
123| CONTENT_PROTECTION_LEVEL_SW_CRYPTO   | 1    | 软件内容保护级别     |
124| CONTENT_PROTECTION_LEVEL_HW_CRYPTO    | 2    | 硬件内容保护级别       |
125| CONTENT_PROTECTION_LEVEL_ENHANCED_HW  | 3    | 硬件增强内容保护级别     |
126| CONTENT_PROTECTION_LEVEL_MAX  | 4    | 最高内容保护级别     |
127
128## ProvisionRequest
129
130设备证书请求。
131
132**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
133
134**系统能力:** SystemCapability.Multimedia.Drm.Core
135
136| 名称      | 类型                           | 必填 | 说明         |
137| -------- | ----------------------------- |---- | ------------- |
138| data   | Uint8Array | 是  | 设备证书请求数据      |
139| defaultURL     | string                 | 是  | Provision服务(设备证书请求服务)URL       |
140
141## OptionsData
142
143设备证书请求的可选数据。
144
145**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
146
147**系统能力:** SystemCapability.Multimedia.Drm.Core
148
149| 名称      | 类型                           | 必填 | 说明         |
150| -------- | ----------------------------- |---- | ------------- |
151| name   | string | 是  | 可选数据名      |
152| value     | string                 | 是  | 可选数据值       |
153
154## MediaKeyRequest
155
156媒体密钥请求参数。
157
158**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
159
160**系统能力:** SystemCapability.Multimedia.Drm.Core
161
162| 名称      | 类型                           | 必填 | 说明         |
163| -------- | ----------------------------- |---- | ------------- |
164| mediaKeyRequestType   | [MediaKeyRequestType](#mediakeyrequesttype) | 是  | 媒体密钥请求类型      |
165| data     | Uint8Array                 | 是  | 媒体密钥请求数据       |
166| defaultURL     | string                 | 是  | 媒体密钥服务URL       |
167
168## EventInfo
169
170事件信息。
171
172**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
173
174**系统能力:** SystemCapability.Multimedia.Drm.Core
175
176| 名称      | 类型                           | 必填 | 说明         |
177| -------- | ----------------------------- |---- | ------------- |
178| info   | Uint8Array | 是  | 事件信息数据      |
179| extraInfo     | string                 | 是  | 事件扩展信息       |
180
181## StatisticKeyValue
182
183度量记录。
184
185**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
186
187**系统能力:** SystemCapability.Multimedia.Drm.Core
188
189| 名称      | 类型                           | 必填 | 说明         |
190| -------- | ----------------------------- |---- | ------------- |
191| name   | string | 是  | 度量记录名      |
192| value     | string                 | 是  | 度量记录值       |
193
194## MediaKeyStatus
195
196媒体密钥状态
197
198**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
199
200**系统能力:** SystemCapability.Multimedia.Drm.Core
201
202| 名称      | 类型                           | 必填 | 说明         |
203| -------- | ----------------------------- |---- | ------------- |
204| name   | string | 是  | 媒体密钥状态名称(如媒体密钥过期时间、内容保护安全级别等)      |
205| value     | string                 | 是  | 媒体密钥状态值       |
206
207## KeysInfo
208
209媒体密钥中密钥信息。
210
211**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
212
213**系统能力:** SystemCapability.Multimedia.Drm.Core
214
215| 名称      | 类型                           | 必填 | 说明         |
216| -------- | ----------------------------- |---- | ------------- |
217| keyId   | Uint8Array | 是  | 媒体密钥标识      |
218| value     | string                 | 是  | 媒体密钥状态值       |
219
220## MediaKeySystemInfo
221
222加密媒体内容的DRM信息。
223
224**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
225
226**系统能力:** SystemCapability.Multimedia.Drm.Core
227
228| 名称      | 类型                           | 必填 | 说明         |
229| -------- | ----------------------------- |---- | ------------- |
230| uuid   | string | 是  | DRM内容保护系统的唯一标识      |
231| pssh     | Uint8Array                 | 是  | DRM内容保护系统专用头(Protection System Specific Header)       |
232
233## MediaKeySystemDescription<sup>12+</sup>
234
235插件信息。
236
237**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
238
239**系统能力:** SystemCapability.Multimedia.Drm.Core
240
241| 名称      | 类型                           | 必填 | 说明         |
242| -------- | ----------------------------- |---- | ------------- |
243| name   | string | 是  | 插件名称      |
244| uuid   | string | 是  | 插件唯一标识码      |
245
246## drm.createMediaKeySystem
247
248createMediaKeySystem(name: string): MediaKeySystem
249
250创建MediaKeySystem实例。
251
252**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
253
254**系统能力:** SystemCapability.Multimedia.Drm.Core
255
256**参数:**
257
258| 参数名     | 类型                                             | 必填 | 说明                           |
259| -------- | ----------------------------------------------- | ---- | ---------------------------- |
260| name  | string     | 是   | DRM解决方案名称。                   |
261
262**返回值:**
263
264| 类型                                             | 说明                           |
265| ----------------------------------------------- | ---------------------------- |
266| [MediaKeySystem](#mediakeysystem)           | MediaKeySystem实例。                   |
267
268**错误码:**
269
270以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
271
272| 错误码ID         | 错误信息        |
273| --------------- | --------------- |
274| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed.               |
275| 24700101                |  All unknown errors                  |
276| 24700103                |  Meet max MediaKeySystem num limit                  |
277| 24700201                |  Fatal service error, for example, service died                  |
278
279**示例:**
280
281```ts
282import { drm } from '@kit.DrmKit';
283import { BusinessError } from '@kit.BasicServicesKit';
284try {
285  let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
286} catch (err) {
287  let error = err as BusinessError;
288  console.error(`createMediaKeySystem ERROR: ${error}`);
289}
290```
291
292## drm.isMediaKeySystemSupported
293
294isMediaKeySystemSupported(name: string): boolean
295
296判断设备是否支持指定的DRM解决方案。
297
298**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
299
300**系统能力:** SystemCapability.Multimedia.Drm.Core
301
302**参数:**
303
304| 参数名     | 类型                                             | 必填 | 说明                           |
305| -------- | ----------------------------------------------- | ---- | ---------------------------- |
306| name  | string     | 是   | DRM解决方案名称。                   |
307
308**返回值:**
309
310| 类型                                             | 说明                           |
311| ----------------------------------------------- | ---------------------------- |
312| boolean          | 返回是否支持。                   |
313
314**错误码:**
315
316以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
317
318| 错误码ID         | 错误信息        |
319| --------------- | --------------- |
320| 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).               |
321| 24700101                |  All unknown errors                  |
322| 24700201                |  Fatal service error, for example, service died                  |
323
324**示例:**
325
326```ts
327import { drm } from '@kit.DrmKit';
328import { BusinessError } from '@kit.BasicServicesKit';
329
330try {
331  let supported: boolean = drm.isMediaKeySystemSupported("com.clearplay.drm");
332  console.log("isMediaKeySystemSupported: ", supported);
333} catch (err) {
334  let error = err as BusinessError;
335  console.error(`isMediaKeySystemSupported ERROR: ${error}`);
336}
337```
338
339## drm.isMediaKeySystemSupported
340
341isMediaKeySystemSupported(name: string, mimeType: string): boolean
342
343判断设备是否支持指定DRM解决方案及媒体类型。
344
345**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
346
347**系统能力:** SystemCapability.Multimedia.Drm.Core
348
349**参数:**
350
351| 参数名     | 类型                                             | 必填 | 说明                           |
352| -------- | ----------------------------------------------- | ---- | ---------------------------- |
353| name  | string     | 是   | DRM解决方案名称。                   |
354| mimeType  | string     | 是   | 媒体类型,由DRM解决方案决定具体的支持类型。                   |
355
356**返回值:**
357
358| 类型                                             | 说明                           |
359| ----------------------------------------------- | ---------------------------- |
360| boolean          | 返回是否支持。                   |
361
362**错误码:**
363
364以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
365
366| 错误码ID         | 错误信息        |
367| --------------- | --------------- |
368| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.                |
369| 24700101                |  All unknown errors                  |
370| 24700201                |  Fatal service error, for example, service died                  |
371
372**示例:**
373
374```ts
375import { drm } from '@kit.DrmKit';
376import { BusinessError } from '@kit.BasicServicesKit';
377
378try {
379  let supported: boolean = drm.isMediaKeySystemSupported("com.clearplay.drm", "video/avc");
380  console.log("isMediaKeySystemSupported: ", supported);
381} catch (err) {
382  let error = err as BusinessError;
383  console.error(`isMediaKeySystemSupported ERROR: ${error}`);
384}
385```
386
387## drm.isMediaKeySystemSupported
388
389isMediaKeySystemSupported(name: string, mimeType: string, level: ContentProtectionLevel): boolean
390
391判断设备是否支持指定DRM解决方案、媒体类型以及内容保护级别。
392
393**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
394
395**系统能力:** SystemCapability.Multimedia.Drm.Core
396
397**参数:**
398
399| 参数名     | 类型                                             | 必填 | 说明                           |
400| -------- | ----------------------------------------------- | ---- | ---------------------------- |
401| name  | string     | 是   | DRM解决方案名称。                   |
402| mimeType  | string     | 是   | 媒体类型,由DRM解决方案决定具体的支持类型。                   |
403| level  | [ContentProtectionLevel](#contentprotectionlevel)     | 是   | 内容保护级别。                   |
404
405**返回值:**
406
407| 类型                                             | 说明                           |
408| ----------------------------------------------- | ---------------------------- |
409| boolean          | 返回是否支持。                   |
410
411**错误码:**
412
413以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
414
415| 错误码ID         | 错误信息        |
416| --------------- | --------------- |
417| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.               |
418| 24700101                |  All unknown errors                  |
419| 24700201                |  Fatal service error, for example, service died                  |
420
421**示例:**
422
423```ts
424import { drm } from '@kit.DrmKit';
425import { BusinessError } from '@kit.BasicServicesKit';
426
427try {
428  let supported: boolean = drm.isMediaKeySystemSupported("com.clearplay.drm", "video/avc", drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
429  console.log("isMediaKeySystemSupported: ", supported);
430} catch (err) {
431  let error = err as BusinessError;
432  console.error(`isMediaKeySystemSupported ERROR: ${error}`);
433}
434```
435
436## drm.getMediaKeySystemUuid<sup>12+</sup>
437
438getMediaKeySystemUuid(name: string): string;
439
440获取DRM解决方案支持的DRM内容保护系统唯一标识。
441
442**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
443
444**系统能力:** SystemCapability.Multimedia.Drm.Core
445
446**参数:**
447
448| 参数名     | 类型                                             | 必填 | 说明                           |
449| -------- | ----------------------------------------------- | ---- | ---------------------------- |
450| name  | string     | 是   | DRM解决方案名称。                   |
451
452**返回值:**
453
454| 类型                                             | 说明                           |
455| ----------------------------------------------- | ---------------------------- |
456| uuid  | string     | 是   | DRM内容保护系统的唯一标识。                   |
457
458**错误码:**
459
460以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
461
462| 错误码ID         | 错误信息        |
463| --------------- | --------------- |
464| 401                |  The parameter check failed.Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed.                |
465| 24700101                |  All unknown errors                  |
466| 24700201                |  Fatal service error, for example, service died                  |
467
468**示例:**
469
470```ts
471import { drm } from '@kit.DrmKit';
472import { BusinessError } from '@kit.BasicServicesKit';
473try {
474  let uuid: String = drm.getMediaKeySystemUuid("com.clearplay.drm");
475  console.log("getMediaKeySystemUuid: ", uuid);
476} catch (err) {
477  let error = err as BusinessError;
478  console.error(`getMediaKeySystemUuid ERROR: ${error}`);
479}
480```
481
482## drm.getMediaKeySystems<sup>12+</sup>
483
484getMediaKeySystems(): MediaKeySystemDescription[]
485
486获取设备支持的插件信息列表。
487
488**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
489
490**系统能力:** SystemCapability.Multimedia.Drm.Core
491
492**返回值:**
493
494| 类型                                             | 说明                           |
495| ----------------------------------------------- | ---------------------------- |
496| [MediaKeySystemDescription[]](#mediakeysystemdescription12)           | 设备支持的插件信息列表。                   |
497
498**错误码:**
499
500以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
501
502| 错误码ID         | 错误信息        |
503| --------------- | --------------- |
504| 24700101                |  All unknown errors                  |
505| 24700201                |  Fatal service error, for example, service died                  |
506
507**示例:**
508
509```ts
510import { drm } from '@kit.DrmKit';
511import { BusinessError } from '@kit.BasicServicesKit';
512try {
513  let description: drm.MediaKeySystemDescription[] = drm.getMediaKeySystems();
514} catch (err) {
515  let error = err as BusinessError;
516  console.error(`getMediaKeySystems ERROR: ${error}`);
517}
518```
519
520## MediaKeySystem
521支持MediaKeySystem实例管理、设备证书申请与处理、会话创建、离线媒体密钥管理、获取DRM度量记录、设备属性等。在调用MediaKeySystem方法之前,必须使用[createMediaKeySystem](#drmcreatemediakeysystem)创建一个MediaKeySystem实例。
522
523### setConfigurationString
524
525setConfigurationString(configName: string, value: string): void
526
527设置字符串类型的配置信息。
528
529**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
530
531**系统能力:** SystemCapability.Multimedia.Drm.Core
532
533**参数:**
534
535| 参数名     | 类型                                             | 必填 | 说明                           |
536| -------- | ----------------------------------------------- | ---- | ---------------------------- |
537| configName  | string     | 是   | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。                   |
538| value  | string     | 是   | 配置属性值。                   |
539
540**错误码:**
541
542以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
543
544| 错误码ID         | 错误信息        |
545| --------------- | --------------- |
546| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.|
547| 24700101                |  All unknown errors                  |
548| 24700201                |  Fatal service error, for example, service died                  |
549
550**示例:**
551
552```ts
553import { drm } from '@kit.DrmKit';
554import { BusinessError } from '@kit.BasicServicesKit';
555
556let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
557try {
558  mediaKeySystem.setConfigurationString("stringConfigName", "stringConfigValue"); // 确保stringConfigName是可配置的
559} catch (err) {
560  let error = err as BusinessError;
561  console.error(`setConfigurationString ERROR: ${error}`);
562}
563```
564
565### getConfigurationString
566
567getConfigurationString(configName: string): string
568
569获取字符串类型的配置属性值。
570
571**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
572
573**系统能力:** SystemCapability.Multimedia.Drm.Core
574
575**参数:**
576
577| 参数名     | 类型                                             | 必填 | 说明                           |
578| -------- | ----------------------------------------------- | ---- | ---------------------------- |
579| configName  | string     | 是   | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。                   |
580
581**返回值:**
582
583| 类型                                             | 说明                           |
584| ----------------------------------------------- | ---------------------------- |
585| string          | 返回字符串类型的配置属性值。                   |
586
587**错误码:**
588
589以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
590
591| 错误码ID         | 错误信息        |
592| --------------- | --------------- |
593| 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).                              |
594| 24700101                |  All unknown errors                  |
595| 24700201                |  Fatal service error, for example, service died                  |
596
597**示例:**
598
599```ts
600import { drm } from '@kit.DrmKit';
601import { BusinessError } from '@kit.BasicServicesKit';
602
603let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
604try {
605  let configValue: string = mediaKeySystem.getConfigurationString("vendor");
606} catch (err) {
607  let error = err as BusinessError;
608  console.error(`getConfigurationString ERROR: ${error}`);
609}
610```
611
612### setConfigurationByteArray
613
614setConfigurationByteArray(configName: string, value: Uint8Array): void
615
616设置数组类型的配置信息。
617
618**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
619
620**系统能力:** SystemCapability.Multimedia.Drm.Core
621
622**参数:**
623
624| 参数名     | 类型                                             | 必填 | 说明                           |
625| -------- | ----------------------------------------------- | ---- | ---------------------------- |
626| configName  | string     | 是   | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。                   |
627| value  | Uint8Array     | 是   | 数组类型的配置属性值,具体属性值由设备上DRM解决方案决定。                   |
628
629**错误码:**
630
631以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
632
633| 错误码ID         | 错误信息        |
634| --------------- | --------------- |
635| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.               |
636| 24700101                |  All unknown errors.                  |
637| 24700201                |  Fatal service error, for example, service died.                  |
638
639**示例:**
640
641```ts
642import { drm } from '@kit.DrmKit';
643import { BusinessError } from '@kit.BasicServicesKit';
644
645let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
646// 按实际需求填写configValue属性值,请按实际值传入
647let configValue: Uint8Array = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
648try {
649  // 需确认当前DRM解决方案的byteArrayConfigName属性是可配置的
650  mediaKeySystem.setConfigurationByteArray("byteArrayConfigName", configValue);
651} catch (err) {
652  let error = err as BusinessError;
653  console.error(`setConfigurationByteArray ERROR: ${error}`);
654}
655```
656
657### getConfigurationByteArray
658
659getConfigurationByteArray(configName: string): Uint8Array
660
661获取数组类型的配置信息。
662
663**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
664
665**系统能力:** SystemCapability.Multimedia.Drm.Core
666
667**参数:**
668
669| 参数名     | 类型                                             | 必填 | 说明                           |
670| -------- | ----------------------------------------------- | ---- | ---------------------------- |
671| configName  | string     | 是   | 配置属性名,不能为空,属性名参考[PreDefinedConfigName](#predefinedconfigname),具体支持的属性名由设备上DRM解决方案决定。                   |
672
673**返回值:**
674
675| 类型                                             | 说明                           |
676| ----------------------------------------------- | ---------------------------- |
677| Uint8Array          | 数组类型的配置属性值。                   |
678
679**错误码:**
680
681以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
682
683| 错误码ID         | 错误信息        |
684| --------------- | --------------- |
685| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Parameter verification failed.        |
686| 24700101                |  All unknown errors                  |
687| 24700201                |  Fatal service error, for example, service died                  |
688
689**示例:**
690
691```ts
692import { drm } from '@kit.DrmKit';
693import { BusinessError } from '@kit.BasicServicesKit';
694
695let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
696try {
697  let configValue: Uint8Array = mediaKeySystem.getConfigurationByteArray("deviceUniqueId"); // 确保deviceUniqueId属性是存在的
698} catch (err) {
699  let error = err as BusinessError;
700  console.error(`getConfigurationByteArray ERROR: ${error}`);
701}
702```
703
704### getStatistics
705
706getStatistics(): StatisticKeyValue[]
707
708获取性能度量记录。其中包括当前会话数、插件版本信息、每个会话最大三次解密耗时、解密次数和解密失败次数。
709
710**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
711
712**系统能力:** SystemCapability.Multimedia.Drm.Core
713
714**返回值:**
715
716| 类型                                             | 说明                           |
717| ----------------------------------------------- | ---------------------------- |
718| [StatisticKeyValue[]](#statistickeyvalue)          | 度量记录。                   |
719
720**错误码:**
721
722以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
723
724| 错误码ID         | 错误信息        |
725| --------------- | --------------- |
726| 24700101                |  All unknown errors                  |
727| 24700201                |  Fatal service error, for example, service died                  |
728
729**示例:**
730
731```ts
732import { drm } from '@kit.DrmKit';
733import { BusinessError } from '@kit.BasicServicesKit';
734
735let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
736try {
737  let statisticKeyValue: drm.StatisticKeyValue[] = mediaKeySystem.getStatistics();
738} catch (err) {
739  let error = err as BusinessError;
740  console.error(`getConfigurationByteArray ERROR: ${error}`);
741}
742```
743
744### getMaxContentProtectionLevel
745
746getMaxContentProtectionLevel(): ContentProtectionLevel
747
748获取当前DRM解决方案支持的最大内容保护级别。
749
750**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
751
752**系统能力:** SystemCapability.Multimedia.Drm.Core
753
754**返回值:**
755
756| 类型                                             | 说明                           |
757| ----------------------------------------------- | ---------------------------- |
758| [ContentProtectionLevel](#contentprotectionlevel)          | 返回设备支持的最大内容保护级别。                   |
759
760**错误码:**
761
762以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
763
764| 错误码ID         | 错误信息        |
765| --------------- | --------------- |
766| 24700101                |  All unknown errors                  |
767| 24700201                |  Fatal service error, for example, service died                  |
768
769**示例:**
770
771```ts
772import { drm } from '@kit.DrmKit';
773import { BusinessError } from '@kit.BasicServicesKit';
774
775let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
776try {
777  let maxLevel: drm.ContentProtectionLevel = mediaKeySystem.getMaxContentProtectionLevel();
778} catch (err) {
779  let error = err as BusinessError;
780  console.error(`getConfigurationByteArray ERROR: ${error}`);
781}
782```
783
784### generateKeySystemRequest
785
786generateKeySystemRequest(): Promise<ProvisionRequest\>
787
788生成获取mediaKeySystem设备证书的请求。
789
790**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
791
792**系统能力:** SystemCapability.Multimedia.Drm.Core
793
794**返回值:**
795
796| 类型                                             | 说明                           |
797| ----------------------------------------------- | ---------------------------- |
798| Promise<[ProvisionRequest](#provisionrequest)\>          | Promise对象,mediaKeySystem设备证书的请求。设备上如果已存在设备证书,会返回失败。   |
799
800**错误码:**
801
802以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
803
804| 错误码ID         | 错误信息        |
805| --------------- | --------------- |
806| 24700101                |  All unknown errors                  |
807| 24700201                |  Fatal service error, for example, service died                  |
808
809**示例:**
810
811```ts
812import { drm } from '@kit.DrmKit';
813import { BusinessError } from '@kit.BasicServicesKit';
814
815let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
816// 设备上已有设备证书的情况下不需要调用
817mediaKeySystem.generateKeySystemRequest().then((ProvisionRequest: drm.ProvisionRequest) => {
818  console.log("generateKeySystemRequest");
819}).catch((err: BusinessError) => {
820  console.error(`generateKeySystemRequest: ERROR: ${err}`);
821});
822```
823
824### processKeySystemResponse
825
826processKeySystemResponse(response: Uint8Array): Promise<void\>
827
828处理获得的设备证书请求的响应。
829
830**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
831
832**系统能力:** SystemCapability.Multimedia.Drm.Core
833
834**参数:**
835
836| 参数名     | 类型                                             | 必填 | 说明                           |
837| -------- | ----------------------------------------------- | ---- | ---------------------------- |
838| response  | Uint8Array     | 是   | 设备证书响应。                   |
839
840**返回值:**
841
842| 类型                                             | 说明                           |
843| ----------------------------------------------- | ---------------------------- |
844| Promise<void\>          | Promise对象。                   |
845
846**错误码:**
847
848以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
849
850| 错误码ID         | 错误信息        |
851| --------------- | --------------- |
852| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.         |
853| 24700101                |  All unknown errors                  |
854| 24700201                |  Fatal service error, for example, service died                  |
855
856**示例:**
857
858```ts
859import { drm } from '@kit.DrmKit';
860import { BusinessError } from '@kit.BasicServicesKit';
861
862let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
863// keySystemResponse是从DRM服务获取的设备证书响应,请按实际值传入;
864let keySystemResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
865mediaKeySystem.processKeySystemResponse(keySystemResponse).then(() => {
866  console.log("processKeySystemResponse");
867}).catch((err: BusinessError) => {
868  console.error(`processKeySystemResponse: ERROR: ${err}`);
869});
870```
871
872### getCertificateStatus
873
874getCertificateStatus():CertificateStatus
875
876获取设备证书状态值。
877
878**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
879
880**系统能力:** SystemCapability.Multimedia.Drm.Core
881
882**返回值:**
883
884| 类型                                             | 说明                           |
885| ----------------------------------------------- | ---------------------------- |
886| [CertificateStatus](#certificatestatus)          | 设备证书状态值。                   |
887
888**错误码:**
889
890以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
891
892| 错误码ID         | 错误信息        |
893| --------------- | --------------- |
894| 24700101                |  All unknown errors                  |
895| 24700201                |  Fatal service error, for example, service died                  |
896
897**示例:**
898
899```ts
900import { drm } from '@kit.DrmKit';
901import { BusinessError } from '@kit.BasicServicesKit';
902
903let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
904try {
905  let certificateStatus: drm.CertificateStatus = mediaKeySystem.getCertificateStatus();
906} catch (err) {
907  let error = err as BusinessError;
908  console.error(`getCertificateStatus ERROR: ${error}`);
909}
910```
911
912### on('keySystemRequired')
913
914on(type: 'keySystemRequired', callback: (eventInfo: EventInfo) => void): void
915
916监听设备证书请求事件,获取事件信息。
917
918**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
919
920**系统能力:** SystemCapability.Multimedia.Drm.Core
921
922**参数:**
923
924| 参数名      | 类型                  | 必填 | 说明                                  |
925| -------- | -------------------- | ---- | ------------------------------------- |
926| type     | string               | 是   | 事件类型,MediaKeySystem实例创建成功后可监听,需要设备证书时触发该事件。 |
927| callback | Callback\<[EventInfo](#eventinfo)\> | 是   | 回调函数,返回事件信息。只要有该事件返回就证明需请求设备证书。                 |
928
929**错误码:**
930
931以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
932
933| 错误码ID         | 错误信息        |
934| --------------- | --------------- |
935| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.               |
936| 24700101                |  All unknown errors                  |
937
938**示例:**
939
940```ts
941import { drm } from '@kit.DrmKit';
942
943let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
944mediaKeySystem.on('keySystemRequired', (eventInfo: drm.EventInfo) => {
945  console.log('keySystemRequired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
946});
947```
948
949### off('keySystemRequired')
950
951off(type: 'keySystemRequired', callback?: (eventInfo: EventInfo) => void): void
952
953注销设备证书请求事件的监听。
954
955**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
956
957**系统能力:** SystemCapability.Multimedia.Drm.Core
958
959**参数:**
960
961| 参数名      | 类型                  | 必填 | 说明                                  |
962| -------- | -------------------- | ---- | ------------------------------------- |
963| type     | string               | 是   | 监听事件类型,MediaKeySystem实例创建成功后可监听。 |
964| callback | Callback\<[EventInfo](#eventinfo)\> | 否   | 回调函数,返回事件信息。可选。                |
965
966**错误码:**
967
968以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
969
970| 错误码ID         | 错误信息        |
971| --------------- | --------------- |
972| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.               |
973| 24700101                |  All unknown errors                  |
974
975**示例:**
976
977```ts
978let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
979mediaKeySystem.off('keySystemRequired');
980```
981
982### createMediaKeySession
983
984createMediaKeySession(level: ContentProtectionLevel): MediaKeySession
985
986创建指定内容保护级别的MediaKeySession实例。
987
988**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
989
990**系统能力:** SystemCapability.Multimedia.Drm.Core
991
992**参数:**
993
994| 参数名     | 类型                                             | 必填 | 说明                           |
995| -------- | ----------------------------------------------- | ---- | ---------------------------- |
996| level  | [ContentProtectionLevel](#contentprotectionlevel)     | 是   | 内容保护级别。                   |
997
998**返回值:**
999
1000| 类型                                             | 说明                           |
1001| ----------------------------------------------- | ---------------------------- |
1002| [MediaKeySession](#mediakeysession)          | MediaKeySession实例。                   |
1003
1004**错误码:**
1005
1006以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1007
1008| 错误码ID         | 错误信息        |
1009| --------------- | --------------- |
1010| 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.          |
1011| 24700101                 |  All unknown errors                  |
1012| 24700104                 |  Meet max MediaKeySession num limit                  |
1013| 24700201                |  Fatal service error, for example, service died                  |
1014
1015**示例:**
1016
1017```ts
1018import { drm } from '@kit.DrmKit';
1019import { BusinessError } from '@kit.BasicServicesKit';
1020
1021let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1022try {
1023  let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
1024} catch (err) {
1025  let error = err as BusinessError;
1026  console.error(`createMediaKeySession ERROR: ${error}`);
1027}
1028```
1029
1030### createMediaKeySession
1031
1032createMediaKeySession(): MediaKeySession
1033
1034创建DRM解决方案默认内容保护级别的MediaKeySession实例。
1035
1036**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
1037
1038**系统能力:** SystemCapability.Multimedia.Drm.Core
1039
1040**返回值:**
1041
1042| 类型                                             | 说明                           |
1043| ----------------------------------------------- | ---------------------------- |
1044| [MediaKeySession](#mediakeysession)          | MediaKeySession实例。                   |
1045
1046**错误码:**
1047
1048以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1049
1050| 错误码ID         | 错误信息        |
1051| --------------- | --------------- |
1052| 24700101                |  All unknown errors                  |
1053| 24700104                 |  Meet max MediaKeySession num limit                  |
1054| 24700201                |  Fatal service error, for example, service died                  |
1055
1056**示例:**
1057
1058```ts
1059import { drm } from '@kit.DrmKit';
1060import { BusinessError } from '@kit.BasicServicesKit';
1061
1062let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1063try {
1064  let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1065} catch (err) {
1066  let error = err as BusinessError;
1067  console.error(`createMediaKeySession ERROR: ${error}`);
1068}
1069```
1070
1071### getOfflineMediaKeyIds
1072
1073getOfflineMediaKeyIds(): Uint8Array[]
1074
1075获取离线媒体密钥标识列表。
1076
1077**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
1078
1079**系统能力:** SystemCapability.Multimedia.Drm.Core
1080
1081
1082**返回值:**
1083
1084| 类型                                             | 说明                           |
1085| ----------------------------------------------- | ---------------------------- |
1086| Uint8Array[]          | 离线媒体密钥标识列表。                   |
1087
1088**错误码:**
1089
1090以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1091
1092| 错误码ID         | 错误信息        |
1093| --------------- | --------------- |
1094| 24700101                |  All unknown errors                  |
1095| 24700201                |  Fatal service error, for example, service died                  |
1096
1097**示例:**
1098
1099```ts
1100import { drm } from '@kit.DrmKit';
1101import { BusinessError } from '@kit.BasicServicesKit';
1102
1103let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1104try {
1105  let offlineMediaKeyIds: Uint8Array[] = mediaKeySystem.getOfflineMediaKeyIds();
1106} catch (err) {
1107  let error = err as BusinessError;
1108  console.error(`getOfflineMediaKeyIds ERROR: ${error}`);
1109}
1110```
1111
1112### getOfflineMediaKeyStatus
1113
1114getOfflineMediaKeyStatus(mediaKeyId: Uint8Array): OfflineMediaKeyStatus
1115
1116获取指定离线媒体密钥标识的媒体密钥的状态值。
1117
1118**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
1119
1120**系统能力:** SystemCapability.Multimedia.Drm.Core
1121
1122**参数:**
1123
1124| 参数名     | 类型                                             | 必填 | 说明                           |
1125| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1126| mediaKeyId | Uint8Array     | 是   | 离线媒体密钥标识。                   |
1127
1128**返回值:**
1129
1130| 类型                                             | 说明                           |
1131| ----------------------------------------------- | ---------------------------- |
1132| [OfflineMediaKeyStatus](#offlinemediakeystatus)          | 离线媒体密钥状态值。                   |
1133
1134**错误码:**
1135
1136以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1137
1138| 错误码ID         | 错误信息        |
1139| --------------- | --------------- |
1140| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.            |
1141| 24700101                |  All unknown errors                  |
1142| 24700201                |  Fatal service error, for example, service died                  |
1143
1144**示例:**
1145
1146```ts
1147import { drm } from '@kit.DrmKit';
1148import { BusinessError } from '@kit.BasicServicesKit';
1149
1150let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1151// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入
1152let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1153try {
1154  let configValue: drm.OfflineMediaKeyStatus = mediaKeySystem.getOfflineMediaKeyStatus(mediaKeyId);
1155} catch (err) {
1156  let error = err as BusinessError;
1157  console.error(`getOfflineMediaKeyStatus ERROR: ${error}`);
1158}
1159```
1160
1161### clearOfflineMediaKeys
1162
1163clearOfflineMediaKeys(mediaKeyId: Uint8Array): void
1164
1165删除指定媒体密钥标识的离线媒体密钥。
1166
1167**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
1168
1169**系统能力:** SystemCapability.Multimedia.Drm.Core
1170
1171**参数:**
1172
1173| 参数名     | 类型                                             | 必填 | 说明                           |
1174| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1175| mediaKeyId  | Uint8Array     | 是   | 离线媒体密钥标识。            |
1176
1177**错误码:**
1178
1179以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1180
1181| 错误码ID         | 错误信息        |
1182| --------------- | --------------- |
1183| 401                |  The parameter check failed.Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.           |
1184| 24700101                |  All unknown errors                  |
1185| 24700201                |  Fatal service error, for example, service died                  |
1186
1187**示例:**
1188
1189```ts
1190import { drm } from '@kit.DrmKit';
1191import { BusinessError } from '@kit.BasicServicesKit';
1192
1193let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1194// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入
1195let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1196try {
1197  mediaKeySystem.clearOfflineMediaKeys(mediaKeyId);
1198} catch (err) {
1199  let error = err as BusinessError;
1200  console.error(`clearOfflineMediaKeys ERROR: ${error}`);
1201}
1202```
1203
1204### destroy
1205
1206destroy(): void
1207
1208销毁MediaKeySystem实例。
1209
1210**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
1211
1212**系统能力:** SystemCapability.Multimedia.Drm.Core
1213
1214**错误码:**
1215
1216以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1217
1218| 错误码ID         | 错误信息        |
1219| --------------- | --------------- |
1220| 24700101                |  All unknown errors                  |
1221| 24700201                |  Fatal service error, for example, service died                  |
1222
1223**示例:**
1224
1225```ts
1226import { drm } from '@kit.DrmKit';
1227import { BusinessError } from '@kit.BasicServicesKit';
1228
1229let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1230try {
1231  mediaKeySystem.destroy();
1232} catch (err) {
1233  let error = err as BusinessError;
1234  console.error(`mediaKeySystem destroy ERROR: ${error}`);
1235}
1236```
1237
1238## MediaKeySession
1239支持媒体密钥管理。在调用MediaKeySession方法之前,必须使用[createMediaKeySession](#createmediakeysession)获取一个MediaKeySession实例。
1240
1241### generateMediaKeyRequest
1242
1243generateMediaKeyRequest(mimeType: string, initData: Uint8Array, mediaKeyType: number, options?: OptionsData[]): Promise<MediaKeyRequest\>
1244
1245生成媒体密钥请求。
1246
1247**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1248
1249**系统能力:** SystemCapability.Multimedia.Drm.Core
1250
1251**参数:**
1252
1253| 参数名     | 类型                                             | 必填 | 说明                           |
1254| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1255| mimeType  | string     | 是   | 媒体类型,由DRM解决方案决定具体的支持类型。                   |
1256| initData  | Uint8Array     | 是   | 初始数据。                   |
1257| mediaKeyType| number     | 是   | 媒体密钥类型。                   | 0表示在线,1表示离线 |
1258| options  | [OptionsData[]](#optionsdata)     | 否   | 可选数据。                   |
1259
1260**返回值:**
1261
1262| 类型                                             | 说明                           |
1263| ----------------------------------------------- | ---------------------------- |
1264| Promise<[MediaKeyRequest](#mediakeyrequest)\>          | Promise对象,媒体密钥请求。                   |
1265
1266**错误码:**
1267
1268以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1269
1270| 错误码ID         | 错误信息        |
1271| --------------- | --------------- |
1272| 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.              |
1273| 24700101                |  All unknown errors                  |
1274| 24700201                |  Fatal service error, for example, service died                  |
1275
1276**示例:**
1277
1278```ts
1279import { drm } from '@kit.DrmKit';
1280import { BusinessError } from '@kit.BasicServicesKit';
1281
1282let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1283let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1284// pssh数据为版权保护系统描述头,封装在加密码流中,mp4文件中位于pssh box、dash码流中位于mpd及mp4的pssh box、hls+ts的码流位于m3u8及每个ts片段中,请按实际值传入
1285let uint8pssh = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1286mediaKeySession.generateMediaKeyRequest("video/avc", uint8pssh, drm.MediaKeyType.MEDIA_KEY_TYPE_ONLINE).then((mediaKeyRequest: drm.MediaKeyRequest) =>{
1287  console.log('generateMediaKeyRequest' + mediaKeyRequest);
1288}).catch((err: BusinessError) => {
1289  console.error(`generateMediaKeyRequest: ERROR: ${err}`);
1290});
1291```
1292
1293### processMediaKeyResponse
1294
1295processMediaKeyResponse(response: Uint8Array): Promise<Uint8Array\>
1296
1297处理媒体密钥响应。
1298
1299**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1300
1301**系统能力:** SystemCapability.Multimedia.Drm.Core
1302
1303**参数:**
1304
1305| 参数名     | 类型                                             | 必填 | 说明                           |
1306| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1307| response  | Uint8Array     | 是   | 媒体密钥响应。                   |
1308
1309**返回值:**
1310
1311| 类型                                             | 说明                           |
1312| ----------------------------------------------- | ---------------------------- |
1313| Promise<Uint8Array\>          | Promise对象,媒体密钥标识。                   |
1314
1315**错误码:**
1316
1317以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1318
1319| 错误码ID         | 错误信息        |
1320| --------------- | --------------- |
1321| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.            |
1322| 24700101                |  All unknown errors                  |
1323| 24700201                |  Fatal service error, for example, service died                  |
1324
1325**示例:**
1326
1327```ts
1328import { drm } from '@kit.DrmKit';
1329import { BusinessError } from '@kit.BasicServicesKit';
1330
1331let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1332let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1333// mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入
1334let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1335mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => {
1336  console.log('processMediaKeyResponse:' + mediaKeyId);
1337}).catch((err: BusinessError) => {
1338  console.error(`processMediaKeyResponse: ERROR: ${err}`);
1339});
1340```
1341
1342### checkMediaKeyStatus
1343
1344 checkMediaKeyStatus(): MediaKeyStatus[]
1345
1346检查当前媒体密钥状态。
1347
1348**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1349
1350**系统能力:** SystemCapability.Multimedia.Drm.Core
1351
1352**返回值:**
1353
1354| 类型                                             | 说明                           |
1355| ----------------------------------------------- | ---------------------------- |
1356| [MediaKeyStatus[]](#mediakeystatus)          | 当前媒体密钥状态值。                   |
1357
1358**错误码:**
1359
1360以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1361
1362| 错误码ID         | 错误信息        |
1363| --------------- | --------------- |
1364| 24700101                |  All unknown errors                  |
1365| 24700201                |  Fatal service error, for example, service died                  |
1366
1367**示例:**
1368
1369```ts
1370import { drm } from '@kit.DrmKit';
1371import { BusinessError } from '@kit.BasicServicesKit';
1372
1373let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1374let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1375try {
1376  let keyStatus: drm.MediaKeyStatus[] =  mediaKeySession.checkMediaKeyStatus();
1377} catch (err) {
1378  let error = err as BusinessError;
1379  console.error(`checkMediaKeyStatus ERROR: ${error}`);
1380}
1381```
1382
1383### clearMediaKeys
1384
1385clearMediaKeys(): void
1386
1387清除当前媒体密钥。
1388
1389**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1390
1391**系统能力:** SystemCapability.Multimedia.Drm.Core
1392
1393**错误码:**
1394
1395以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1396
1397| 错误码ID         | 错误信息        |
1398| --------------- | --------------- |
1399| 24700101                |  All unknown errors                  |
1400| 24700201                |  Fatal service error, for example, service died                  |
1401
1402**示例:**
1403
1404```ts
1405import { drm } from '@kit.DrmKit';
1406import { BusinessError } from '@kit.BasicServicesKit';
1407
1408let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1409let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1410// mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入
1411let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1412mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => {
1413  console.log('processMediaKeyResponse:' + mediaKeyId);
1414}).catch((err: BusinessError) => {
1415  console.error(`processMediaKeyResponse: ERROR: ${err}`);
1416});
1417try {
1418  mediaKeySession.clearMediaKeys();
1419} catch (err) {
1420  let error = err as BusinessError;
1421  console.error(`clearMediaKeys ERROR: ${error}`);
1422}
1423```
1424
1425### generateOfflineReleaseRequest
1426
1427generateOfflineReleaseRequest(mediaKeyId: Uint8Array): Promise<Uint8Array\>
1428
1429生成离线媒体密钥释放请求。
1430
1431**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1432
1433**系统能力:** SystemCapability.Multimedia.Drm.Core
1434
1435**参数:**
1436
1437| 参数名     | 类型                                             | 必填 | 说明                           |
1438| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1439| mediaKeyId  | Uint8Array    | 是   | 离线媒体密钥标识                   |
1440
1441**返回值:**
1442
1443| 类型                                             | 说明                           |
1444| ----------------------------------------------- | ---------------------------- |
1445| Promise<Uint8Array\>          | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回离线媒体密钥释放请求。                   |
1446
1447**错误码:**
1448
1449以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1450
1451| 错误码ID         | 错误信息        |
1452| --------------- | --------------- |
1453| 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.         |
1454| 24700101                |  All unknown errors                  |
1455| 24700201                |  Fatal service error, for example, service died                  |
1456
1457**示例:**
1458
1459```ts
1460import { drm } from '@kit.DrmKit';
1461import { BusinessError } from '@kit.BasicServicesKit';
1462
1463let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1464let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1465// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入
1466let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1467mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => {
1468  console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest);
1469}).catch((err: BusinessError) => {
1470  console.error(`generateOfflineReleaseRequest: ERROR: ${err}`);
1471});
1472```
1473
1474### processOfflineReleaseResponse
1475
1476processOfflineReleaseResponse(mediaKeyId: Uint8Array, response: Uint8Array): Promise<void\>
1477
1478处理离线媒体密钥释放响应。
1479
1480**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1481
1482**系统能力:** SystemCapability.Multimedia.Drm.Core
1483
1484**参数:**
1485
1486| 参数名     | 类型                                             | 必填 | 说明                           |
1487| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1488| mediaKeyId  | Uint8Array     | 是   | 离线媒体密钥标识。                   |
1489| response  | Uint8Array     | 是   | 离线媒体密钥释放响应。                   |
1490
1491**返回值:**
1492
1493| 类型                                             | 说明                           |
1494| ----------------------------------------------- | ---------------------------- |
1495| Promise<void\>          | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回。                   |
1496
1497**错误码:**
1498
1499以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1500
1501| 错误码ID         | 错误信息        |
1502| --------------- | --------------- |
1503| 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.            |
1504| 24700101                |  All unknown errors                  |
1505| 24700201                |  Fatal service error, for example, service died                  |
1506
1507**示例:**
1508
1509```ts
1510import { drm } from '@kit.DrmKit';
1511import { BusinessError } from '@kit.BasicServicesKit';
1512
1513let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1514let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1515// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际长度申请内存
1516let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1517mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => {
1518  console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest);
1519}).catch((err: BusinessError) => {
1520  console.error(`generateOfflineReleaseRequest: ERROR: ${err}`);
1521});
1522// offlineReleaseResponse是从DRM服务获取的离线媒体密钥释放响应,请按实际长度申请内存
1523let offlineReleaseResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1524mediaKeySession.processOfflineReleaseResponse(mediaKeyId, offlineReleaseResponse).then(() => {
1525  console.log('processOfflineReleaseResponse');
1526}).catch((err: BusinessError) => {
1527  console.error(`processOfflineReleaseResponse: ERROR: ${err}`);
1528});
1529```
1530
1531### restoreOfflineMediaKeys
1532
1533restoreOfflineMediaKeys(mediaKeyId: Uint8Array): Promise<void\>
1534
1535恢复离线媒体密钥。
1536
1537**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1538
1539**系统能力:** SystemCapability.Multimedia.Drm.Core
1540
1541**参数:**
1542
1543| 参数名     | 类型                                             | 必填 | 说明                           |
1544| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1545| mediaKeyId  | Uint8Array     | 是   | 离线媒体密钥标识。                   |
1546
1547**返回值:**
1548
1549| 类型                                             | 说明                           |
1550| ----------------------------------------------- | ---------------------------- |
1551| Promise<void\>          | Promise对象。                   |
1552
1553**错误码:**
1554
1555以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1556
1557| 错误码ID         | 错误信息        |
1558| --------------- | --------------- |
1559| 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.              |
1560| 24700101                |  All unknown errors                  |
1561| 24700201                |  Fatal service error, for example, service died                  |
1562
1563**示例:**
1564
1565```ts
1566import { drm } from '@kit.DrmKit';
1567import { BusinessError } from '@kit.BasicServicesKit';
1568
1569let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1570let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1571// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际数据传入
1572let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
1573mediaKeySession.restoreOfflineMediaKeys(mediaKeyId).then(() => {
1574  console.log("restoreOfflineMediaKeys");
1575}).catch((err: BusinessError) => {
1576  console.error(`restoreOfflineMediaKeys: ERROR: ${err}`);
1577});
1578```
1579
1580### getContentProtectionLevel
1581
1582getContentProtectionLevel(): ContentProtectionLevel
1583
1584获取当前会话的内容保护级别。
1585
1586**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1587
1588**系统能力:** SystemCapability.Multimedia.Drm.Core
1589
1590**返回值:**
1591
1592| 类型                                             | 说明                           |
1593| ----------------------------------------------- | ---------------------------- |
1594| [ContentProtectionLevel](#contentprotectionlevel)          | 返回当前会话内容保护级别。                   |
1595
1596**错误码:**
1597
1598以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1599
1600| 错误码ID         | 错误信息        |
1601| --------------- | --------------- |
1602| 24700101                |  All unknown errors                  |
1603| 24700201                |  Fatal service error, for example, service died                  |
1604
1605**示例:**
1606
1607```ts
1608import { drm } from '@kit.DrmKit';
1609import { BusinessError } from '@kit.BasicServicesKit';
1610
1611let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1612let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1613try {
1614  let contentProtectionLevel: drm.ContentProtectionLevel = mediaKeySession.getContentProtectionLevel();
1615} catch (err) {
1616  let error = err as BusinessError;
1617  console.error(`getContentProtectionLevel ERROR: ${error}`);
1618}
1619```
1620
1621### requireSecureDecoderModule
1622
1623requireSecureDecoderModule(mimeType: string): boolean
1624
1625是否需要安全解码。
1626
1627**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1628
1629**系统能力:** SystemCapability.Multimedia.Drm.Core
1630
1631**参数:**
1632
1633| 参数名     | 类型                                             | 必填 | 说明                           |
1634| -------- | ----------------------------------------------- | ---- | ---------------------------- |
1635| mimeType  | string     | 是   | 媒体类型,由DRM解决方案决定具体的支持类型。                   |
1636
1637**返回值:**
1638
1639| 类型                                             | 说明                           |
1640| ----------------------------------------------- | ---------------------------- |
1641| boolean          | 是否需要安全解码,true表示需要安全解码,false表示不需要安全解码。                   |
1642
1643**错误码:**
1644
1645以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1646
1647| 错误码ID         | 错误信息        |
1648| --------------- | --------------- |
1649| 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.      |
1650| 24700101                |  All unknown errors                  |
1651| 24700201                |  Fatal service error, for example, service died                  |
1652
1653**示例:**
1654
1655```ts
1656import { drm } from '@kit.DrmKit';
1657import { BusinessError } from '@kit.BasicServicesKit';
1658
1659let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1660let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1661try {
1662  let status: boolean = mediaKeySession.requireSecureDecoderModule("video/avc");
1663} catch (err) {
1664  let error = err as BusinessError;
1665  console.error(`requireSecureDecoderModule ERROR: ${error}`);
1666}
1667```
1668
1669### on('keyRequired')
1670
1671on(type: 'keyRequired', callback: (eventInfo: EventInfo) => void): void
1672
1673监听密钥请求事件。
1674
1675**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1676
1677**系统能力:** SystemCapability.Multimedia.Drm.Core
1678
1679**参数:**
1680
1681| 参数名      | 类型                  | 必填 | 说明                                  |
1682| -------- | -------------------- | ---- | ------------------------------------- |
1683| type     | string               | 是   | 事件类型,固定为'keyRequired',当播放DRM节目需要获取媒体密钥时触发。 |
1684| callback | Callback\<[EventInfo](#eventinfo)\> | 是   | 回调函数,返回事件信息。                 |
1685
1686**错误码:**
1687
1688以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1689
1690| 错误码ID         | 错误信息        |
1691| --------------- | --------------- |
1692| 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.         |
1693| 24700101                |  All unknown errors                  |
1694
1695**示例:**
1696
1697```ts
1698import { drm } from '@kit.DrmKit';
1699
1700let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1701let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1702mediaKeySession.on('keyRequired', (eventInfo: drm.EventInfo) => {
1703  console.log('keyRequired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
1704});
1705```
1706
1707### off('keyRequired')
1708
1709off(type: 'keyRequired', callback?: (eventInfo: EventInfo) => void): void
1710
1711注销密钥请求事件监听。
1712
1713**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1714
1715**系统能力:** SystemCapability.Multimedia.Drm.Core
1716
1717**参数:**
1718
1719| 参数名      | 类型                  | 必填 | 说明                                  |
1720| -------- | -------------------- | ---- | ------------------------------------- |
1721| type     | string               | 是   | 监听事件类型,固定为'keyRequired'。 |
1722| callback | Callback\<[EventInfo](#eventinfo)\> | 否   | 回调函数,返回事件信息。可选。                |
1723
1724**错误码:**
1725
1726以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1727
1728| 错误码ID         | 错误信息        |
1729| --------------- | --------------- |
1730| 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.             |
1731| 24700101                |  All unknown errors                  |
1732
1733**示例:**
1734
1735```ts
1736import { drm } from '@kit.DrmKit';
1737
1738let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1739let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1740mediaKeySession.off('keyRequired');
1741```
1742
1743### on('keyExpired')
1744
1745on(type: 'keyExpired', callback: (eventInfo: EventInfo) => void): void
1746
1747监听密钥过期事件。
1748
1749**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1750
1751**系统能力:** SystemCapability.Multimedia.Drm.Core
1752
1753**参数:**
1754
1755| 参数名      | 类型                  | 必填 | 说明                                  |
1756| -------- | -------------------- | ---- | ------------------------------------- |
1757| type     | string               | 是   | 监听事件类型,固定为'keyExpired'。密钥过期时触发。 |
1758| callback | Callback\<[EventInfo](#eventinfo)\> | 是   | 回调函数,返回事件信息。                 |
1759
1760**错误码:**
1761
1762以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1763
1764| 错误码ID         | 错误信息        |
1765| --------------- | --------------- |
1766| 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.          |
1767| 24700101                |  All unknown errors                  |
1768
1769**示例:**
1770
1771```ts
1772import { drm } from '@kit.DrmKit';
1773
1774let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1775let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1776mediaKeySession.on('keyExpired', (eventInfo: drm.EventInfo) => {
1777  console.log('keyExpired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
1778});
1779```
1780
1781### off('keyExpired')
1782
1783off(type: 'keyExpired', callback?: (eventInfo: EventInfo) => void): void
1784
1785注销密钥过期事件监听。
1786
1787**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1788
1789**系统能力:** SystemCapability.Multimedia.Drm.Core
1790
1791**参数:**
1792
1793| 参数名      | 类型                  | 必填 | 说明                                  |
1794| -------- | -------------------- | ---- | ------------------------------------- |
1795| type     | string               | 是   | 监听事件类型,固定为'keyExpired'。 |
1796| callback | Callback\<[EventInfo](#eventinfo)\> | 否   | 回调函数,返回事件信息。可选。                |
1797
1798**错误码:**
1799
1800以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1801
1802| 错误码ID         | 错误信息        |
1803| --------------- | --------------- |
1804| 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.            |
1805| 24700101                |  All unknown errors                  |
1806
1807**示例:**
1808
1809```ts
1810import { drm } from '@kit.DrmKit';
1811
1812let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1813let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1814mediaKeySession.off('keyExpired');
1815```
1816
1817### on('vendorDefined')
1818
1819on(type: 'vendorDefined', callback: (eventInfo: EventInfo) => void): void
1820
1821监听DRM解决方案自定义事件。
1822
1823**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1824
1825**系统能力:** SystemCapability.Multimedia.Drm.Core
1826
1827**参数:**
1828
1829| 参数名      | 类型                  | 必填 | 说明                                  |
1830| -------- | -------------------- | ---- | ------------------------------------- |
1831| type     | string               | 是   | 监听事件,固定为'vendorDefined'。自定义事件发生时触发。 |
1832| callback | Callback\<[EventInfo](#eventinfo)\> | 是   | 回调函数,返回事件信息。                 |
1833
1834**错误码:**
1835
1836以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1837
1838| 错误码ID         | 错误信息        |
1839| --------------- | --------------- |
1840| 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.              |
1841| 24700101                |  All unknown errors                  |
1842
1843**示例:**
1844
1845```ts
1846import { drm } from '@kit.DrmKit';
1847
1848let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1849let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1850mediaKeySession.on('vendorDefined', (eventInfo: drm.EventInfo) => {
1851  console.log('vendorDefined ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
1852});
1853```
1854
1855### off('vendorDefined')
1856
1857off(type: 'vendorDefined', callback?: (eventInfo: EventInfo) => void): void
1858
1859注销DRM解决方案自定义事件监听。
1860
1861**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1862
1863**系统能力:** SystemCapability.Multimedia.Drm.Core
1864
1865**参数:**
1866
1867| 参数名      | 类型                  | 必填 | 说明                                  |
1868| -------- | -------------------- | ---- | ------------------------------------- |
1869| type     | string               | 是   | 监听事件,固定为'vendorDefined'。 |
1870| callback | Callback\<[EventInfo](#eventinfo)\> | 否   | 回调函数,返回事件信息。可选。                |
1871
1872**错误码:**
1873
1874以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1875
1876| 错误码ID         | 错误信息        |
1877| --------------- | --------------- |
1878| 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.      |
1879| 24700101                |  All unknown errors                  |
1880
1881**示例:**
1882
1883```ts
1884import { drm } from '@kit.DrmKit';
1885
1886let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1887let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1888mediaKeySession.off('vendorDefined');
1889```
1890
1891### on('expirationUpdate')
1892
1893on(type: 'expirationUpdate', callback: (eventInfo: EventInfo) => void): void
1894
1895监听密钥过期更新事件。
1896
1897**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1898
1899**系统能力:** SystemCapability.Multimedia.Drm.Core
1900
1901**参数:**
1902
1903| 参数名      | 类型                  | 必填 | 说明                                  |
1904| -------- | -------------------- | ---- | ------------------------------------- |
1905| type     | string               | 是   | 监听事件类型,固定为'expirationUpdate'。密钥过期更新时触发。 |
1906| callback | Callback\<[EventInfo](#eventinfo)\> | 是   | 回调函数,返回事件信息。                 |
1907
1908**错误码:**
1909
1910以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1911
1912| 错误码ID         | 错误信息        |
1913| --------------- | --------------- |
1914| 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.        |
1915| 24700101                |  All unknown errors                  |
1916
1917**示例:**
1918
1919```ts
1920import { drm } from '@kit.DrmKit';
1921
1922let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1923let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1924mediaKeySession.on('expirationUpdate', (eventInfo: drm.EventInfo) => {
1925  console.log('expirationUpdate ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
1926});
1927```
1928
1929### off('expirationUpdate')
1930
1931off(type: 'expirationUpdate', callback?: (eventInfo: EventInfo) => void): void
1932
1933注销过期更新事件监听。
1934
1935**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1936
1937**系统能力:** SystemCapability.Multimedia.Drm.Core
1938
1939**参数:**
1940
1941| 参数名      | 类型                  | 必填 | 说明                                  |
1942| -------- | -------------------- | ---- | ------------------------------------- |
1943| type     | string               | 是   | 监听事件类型,固定为'expirationUpdate'。 |
1944| callback | Callback\<[EventInfo](#eventinfo)\> | 否   | 回调函数,返回事件信息。可选。                |
1945
1946**错误码:**
1947
1948以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1949
1950| 错误码ID         | 错误信息        |
1951| --------------- | --------------- |
1952| 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.       |
1953| 24700101                |  All unknown errors                  |
1954
1955**示例:**
1956
1957```ts
1958import { drm } from '@kit.DrmKit';
1959
1960let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1961let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1962mediaKeySession.off('expirationUpdate');
1963```
1964
1965### on('keysChange')
1966
1967on(type: 'keysChange', callback: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void
1968
1969监听密钥变化事件。
1970
1971**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1972
1973**系统能力:** SystemCapability.Multimedia.Drm.Core
1974
1975**参数:**
1976
1977| 参数名      | 类型                  | 必填 | 说明                                  |
1978| -------- | -------------------- | ---- | ------------------------------------- |
1979| type     | string               | 是   | 监听事件类型,固定为'keysChange'。密钥变化时触发。 |
1980| callback | Callback\<[KeysInfo[]](#keysinfo), boolean\> | 是   | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。                 |
1981
1982**错误码:**
1983
1984以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
1985
1986| 错误码ID         | 错误信息        |
1987| --------------- | --------------- |
1988| 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.             |
1989| 24700101                |  All unknown errors                  |
1990
1991**示例:**
1992
1993```ts
1994import { drm } from '@kit.DrmKit';
1995
1996let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
1997let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
1998mediaKeySession.on('keysChange', (keyInfo: drm.KeysInfo[], newKeyAvailable: boolean) => {
1999  for (let i = 0; i < keyInfo.length; i++) {
2000    console.log('keysChange' + 'keyId:' + keyInfo[i].keyId + ' data:' + keyInfo[i].value);
2001  }
2002});
2003```
2004
2005### off('keysChange')
2006
2007off(type: 'keysChange', callback?: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void
2008
2009注销密钥变化事件监听。
2010
2011**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2012
2013**系统能力:** SystemCapability.Multimedia.Drm.Core
2014
2015**参数:**
2016
2017| 参数名      | 类型                  | 必填 | 说明                                  |
2018| -------- | -------------------- | ---- | ------------------------------------- |
2019| type     | string               | 是   | 监听事件类型,固定为'keysChange'。 |
2020| callback | Callback\<[KeysInfo[]](#keysinfo), boolean\> | 否   | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。                |
2021
2022**错误码:**
2023
2024以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
2025
2026| 错误码ID         | 错误信息        |
2027| --------------- | --------------- |
2028| 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.            |
2029| 24700101                |  All unknown errors                  |
2030
2031**示例:**
2032
2033```ts
2034import { drm } from '@kit.DrmKit';
2035
2036let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
2037let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
2038mediaKeySession.off('keysChange');
2039```
2040
2041### destroy
2042
2043destroy(): void
2044
2045销毁MediaKeySession实例。
2046
2047**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2048
2049**系统能力:** SystemCapability.Multimedia.Drm.Core
2050
2051**错误码:**
2052
2053以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
2054
2055| 错误码ID         | 错误信息        |
2056| --------------- | --------------- |
2057| 24700101                |  All unknown errors                  |
2058| 24700201                |  Fatal service error, for example, service died                  |
2059
2060**示例:**
2061
2062```ts
2063import { drm } from '@kit.DrmKit';
2064import { BusinessError } from '@kit.BasicServicesKit';
2065
2066let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
2067let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
2068try {
2069  mediaKeySession.destroy();
2070} catch (err) {
2071  let error = err as BusinessError;
2072  console.error(`mediaKeySession destroy ERROR: ${error}`);
2073}
2074
2075```