• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 系统管理(ArkTS)
2
3DRM系统管理(MediaKeySystem)支持MediaKeySystem实例管理、设备证书申请与处理、会话创建、离线许可证管理、获取DRM度量统计信息、设备属性等。
4
5## 开发步骤
6
7详细的API说明请参考[DRM API参考](../../reference/apis-drm-kit/js-apis-drm.md)。
8
91. 导入相关接口,导入方法如下。
10
11   ```ts
12   import drm from '@ohos.multimedia.drm';
13   ```
14
152. 调用MediaKeySystem类中的setConfigurationString方法,设置当前设备支持的字符串类型的属性值。接口调用失败时,会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
16
17   ```ts
18   function setConfigurationString(configName: string, value: string): void {
19     let mediaKeysystem: drm.mediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
20     try {
21       mediaKeysystem.setConfigurationString(configName, value);
22    } catch (err) {
23       let error = err as BusinessError;
24       console.error(`setConfigurationString ERROR: ${error}`);
25    }
26     return ;
27   }
28   ```
29
303. 调用MediaKeySystem类中的getConfigurationString方法,获取字符串类型的设备相关设备属性。接口调用失败时,会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
31
32   ```ts
33   function getConfigurationString(configName: string): string {
34     let mediaKeysystem: drm.mediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
35     try {
36       let configValue: string = mediaKeysystem.getConfigurationString(configName);
37     } catch (err) {
38       let error = err as BusinessError;
39       console.error(`getConfigurationString ERROR: ${error}`);
40     }
41     return configValue;
42   }
43   ```
44
454. 调用MediaKeySystem类中的setConfigurationByteArray方法,设置当前设备支持的字符数组类型的属性值。接口调用失败时,会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
46
47   ```ts
48   function setConfigurationByteArray(configName: string, value: Uint8Array): void {
49     let mediaKeysystem: drm.mediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
50     try {
51       mediaKeysystem.setConfigurationByteArray(configName, value);
52     } catch (err) {
53       let error = err as BusinessError;
54       console.error(`setConfigurationByteArray ERROR: ${error}`);
55     }
56     return;
57   }
58   ```
59
605. 调用MediaKeySystem类中的getConfigurationByteArray方法,获取字符数组类型的设备相关设备属性值。接口调用失败时,会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
61
62   ```ts
63   function getConfigurationByteArray(configName: string): Uint8Array {
64     let mediaKeysystem: drm.mediaKeySystem = drm.createMediaKeySystem("com.clearplay.drm");
65     try {
66       let configValue: Uint8Array = mediaKeysystem.getConfigurationByteArray(configName);
67     } catch (err) {
68       let error = err as BusinessError;
69       console.error(`getConfigurationByteArray ERROR: ${error}`);
70     }
71     return configValue;
72   }
73   ```
74
756. 调用MediaKeySystem类中的getMetrics()方法,获取系统统计信息。其中包括当前会话数、插件版本信息、解密次数和解密失败次数。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
76
77   ```ts
78   function getStatistics(): StatisticKeyValue[] {
79     try {
80       let statisticKeyValue: StatisticKeyValue[] = mediaKeysystem.getStatistics();
81     } catch (err) {
82       let error = err as BusinessError;
83       console.error(`getConfigurationByteArray ERROR: ${error}`);
84     }
85     return statisticKeyValue;
86   }
87   ```
88
897. 获取设备最大安全级别。
90
91   调用MediaKeySystem类中的getMaxContentProtectionLevel方法,获取设备支持的安全级别。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
92
93     ```ts
94   function getMaxContentProtectionLevel(): ContentProtectionLevel {
95     try {
96       let contentProtectionLevel: drm.ContentProtectionLevel = mediaKeysystem.getMaxContentProtectionLevel();
97     } catch (err) {
98       let error = err as BusinessError;
99       console.error(`getConfigurationByteArray ERROR: ${error}`);
100     }
101     return contentProtectionLevel;
102   }
103     ```
104
1058. 生成设备证书请求。
106
107   调用MediaKeySystem类中的generateKeySystemRequest方法,获取设备证书请求。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
108
109     ```ts
110   function generateKeySystemRequest(): Promise<ProvisionRequest> {
111     generateKeySystemRequest().then((ProvisionRequest: drm.ProvisionRequest) => {
112       console.log("generateKeySystemRequest");
113     }).catch((err: BusinessError) => {
114       console.error(`generateKeySystemRequest: ERROR: ${err}`);
115     });
116     return provisionRequest;
117   }
118     ```
119
1209. 处理设备证书响应。
121
122   调用MediaKeySystem类中的processKeySystemResponse方法,处理设备证书响应。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
123
124     ```ts
125   function processKeySystemResponse(response: Uint8Array): Promise<void> {
126     processKeySystemResponse(response).then(() => {
127       console.log("processKeySystemResponse");
128     }).catch((err: BusinessError) => {
129       console.error(`processKeySystemResponse: ERROR: ${err}`);
130     });
131     return;
132   }
133     ```
134
13510. 获取设备证书状态。
136
137   调用MediaKeySystem类中的getCertificateStatus方法,获取设备证书状态。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
138
139   ```ts
140   function getCertificateStatus(): CertificateStatus {
141     try {
142       let certificateStatus: drm.CertificateStatus = mediaKeysystem.getCertificateStatus();
143     } catch (err) {
144       let error = err as BusinessError;
145       console.error(`getCertificateStatus ERROR: ${error}`);
146     }
147     return certificateStatus;
148   }
149   ```
150
15111. 创建DRM会话。
152
153   调用MediaKeySystem类中的createMediaKeySession方法,按指定安全级别进行创建会话。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
154
155   ```ts
156   function createMediaKeySession(level: ContentProtectionLevel): MediaKeySession {
157     try {
158       let mediaKeySession: drm.MediaKeySession = mediaKeysystem.createMediaKeySession(drm.level.CONTENT_PROTECTION_LEVEL_SW_CRYPTO);
159     } catch (err) {
160       let error = err as BusinessError;
161       console.error(`getCertificateStatus ERROR: ${error}`);
162     }
163     return mediaKeySession;
164   }
165   ```
166
16712. 创建DRM会话。
168
169   调用MediaKeySystem类中的createMediaKeySession方法,创建会话。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
170
171   ```ts
172   function createMediaKeySession(): MediaKeySession {
173     try {
174       let mediaKeySession: drm.MediaKeySession = mediaKeysystem.createMediaKeySession();
175     } catch (err) {
176       let error = err as BusinessError;
177       console.error(`getCertificateStatus ERROR: ${error}`);
178     }
179     return mediaKeySession;
180   }
181   ```
182
18313. 获取离线许可证Id。
184
185   调用MediaKeySystem类中的getOfflineMediaKeyIds方法,获取离线许可证Id。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
186
187   ```ts
188   function getOfflineMediaKeyIds(): Uint8Array[] {
189     try {
190       let offlineMediaKeyIds: Uint8Array[] = mediaKeysystem.getOfflineMediaKeyIds();
191     } catch (err) {
192       let error = err as BusinessError;
193       console.error(`getOfflineMediaKeyIds ERROR: ${error}`);
194     }
195     return offlineMediaKeyIds;
196   }
197   ```
198
19914. 获取离线许可证状态。
200
201    调用MediaKeySystem类中的getOfflineMediaKeyStatus方法,获取离线许可证状态。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
202
203   ```ts
204   function getOfflineMediaKeyStatus(mediakeyId: Uint8Array): OfflineMediaKeyStatus {
205     try {
206       let offlineMediaKeyStatus: drm.OfflineMediaKeyStatus = mediaKeysystem.getOfflineMediaKeyStatus(mediakeyId);
207     } catch (err) {
208       let error = err as BusinessError;
209       console.error(`getOfflineMediaKeyStatus ERROR: ${error}`);
210     }
211     return offlineMediaKeyStatus;
212   }
213   ```
214
21515. 移除离线许可证。
216
217    调用MediaKeySystem类中的clearOfflineMediaKeys方法,移除离线许可证。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
218
219   ```ts
220   function clearOfflineMediaKeys(mediakeyId: Uint8Array): void {
221     try {
222       mediaKeysystem.clearOfflineMediaKeys(mediakeyId);
223     } catch (err) {
224       let error = err as BusinessError;
225       console.error(`clearOfflineMediaKeys ERROR: ${error}`);
226     }
227     return;
228   }
229   ```
230
23116. 销毁MediaKeySystem实例。
232
233    调用MediaKeySystem类中的destroy方法,销毁MediaKeySystem实例。接口调用失败会返回相应错误码,错误码类型参见[DrmErrorCode](../../reference/apis-drm-kit/js-apis-drm.md#drmerrorcode)。
234
235   ```ts
236   function destroy(mediaKeySyste: MediaKeySyste): void {
237     try {
238       mediaKeysystem.destroy();
239     } catch (err) {
240       let error = err as BusinessError;
241       console.error(`mediaKeysystem destroy ERROR: ${error}`);
242     }
243     return;
244   }
245   ```
246
24717. 状态监听。
248
249    在播放器应用开发过程中,可以随时监听MediaKeySystem信息状态,包括设备证书请求事件监听。
250
251    - 通过注册固定的keySystemRequired回调函数获取监听设备证书请求,MediaKeySystem创建成功时即可监听,有该事件返回结果则认为设备证书请求开始,不需要监听的时候使用off进行注销监听。
252
253   ```ts
254   function onRegisterkeySystemRequired(mediaKeysystem: drm.MediaKeySystem): void {
255     mediaKeysystem.on('keySystemRequired', (eventInfo: EventInfo) => {
256       console.log('keySystemRequired' + 'extra:' + eventInfo.extraInfo + ' data:' + eventInfo.info);
257     });
258   }
259   ```
260
261   ```ts
262   function unregisterkeySystemRequired(mediaKeysystem: drm.MediaKeySystem): void {
263     mediaKeysystem.off('keySystemRequired');
264   }
265   ```
266
267