• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..17-Mar-2025-

figures/H17-Mar-2025-

frameworks/H17-Mar-2025-12,20310,297

interfaces/H17-Mar-2025-2,6941,291

sa_profile/H17-Mar-2025-3229

services/H17-Mar-2025-8,6376,948

BUILD.gnH A D17-Mar-2025887 2422

LICENSEH A D17-Mar-202511.3 KiB202169

README_zh.mdH A D17-Mar-20254.7 KiB9789

bundle.jsonH A D17-Mar-20253.9 KiB114112

README_zh.md

1# DRM框架组件
2## 简介
3DRM(Digital Rights Management)框架组件支持音视频媒体业务数字版权管理功能的开发。开发者可以调用系统提供的DRM插件,完成DRM证书管理、DRM许可证管理等功能,支持DRM加密媒体数据的解密,实现DRM节目授权和解密播放。
4
5DRM框架组件提供以下功能:
6* DRM证书管理:生成证书请求、设置证书响应,实现对证书Provision(下载)功能;
7* DRM许可证管理:生成许可证请求、设置许可证响应,同时实现对许可证的离线管理等功能;
8* DRM节目授权:支持底层DRM插件根据许可证对DRM节目授权;
9* DRM节目解密:支持媒体播放功能的解密调用,实现对DRM节目的解密和播放。
10
11**图 1**  DRM框架组件架构图<a name=""></a>
12![](figures/architecture-zh.png)
13
14## 模块介绍
15
16| 模块名称 | 功能 |
17| ------- | ----|
18| MediaKeySystemFactoryClient | 对外提供Drm API接口,调用MediaKeySystemFactoryService,用于判断对DRM方案的支持及创建MediaKeySystem实例等。 |
19| MediaKeySystemFactoryService | 通过MediaKeySystemFactory HDI调用底层插件,提供判断对DRM方案的支持及创建MediaKeySystem实例的功能。 |
20| MediaKeySystemClient |  对外提供MediaKeySystem API接口,调用MediaKeySystemService,用于DRM证书Provision(下载)、创建MediaKeySession、获取/设置属性等。 |
21| MediaKeySystemService | 通过MediaKeySystem HDI调用底层插件,提供DRM证书Provision(下载)、创建MediaKeySession、获取/设置属性等功能。|
22| MediaKeySessionClient |  对外提供MediaKeySession API接口,调用MediaKeySessionService,用于生成许可证请求、设置许可证响应及许可证管理等。 |
23| MediaKeySessionService | 通过MediaKeySession HDI调用底层插件,提供生成许可证请求、设置许可证响应及许可证管理等功能。 |
24| MediaDecryptModuleClient | 调用MediaDecryptModuleService,为媒体组件提供媒体数据解密功能。|
25| MediaDecryptModuleService | 通过MediaDecryptModule HDI调用底层插件,提供解密功能。|
26
27## 目录
28```
29/foundation/multimedia/drm_framework     # DRM框架组件业务代码
30├── frameworks                           # 框架代码
31│   ├── native                           # 内部接口实现
32│   │   └── drm                          # DRM框架实现
33│   └── js                               # 外部接口实现
34│       └── drm_napi                     # DRM NAPI实现
35├── interfaces                           # 接口代码
36│   ├── inner_api                        # 内部接口
37│   └── kits                             # 外部接口
38├── BUILD.gn                             # 构建文件
39├── bundle.json                          # 部件描述文件
40├── sa_profile                           # 服务配置文件
41└── services                             # 服务代码
42    ├── drm_service                      # DRM服务实现
43    ├── etc                              # DRM服务配置
44    └── utils                            # 工具
45```
46## 编译
47~~~shell
48./build.sh --product-name {product name} --ccache --build-target drm_framework
49~~~
50{product_name}为当前支持的平台,比如rk3568。
51## 使用说明
52可参考以下示例:
53
541.引入drm模块
55~~~js
56import drm from  '@ohos.multimedia.drm';
57~~~
582.判断DRM框架是否支持指定的DRM方案, 示例以'com.clearplay.drm'为例。
59~~~js
60var isSupported = drm.isMediaKeySystemSupported('com.clearplay.drm');
61~~~
623.创建MediaKeySystem实例,
63~~~js
64var keySystem = drm.createMediaKeySystem('com.clearplay.drm');
65~~~
664.如无本地DRM证书,需完成证书下载。
67~~~js
68// 生成证书请求
69var drmRequest = keySystem.generateKeySystemRequest();
70// 获取证书响应
71var response = ...
72// 处理证书响应
73keySystem.processKeySystemResponse(response);
74~~~
755.创建MediaKeySession示例,传入安全等级。
76~~~js
77var keySession = keySystem.createKeySession(drm.ContentProtectionLevel.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
78~~~
796.生成许可证请求。
80~~~js
81var mediaKeyType:number = 1; // 在线申请
82var initData = ...;
83keySession.generateMediaKeyRequest('video/avc', initData, mediaKeyType);
84~~~
857.向DRM服务端发送许可证请求,获取许可证响应,并将许可证响应设置到keySession中。
86~~~js
87keySession.processMediaKeyResponse(mediaKeyResponse);
88~~~
898.获取SVP(Secure Video Path,安全视频通路)属性。
90~~~js
91var svp:boolean = keySession.requireSecureDecoderModule('video/mp4');
92~~~
939.将keySession与SVP属性设置到媒体组件中,以实现解密播放。
94
95## 相关仓
96[multimedia\_drm\_framework](https://gitee.com/openharmony/multimedia_drm_framework)
97