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