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