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