• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# native_cencinfo.h
2
3## 概述
4
5声明用于设置解密参数的Native API。
6
7**引用文件:** <multimedia/player_framework/native_cencinfo.h>
8
9**库:** libnative_media_avcencinfo.so
10
11**系统能力:** SystemCapability.Multimedia.Media.Spliter
12
13**起始版本:** 12
14
15**相关模块:** [Multimedia_Drm](capi-multimedia-drm.md)
16
17## 汇总
18
19### 结构体
20
21| 名称 | typedef关键字 | 描述 |
22| -- | -- | -- |
23| [DrmSubsample](capi-multimedia-drm-drmsubsample.md) | DrmSubsample | Subsample结构类型定义。 |
24| [OH_AVBuffer](_core.md#oh_avbuffer) | OH_AVBuffer | AVBuffer结构。 |
25| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) | OH_AVCencInfo | AVCencInfo结构。 |
26
27### 枚举
28
29| 名称 | typedef关键字 | 描述 |
30| -- | -- | -- |
31| [DrmCencAlgorithm](#drmcencalgorithm) | DrmCencAlgorithm | Drm CENC算法类型。 |
32| [DrmCencInfoMode](#drmcencinfomode) | DrmCencInfoMode | 枚举类型,表示cencInfo中keyId/iv/subsample信息是否设置。 |
33
34### 函数
35
36| 名称 | 描述 |
37| -- | -- |
38| [OH_AVCencInfo *OH_AVCencInfo_Create()](#oh_avcencinfo_create) | 创建用于设置cencInfo的OH_AVCencInfo实例。 |
39| [OH_AVErrCode OH_AVCencInfo_Destroy(OH_AVCencInfo *cencInfo)](#oh_avcencinfo_destroy) | 销毁OH_AVCencInfo实例并释放内部资源。同一个实例只能销毁一次。在再次创建实例之前,不应使用该实例。建议在实例销毁成功后立即将实例指针设置为nullptr。 |
40| [OH_AVErrCode OH_AVCencInfo_SetAlgorithm(OH_AVCencInfo *cencInfo, enum DrmCencAlgorithm algo)](#oh_avcencinfo_setalgorithm) | 设置cencInfo加密算法。 |
41| [OH_AVErrCode OH_AVCencInfo_SetKeyIdAndIv(OH_AVCencInfo *cencInfo, uint8_t *keyId,uint32_t keyIdLen, uint8_t *iv, uint32_t ivLen)](#oh_avcencinfo_setkeyidandiv) | 设置cencInfo的keyId和iv。 |
42| [OH_AVErrCode OH_AVCencInfo_SetSubsampleInfo(OH_AVCencInfo *cencInfo, uint32_t encryptedBlockCount,uint32_t skippedBlockCount, uint32_t firstEncryptedOffset, uint32_t subsampleCount, DrmSubsample *subsamples)](#oh_avcencinfo_setsubsampleinfo) | 设置cencInfo的subsamples信息。 |
43| [OH_AVErrCode OH_AVCencInfo_SetMode(OH_AVCencInfo *cencInfo, enum DrmCencInfoMode mode)](#oh_avcencinfo_setmode) | 设置cencInfo的模式。 |
44| [OH_AVErrCode OH_AVCencInfo_SetAVBuffer(OH_AVCencInfo *cencInfo, OH_AVBuffer *buffer)](#oh_avcencinfo_setavbuffer) | 将cencInfo设置到AVBuffer。 |
45
46### 宏定义
47
48| 名称 | 描述 |
49| -------- | -------- |
50| DRM_KEY_ID_SIZE   16 | Key id长度为16字节。<br>**起始版本:** 12 |
51| DRM_KEY_IV_SIZE   16 | Iv长度为16字节。<br>**起始版本:** 12 |
52| DRM_KEY_MAX_SUB_SAMPLE_NUM   64 | 最大的Subsample数量为64个。<br>**起始版本:** 12
53 |
54
55## 枚举类型说明
56
57### DrmCencAlgorithm
58
59```
60enum DrmCencAlgorithm
61```
62
63**描述**
64
65Drm CENC算法类型。
66
67**起始版本:** 12
68
69| 枚举项 | 描述 |
70| -- | -- |
71| DRM_ALG_CENC_UNENCRYPTED = 0x0 | 不加密算法。 |
72| DRM_ALG_CENC_AES_CTR = 0x1 | AES CTR算法。 |
73| DRM_ALG_CENC_AES_WV = 0x2 | AES WV算法。 |
74| DRM_ALG_CENC_AES_CBC = 0x3 | AES CBC算法。 |
75| DRM_ALG_CENC_SM4_CBC = 0x4 | SM4 CBC算法。 |
76| DRM_ALG_CENC_SM4_CTR = 0x5 | SM4 CTR算法。 |
77
78### DrmCencInfoMode
79
80```
81enum DrmCencInfoMode
82```
83
84**描述**
85
86枚举类型,表示cencInfo中keyId/iv/subsample信息是否设置。
87
88**起始版本:** 12
89
90| 枚举项 | 描述 |
91| -- | -- |
92| DRM_CENC_INFO_KEY_IV_SUBSAMPLES_SET = 0x0 | keyId/iv/subsample信息已设置。 |
93| DRM_CENC_INFO_KEY_IV_SUBSAMPLES_NOT_SET = 0x1 | keyId/iv/subsample信息未设置。 |
94
95
96## 函数说明
97
98### OH_AVCencInfo_Create()
99
100```
101OH_AVCencInfo *OH_AVCencInfo_Create()
102```
103
104**描述**
105
106创建用于设置cencInfo的OH_AVCencInfo实例。
107
108**系统能力:** SystemCapability.Multimedia.Media.Spliter
109
110**起始版本:** 12
111
112**返回:**
113
114| 类型 | 说明 |
115| -- | -- |
116| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) * | 返回新创建的OH_AVCencInfo对象。如果返回nullptr,则表示创建对象失败。<br> 可能失败的原因:应用程序地址空间已满,或者对象中的数据初始化失败。 |
117
118### OH_AVCencInfo_Destroy()
119
120```
121OH_AVErrCode OH_AVCencInfo_Destroy(OH_AVCencInfo *cencInfo)
122```
123
124**描述**
125
126销毁OH_AVCencInfo实例并释放内部资源。<br>同一个实例只能销毁一次。在再次创建实例之前,不应使用该实例。建议在实例销毁成功后立即将实例指针设置为nullptr。
127
128**系统能力:** SystemCapability.Multimedia.Media.Spliter
129
130**起始版本:** 12
131
132
133**参数:**
134
135| 参数项 | 描述 |
136| -- | -- |
137| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) *cencInfo | 指向OH_AVCencInfo实例的指针。 |
138
139**返回:**
140
141| 类型 | 说明 |
142| -- | -- |
143| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>        AV_ERR_INVALID_VAL:cencInfo为空。 |
144
145### OH_AVCencInfo_SetAlgorithm()
146
147```
148OH_AVErrCode OH_AVCencInfo_SetAlgorithm(OH_AVCencInfo *cencInfo, enum DrmCencAlgorithm algo)
149```
150
151**描述**
152
153设置cencInfo加密算法。
154
155**系统能力:** SystemCapability.Multimedia.Media.Spliter
156
157**起始版本:** 12
158
159
160**参数:**
161
162| 参数项 | 描述 |
163| -- | -- |
164| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) *cencInfo | 指向OH_AVCencInfo实例的指针。 |
165| [enum DrmCencAlgorithm](#drmcencalgorithm) algo | 加密算法模式。 |
166
167**返回:**
168
169| 类型 | 说明 |
170| -- | -- |
171| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:cencInfo为空。 |
172
173### OH_AVCencInfo_SetKeyIdAndIv()
174
175```
176OH_AVErrCode OH_AVCencInfo_SetKeyIdAndIv(OH_AVCencInfo *cencInfo, uint8_t *keyId,uint32_t keyIdLen, uint8_t *iv, uint32_t ivLen)
177```
178
179**描述**
180
181设置cencInfo的keyId和iv。
182
183**系统能力:** SystemCapability.Multimedia.Media.Spliter
184
185**起始版本:** 12
186
187
188**参数:**
189
190| 参数项 | 描述 |
191| -- | -- |
192| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) *cencInfo | 指向OH_AVCencInfo实例的指针。 |
193| uint8_t *keyId | Key标识。 |
194| uint32_t keyIdLen | Key标识长度。 |
195| uint8_t *iv | 初始化向量。 |
196| uint32_t ivLen | 初始化向量长度。 |
197
198**返回:**
199
200| 类型 | 说明 |
201| -- | -- |
202| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:cencInfo为空、keyId为空、keyIdLen != DRM_KEY_ID_SIZE、iv是空、ivLen != DRM_KEY_IV_SIZE、keyId拷贝失败,或者iv拷贝失败。 |
203
204### OH_AVCencInfo_SetSubsampleInfo()
205
206```
207OH_AVErrCode OH_AVCencInfo_SetSubsampleInfo(OH_AVCencInfo *cencInfo, uint32_t encryptedBlockCount,uint32_t skippedBlockCount, uint32_t firstEncryptedOffset, uint32_t subsampleCount, DrmSubsample *subsamples)
208```
209
210**描述**
211
212设置cencInfo的subsamples信息。
213
214**系统能力:** SystemCapability.Multimedia.Media.Spliter
215
216**起始版本:** 12
217
218
219**参数:**
220
221| 参数项 | 描述 |
222| -- | -- |
223| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) *cencInfo | 指向OH_AVCencInfo实例的指针。 |
224| uint32_t encryptedBlockCount | 加密块的数量。 |
225| uint32_t skippedBlockCount | 不加密块的数量。 |
226| uint32_t firstEncryptedOffset | 第一个加密有效负载的偏移量。 |
227| uint32_t subsampleCount | Subsample数量。 |
228| [DrmSubsample](capi-multimedia-drm-drmsubsample.md) *subsamples | Subsample内容集。 |
229
230**返回:**
231
232| 类型 | 说明 |
233| -- | -- |
234| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:cencInfo为空、subsampleCount > DRM_KEY_MAX_SUB_SAMPLE_NUM,或者subsamples为空。 |
235
236### OH_AVCencInfo_SetMode()
237
238```
239OH_AVErrCode OH_AVCencInfo_SetMode(OH_AVCencInfo *cencInfo, enum DrmCencInfoMode mode)
240```
241
242**描述**
243
244设置cencInfo的模式。
245
246**系统能力:** SystemCapability.Multimedia.Media.Spliter
247
248**起始版本:** 12
249
250
251**参数:**
252
253| 参数项 | 描述 |
254| -- | -- |
255| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) *cencInfo | 指向OH_AVCencInfo实例的指针。 |
256| [enum DrmCencInfoMode](#drmcencinfomode) mode | cencInfo模式,指示是否设置了keyId/iv/subsample。 |
257
258**返回:**
259
260| 类型 | 说明 |
261| -- | -- |
262| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:cencInfo为空。 |
263
264### OH_AVCencInfo_SetAVBuffer()
265
266```
267OH_AVErrCode OH_AVCencInfo_SetAVBuffer(OH_AVCencInfo *cencInfo, OH_AVBuffer *buffer)
268```
269
270**描述**
271
272将cencInfo设置到AVBuffer。
273
274**系统能力:** SystemCapability.Multimedia.Media.Spliter
275
276**起始版本:** 12
277
278
279**参数:**
280
281| 参数项 | 描述 |
282| -- | -- |
283| [OH_AVCencInfo](capi-multimedia-drm-oh-avcencinfo.md) *cencInfo | 指向OH_AVCencInfo实例的指针。 |
284| [OH_AVBuffer](_core.md#oh_avbuffer) *buffer | 携带数据的帧buffer。 |
285
286**返回:**
287
288| 类型 | 说明 |
289| -- | -- |
290| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:cencInfo为空、buffer为空、buffer->buffer_为空,或者buffer->buffer_->meta_为空。 |
291
292
293