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