• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Interface (MediaKeySession)
2<!--Kit: Drm Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @qin_wei_jie-->
5<!--Designer: @chris2981-->
6<!--Tester: @xdlinc-->
7<!--Adviser: @zengyawen-->
8> **说明:**
9>
10> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
11
12支持媒体密钥管理。在调用MediaKeySession方法之前,必须使用[createMediaKeySession](arkts-apis-drm-MediaKeySystem.md#createmediakeysession)获取一个MediaKeySession实例。
13
14## 导入模块
15
16```ts
17import { drm } from '@kit.DrmKit';
18```
19
20## generateMediaKeyRequest
21
22generateMediaKeyRequest(mimeType: string, initData: Uint8Array, mediaKeyType: number, options?: OptionsData[]): Promise<MediaKeyRequest\>
23
24生成媒体密钥请求。
25
26**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
27
28**系统能力:** SystemCapability.Multimedia.Drm.Core
29
30**参数:**
31
32| 参数名     | 类型                                             | 必填 | 说明                                                                                                     |
33| -------- | ----------------------------------------------- | ---- |--------------------------------------------------------------------------------------------------------|
34| mimeType  | string     | 是   | 媒体类型,DRM解决方案名称,可通过[isMediaKeySystemSupported](arkts-apis-drm-f.md#drmismediakeysystemsupported-1)查询。 |
35| initData  | Uint8Array     | 是   | 初始数据。                                                                                                  |
36| mediaKeyType| number     | 是   | 媒体密钥类型。0表示在线,1表示离线。                                                                                    |
37| options  | [OptionsData[]](arkts-apis-drm-i.md#optionsdata)     | 否   | 可选数据。                                                                                                  |
38
39**返回值:**
40
41| 类型                                             | 说明                           |
42| ----------------------------------------------- | ---------------------------- |
43| Promise<[MediaKeyRequest](arkts-apis-drm-i.md#mediakeyrequest)\>          | Promise对象,媒体密钥请求。                   |
44
45**错误码:**
46
47以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
48
49| 错误码ID         | 错误信息        |
50| --------------- | --------------- |
51| 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.              |
52| 24700101                |  All unknown errors                  |
53| 24700201                |  Fatal service error, for example, service died                  |
54
55**示例:**
56
57```ts
58import { drm } from '@kit.DrmKit';
59import { BusinessError } from '@kit.BasicServicesKit';
60
61let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
62let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
63// pssh数据为版权保护系统描述头,封装在加密码流中,mp4文件中位于pssh box、dash码流中位于mpd及mp4的pssh box、hls+ts的码流位于m3u8及每个ts片段中,请按实际值传入。
64let uint8pssh = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
65mediaKeySession.generateMediaKeyRequest("video/avc", uint8pssh, drm.MediaKeyType.MEDIA_KEY_TYPE_ONLINE).then((mediaKeyRequest: drm.MediaKeyRequest) =>{
66  console.log('generateMediaKeyRequest' + mediaKeyRequest);
67}).catch((err: BusinessError) => {
68  console.error(`generateMediaKeyRequest: ERROR: ${err}`);
69});
70```
71
72## processMediaKeyResponse
73
74processMediaKeyResponse(response: Uint8Array): Promise<Uint8Array\>
75
76处理媒体密钥响应。
77
78**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
79
80**系统能力:** SystemCapability.Multimedia.Drm.Core
81
82**参数:**
83
84| 参数名     | 类型                                             | 必填 | 说明                           |
85| -------- | ----------------------------------------------- | ---- | ---------------------------- |
86| response  | Uint8Array     | 是   | 媒体密钥响应。                   |
87
88**返回值:**
89
90| 类型                                             | 说明                           |
91| ----------------------------------------------- | ---------------------------- |
92| Promise<Uint8Array\>          | Promise对象,媒体密钥标识。                   |
93
94**错误码:**
95
96以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
97
98| 错误码ID         | 错误信息        |
99| --------------- | --------------- |
100| 401                |  The parameter check failed. Possibly because: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.            |
101| 24700101                |  All unknown errors                  |
102| 24700201                |  Fatal service error, for example, service died                  |
103
104**示例:**
105
106```ts
107import { drm } from '@kit.DrmKit';
108import { BusinessError } from '@kit.BasicServicesKit';
109
110let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
111let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
112// mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入。
113let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
114mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => {
115  console.log('processMediaKeyResponse:' + mediaKeyId);
116}).catch((err: BusinessError) => {
117  console.error(`processMediaKeyResponse: ERROR: ${err}`);
118});
119```
120
121## checkMediaKeyStatus
122
123 checkMediaKeyStatus(): MediaKeyStatus[]
124
125检查当前媒体密钥状态。
126
127**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
128
129**系统能力:** SystemCapability.Multimedia.Drm.Core
130
131**返回值:**
132
133| 类型                                             | 说明                           |
134| ----------------------------------------------- | ---------------------------- |
135| [MediaKeyStatus[]](arkts-apis-drm-i.md#mediakeystatus)          | 当前媒体密钥状态值。                   |
136
137**错误码:**
138
139以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
140
141| 错误码ID         | 错误信息        |
142| --------------- | --------------- |
143| 24700101                |  All unknown errors                  |
144| 24700201                |  Fatal service error, for example, service died                  |
145
146**示例:**
147
148```ts
149import { drm } from '@kit.DrmKit';
150import { BusinessError } from '@kit.BasicServicesKit';
151
152let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
153let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
154try {
155  let keyStatus: drm.MediaKeyStatus[] =  mediaKeySession.checkMediaKeyStatus();
156} catch (err) {
157  let error = err as BusinessError;
158  console.error(`checkMediaKeyStatus ERROR: ${error}`);
159}
160```
161
162## clearMediaKeys
163
164clearMediaKeys(): void
165
166清除当前媒体密钥。
167
168**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
169
170**系统能力:** SystemCapability.Multimedia.Drm.Core
171
172**错误码:**
173
174以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
175
176| 错误码ID         | 错误信息        |
177| --------------- | --------------- |
178| 24700101                |  All unknown errors                  |
179| 24700201                |  Fatal service error, for example, service died                  |
180
181**示例:**
182
183```ts
184import { drm } from '@kit.DrmKit';
185import { BusinessError } from '@kit.BasicServicesKit';
186
187let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
188let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
189// mediaKeyResponse是从DRM服务获取的媒体密钥响应,按实际值填入。
190let mediaKeyResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
191mediaKeySession.processMediaKeyResponse(mediaKeyResponse).then((mediaKeyId: Uint8Array) => {
192  console.log('processMediaKeyResponse:' + mediaKeyId);
193}).catch((err: BusinessError) => {
194  console.error(`processMediaKeyResponse: ERROR: ${err}`);
195});
196try {
197  mediaKeySession.clearMediaKeys();
198} catch (err) {
199  let error = err as BusinessError;
200  console.error(`clearMediaKeys ERROR: ${error}`);
201}
202```
203
204## generateOfflineReleaseRequest
205
206generateOfflineReleaseRequest(mediaKeyId: Uint8Array): Promise<Uint8Array\>
207
208生成离线媒体密钥释放请求。
209
210**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
211
212**系统能力:** SystemCapability.Multimedia.Drm.Core
213
214**参数:**
215
216| 参数名     | 类型                                             | 必填 | 说明                           |
217| -------- | ----------------------------------------------- | ---- | ---------------------------- |
218| mediaKeyId  | Uint8Array    | 是   | 离线媒体密钥标识。                   |
219
220**返回值:**
221
222| 类型                                             | 说明                           |
223| ----------------------------------------------- | ---------------------------- |
224| Promise<Uint8Array\>          | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回离线媒体密钥释放请求。                   |
225
226**错误码:**
227
228以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
229
230| 错误码ID         | 错误信息        |
231| --------------- | --------------- |
232| 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.         |
233| 24700101                |  All unknown errors                  |
234| 24700201                |  Fatal service error, for example, service died                  |
235
236**示例:**
237
238```ts
239import { drm } from '@kit.DrmKit';
240import { BusinessError } from '@kit.BasicServicesKit';
241
242let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
243let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
244// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际值传入。
245let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
246mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => {
247  console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest);
248}).catch((err: BusinessError) => {
249  console.error(`generateOfflineReleaseRequest: ERROR: ${err}`);
250});
251```
252
253## processOfflineReleaseResponse
254
255processOfflineReleaseResponse(mediaKeyId: Uint8Array, response: Uint8Array): Promise<void\>
256
257处理离线媒体密钥释放响应。
258
259**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
260
261**系统能力:** SystemCapability.Multimedia.Drm.Core
262
263**参数:**
264
265| 参数名     | 类型                                             | 必填 | 说明                           |
266| -------- | ----------------------------------------------- | ---- | ---------------------------- |
267| mediaKeyId  | Uint8Array     | 是   | 离线媒体密钥标识。                   |
268| response  | Uint8Array     | 是   | 离线媒体密钥释放响应。                   |
269
270**返回值:**
271
272| 类型                                             | 说明                           |
273| ----------------------------------------------- | ---------------------------- |
274| Promise<void\>          | Promise对象,设备上的DRM解决方案支持离线媒体密钥释放处理,则返回。                   |
275
276**错误码:**
277
278以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
279
280| 错误码ID         | 错误信息        |
281| --------------- | --------------- |
282| 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.            |
283| 24700101                |  All unknown errors                  |
284| 24700201                |  Fatal service error, for example, service died                  |
285
286**示例:**
287
288```ts
289import { drm } from '@kit.DrmKit';
290import { BusinessError } from '@kit.BasicServicesKit';
291
292let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
293let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
294// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际长度申请内存。
295let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
296mediaKeySession.generateOfflineReleaseRequest(mediaKeyId).then((offlineReleaseRequest: Uint8Array) => {
297  console.log('generateOfflineReleaseRequest:' + offlineReleaseRequest);
298}).catch((err: BusinessError) => {
299  console.error(`generateOfflineReleaseRequest: ERROR: ${err}`);
300});
301// offlineReleaseResponse是从DRM服务获取的离线媒体密钥释放响应,请按实际长度申请内存。
302let offlineReleaseResponse = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
303mediaKeySession.processOfflineReleaseResponse(mediaKeyId, offlineReleaseResponse).then(() => {
304  console.log('processOfflineReleaseResponse');
305}).catch((err: BusinessError) => {
306  console.error(`processOfflineReleaseResponse: ERROR: ${err}`);
307});
308```
309
310## restoreOfflineMediaKeys
311
312restoreOfflineMediaKeys(mediaKeyId: Uint8Array): Promise<void\>
313
314恢复离线媒体密钥。
315
316**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
317
318**系统能力:** SystemCapability.Multimedia.Drm.Core
319
320**参数:**
321
322| 参数名     | 类型                                             | 必填 | 说明                           |
323| -------- | ----------------------------------------------- | ---- | ---------------------------- |
324| mediaKeyId  | Uint8Array     | 是   | 离线媒体密钥标识。                   |
325
326**返回值:**
327
328| 类型                                             | 说明                           |
329| ----------------------------------------------- | ---------------------------- |
330| Promise<void\>          | Promise对象。                   |
331
332**错误码:**
333
334以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
335
336| 错误码ID         | 错误信息        |
337| --------------- | --------------- |
338| 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.              |
339| 24700101                |  All unknown errors                  |
340| 24700201                |  Fatal service error, for example, service died                  |
341
342**示例:**
343
344```ts
345import { drm } from '@kit.DrmKit';
346import { BusinessError } from '@kit.BasicServicesKit';
347
348let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
349let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
350// mediaKeyId是processMediaKeyResponse或getOfflineMediaKeyIds接口返回的媒体密钥标识,请按实际数据传入。
351let mediaKeyId = new Uint8Array([0x00, 0x00, 0x00, 0x00]);
352mediaKeySession.restoreOfflineMediaKeys(mediaKeyId).then(() => {
353  console.log("restoreOfflineMediaKeys");
354}).catch((err: BusinessError) => {
355  console.error(`restoreOfflineMediaKeys: ERROR: ${err}`);
356});
357```
358
359## getContentProtectionLevel
360
361getContentProtectionLevel(): ContentProtectionLevel
362
363获取当前会话的内容保护级别。
364
365**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
366
367**系统能力:** SystemCapability.Multimedia.Drm.Core
368
369**返回值:**
370
371| 类型                                             | 说明                           |
372| ----------------------------------------------- | ---------------------------- |
373| [ContentProtectionLevel](arkts-apis-drm-e.md#contentprotectionlevel)          | 返回当前会话内容保护级别。                   |
374
375**错误码:**
376
377以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
378
379| 错误码ID         | 错误信息        |
380| --------------- | --------------- |
381| 24700101                |  All unknown errors                  |
382| 24700201                |  Fatal service error, for example, service died                  |
383
384**示例:**
385
386```ts
387import { drm } from '@kit.DrmKit';
388import { BusinessError } from '@kit.BasicServicesKit';
389
390let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
391let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
392try {
393  let contentProtectionLevel: drm.ContentProtectionLevel = mediaKeySession.getContentProtectionLevel();
394} catch (err) {
395  let error = err as BusinessError;
396  console.error(`getContentProtectionLevel ERROR: ${error}`);
397}
398```
399
400## requireSecureDecoderModule
401
402requireSecureDecoderModule(mimeType: string): boolean
403
404是否需要安全解码。
405
406**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
407
408**系统能力:** SystemCapability.Multimedia.Drm.Core
409
410**参数:**
411
412| 参数名     | 类型                                             | 必填 | 说明                                                                                                     |
413| -------- | ----------------------------------------------- | ---- |--------------------------------------------------------------------------------------------------------|
414| mimeType  | string     | 是   | 媒体类型,支持的媒体类型取决于DRM解决方案,可通过[isMediaKeySystemSupported](arkts-apis-drm-f.md#drmismediakeysystemsupported-1)查询。 |
415
416**返回值:**
417
418| 类型                                             | 说明                           |
419| ----------------------------------------------- | ---------------------------- |
420| boolean          | 是否需要安全解码,true表示需要安全解码,false表示不需要安全解码。                   |
421
422**错误码:**
423
424以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
425
426| 错误码ID         | 错误信息        |
427| --------------- | --------------- |
428| 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.      |
429| 24700101                |  All unknown errors                  |
430| 24700201                |  Fatal service error, for example, service died                  |
431
432**示例:**
433
434```ts
435import { drm } from '@kit.DrmKit';
436import { BusinessError } from '@kit.BasicServicesKit';
437
438let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
439let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
440try {
441  let status: boolean = mediaKeySession.requireSecureDecoderModule("video/avc");
442} catch (err) {
443  let error = err as BusinessError;
444  console.error(`requireSecureDecoderModule ERROR: ${error}`);
445}
446```
447
448## on('keyRequired')
449
450on(type: 'keyRequired', callback: (eventInfo: EventInfo) => void): void
451
452监听密钥请求事件。
453
454**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
455
456**系统能力:** SystemCapability.Multimedia.Drm.Core
457
458**参数:**
459
460| 参数名      | 类型                  | 必填 | 说明                                  |
461| -------- | -------------------- | ---- | ------------------------------------- |
462| type     | string               | 是   | 事件类型,固定为'keyRequired',当播放DRM节目需要获取媒体密钥时触发。 |
463| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 是   | 回调函数,返回事件信息。                 |
464
465**错误码:**
466
467以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
468
469| 错误码ID         | 错误信息        |
470| --------------- | --------------- |
471| 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.         |
472| 24700101                |  All unknown errors                  |
473
474**示例:**
475
476```ts
477import { drm } from '@kit.DrmKit';
478
479let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
480let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
481mediaKeySession.on('keyRequired', (eventInfo: drm.EventInfo) => {
482  console.log('keyRequired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
483});
484```
485
486## off('keyRequired')
487
488off(type: 'keyRequired', callback?: (eventInfo: EventInfo) => void): void
489
490注销密钥请求事件监听。
491
492**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
493
494**系统能力:** SystemCapability.Multimedia.Drm.Core
495
496**参数:**
497
498| 参数名      | 类型                  | 必填 | 说明                                  |
499| -------- | -------------------- | ---- | ------------------------------------- |
500| type     | string               | 是   | 监听事件类型,固定为'keyRequired'。 |
501| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 否   | 回调函数,返回事件信息。可选。                |
502
503**错误码:**
504
505以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
506
507| 错误码ID         | 错误信息        |
508| --------------- | --------------- |
509| 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.             |
510| 24700101                |  All unknown errors                  |
511
512**示例:**
513
514```ts
515import { drm } from '@kit.DrmKit';
516
517let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
518let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
519mediaKeySession.off('keyRequired');
520```
521
522## on('keyExpired')
523
524on(type: 'keyExpired', callback: (eventInfo: EventInfo) => void): void
525
526监听密钥过期事件。
527
528**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
529
530**系统能力:** SystemCapability.Multimedia.Drm.Core
531
532**参数:**
533
534| 参数名      | 类型                  | 必填 | 说明                                  |
535| -------- | -------------------- | ---- | ------------------------------------- |
536| type     | string               | 是   | 监听事件类型,固定为'keyExpired'。密钥过期时触发。 |
537| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 是   | 回调函数,返回事件信息。                 |
538
539**错误码:**
540
541以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
542
543| 错误码ID         | 错误信息        |
544| --------------- | --------------- |
545| 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.          |
546| 24700101                |  All unknown errors                  |
547
548**示例:**
549
550```ts
551import { drm } from '@kit.DrmKit';
552
553let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
554let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
555mediaKeySession.on('keyExpired', (eventInfo: drm.EventInfo) => {
556  console.log('keyExpired ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
557});
558```
559
560## off('keyExpired')
561
562off(type: 'keyExpired', callback?: (eventInfo: EventInfo) => void): void
563
564注销密钥过期事件监听。
565
566**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
567
568**系统能力:** SystemCapability.Multimedia.Drm.Core
569
570**参数:**
571
572| 参数名      | 类型                  | 必填 | 说明                                  |
573| -------- | -------------------- | ---- | ------------------------------------- |
574| type     | string               | 是   | 监听事件类型,固定为'keyExpired'。 |
575| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 否   | 回调函数,返回事件信息。可选。                |
576
577**错误码:**
578
579以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
580
581| 错误码ID         | 错误信息        |
582| --------------- | --------------- |
583| 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.            |
584| 24700101                |  All unknown errors                  |
585
586**示例:**
587
588```ts
589import { drm } from '@kit.DrmKit';
590
591let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
592let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
593mediaKeySession.off('keyExpired');
594```
595
596## on('vendorDefined')
597
598on(type: 'vendorDefined', callback: (eventInfo: EventInfo) => void): void
599
600监听DRM解决方案自定义事件。
601
602**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
603
604**系统能力:** SystemCapability.Multimedia.Drm.Core
605
606**参数:**
607
608| 参数名      | 类型                  | 必填 | 说明                                  |
609| -------- | -------------------- | ---- | ------------------------------------- |
610| type     | string               | 是   | 监听事件,固定为'vendorDefined'。自定义事件发生时触发。 |
611| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 是   | 回调函数,返回事件信息。                 |
612
613**错误码:**
614
615以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
616
617| 错误码ID         | 错误信息        |
618| --------------- | --------------- |
619| 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.              |
620| 24700101                |  All unknown errors                  |
621
622**示例:**
623
624```ts
625import { drm } from '@kit.DrmKit';
626
627let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
628let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
629mediaKeySession.on('vendorDefined', (eventInfo: drm.EventInfo) => {
630  console.log('vendorDefined ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
631});
632```
633
634## off('vendorDefined')
635
636off(type: 'vendorDefined', callback?: (eventInfo: EventInfo) => void): void
637
638注销DRM解决方案自定义事件监听。
639
640**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
641
642**系统能力:** SystemCapability.Multimedia.Drm.Core
643
644**参数:**
645
646| 参数名      | 类型                  | 必填 | 说明                                  |
647| -------- | -------------------- | ---- | ------------------------------------- |
648| type     | string               | 是   | 监听事件,固定为'vendorDefined'。 |
649| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 否   | 回调函数,返回事件信息。可选。                |
650
651**错误码:**
652
653以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
654
655| 错误码ID         | 错误信息        |
656| --------------- | --------------- |
657| 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.      |
658| 24700101                |  All unknown errors                  |
659
660**示例:**
661
662```ts
663import { drm } from '@kit.DrmKit';
664
665let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
666let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
667mediaKeySession.off('vendorDefined');
668```
669
670## on('expirationUpdate')
671
672on(type: 'expirationUpdate', callback: (eventInfo: EventInfo) => void): void
673
674监听密钥过期更新事件。
675
676**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
677
678**系统能力:** SystemCapability.Multimedia.Drm.Core
679
680**参数:**
681
682| 参数名      | 类型                  | 必填 | 说明                                  |
683| -------- | -------------------- | ---- | ------------------------------------- |
684| type     | string               | 是   | 监听事件类型,固定为'expirationUpdate'。密钥过期更新时触发。 |
685| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 是   | 回调函数,返回事件信息。                 |
686
687**错误码:**
688
689以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
690
691| 错误码ID         | 错误信息        |
692| --------------- | --------------- |
693| 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.        |
694| 24700101                |  All unknown errors                  |
695
696**示例:**
697
698```ts
699import { drm } from '@kit.DrmKit';
700
701let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
702let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
703mediaKeySession.on('expirationUpdate', (eventInfo: drm.EventInfo) => {
704  console.log('expirationUpdate ' + 'extra: ' + eventInfo.extraInfo + 'data: ' + eventInfo.info);
705});
706```
707
708## off('expirationUpdate')
709
710off(type: 'expirationUpdate', callback?: (eventInfo: EventInfo) => void): void
711
712注销过期更新事件监听。
713
714**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
715
716**系统能力:** SystemCapability.Multimedia.Drm.Core
717
718**参数:**
719
720| 参数名      | 类型                  | 必填 | 说明                                  |
721| -------- | -------------------- | ---- | ------------------------------------- |
722| type     | string               | 是   | 监听事件类型,固定为'expirationUpdate'。 |
723| callback | (eventInfo: [EventInfo](arkts-apis-drm-i.md#eventinfo)) => void  | 否   | 回调函数,返回事件信息。可选。                |
724
725**错误码:**
726
727以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
728
729| 错误码ID         | 错误信息        |
730| --------------- | --------------- |
731| 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.       |
732| 24700101                |  All unknown errors                  |
733
734**示例:**
735
736```ts
737import { drm } from '@kit.DrmKit';
738
739let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
740let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
741mediaKeySession.off('expirationUpdate');
742```
743
744## on('keysChange')
745
746on(type: 'keysChange', callback: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void
747
748监听密钥变化事件。
749
750**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
751
752**系统能力:** SystemCapability.Multimedia.Drm.Core
753
754**参数:**
755
756| 参数名      | 类型                  | 必填 | 说明                                  |
757| -------- | -------------------- | ---- | ------------------------------------- |
758| type     | string               | 是   | 监听事件类型,固定为'keysChange'。密钥变化时触发。 |
759| callback | (keyInfo: [KeysInfo[]](arkts-apis-drm-i.md#keysinfo), newKeyAvailable: boolean) => void | 是   | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。                 |
760
761**错误码:**
762
763以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
764
765| 错误码ID         | 错误信息        |
766| --------------- | --------------- |
767| 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.             |
768| 24700101                |  All unknown errors                  |
769
770**示例:**
771
772```ts
773import { drm } from '@kit.DrmKit';
774
775let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
776let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
777mediaKeySession.on('keysChange', (keyInfo: drm.KeysInfo[], newKeyAvailable: boolean) => {
778  for (let i = 0; i < keyInfo.length; i++) {
779    console.log('keysChange' + 'keyId:' + keyInfo[i].keyId + ' data:' + keyInfo[i].value);
780  }
781});
782```
783
784## off('keysChange')
785
786off(type: 'keysChange', callback?: (keyInfo: KeysInfo[], newKeyAvailable: boolean) => void): void
787
788注销密钥变化事件监听。
789
790**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
791
792**系统能力:** SystemCapability.Multimedia.Drm.Core
793
794**参数:**
795
796| 参数名      | 类型                  | 必填 | 说明                                  |
797| -------- | -------------------- | ---- | ------------------------------------- |
798| type     | string               | 是   | 监听事件类型,固定为'keysChange'。 |
799| callback | (keyInfo: [KeysInfo[]](arkts-apis-drm-i.md#keysinfo), newKeyAvailable: boolean) => void | 否   | 回调函数,返回事件信息,包含密钥标识和密钥状态描述的列表及密钥是否可用。                |
800
801**错误码:**
802
803以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
804
805| 错误码ID         | 错误信息        |
806| --------------- | --------------- |
807| 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.            |
808| 24700101                |  All unknown errors                  |
809
810**示例:**
811
812```ts
813import { drm } from '@kit.DrmKit';
814
815let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
816let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
817mediaKeySession.off('keysChange');
818```
819
820## destroy
821
822destroy(): void
823
824销毁MediaKeySession实例。
825
826**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
827
828**系统能力:** SystemCapability.Multimedia.Drm.Core
829
830**错误码:**
831
832以下错误码的详细介绍请参见[DRM错误码](errorcode-drm.md)。
833
834| 错误码ID         | 错误信息        |
835| --------------- | --------------- |
836| 24700101                |  All unknown errors                  |
837| 24700201                |  Fatal service error, for example, service died                  |
838
839**示例:**
840
841```ts
842import { drm } from '@kit.DrmKit';
843import { BusinessError } from '@kit.BasicServicesKit';
844
845let mediaKeySystem: drm.MediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
846let mediaKeySession: drm.MediaKeySession = mediaKeySystem.createMediaKeySession();
847try {
848  mediaKeySession.destroy();
849} catch (err) {
850  let error = err as BusinessError;
851  console.error(`mediaKeySession destroy ERROR: ${error}`);
852}
853
854```
855