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