1# AVSource 2 3 4## 概述 5 6AVSource模块提供用于构造媒体资源对象功能的函数。 7 8**系统能力:** SystemCapability.Multimedia.Media.Spliter 9 10**相关示例:** [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) 11 12**起始版本:** 10 13 14 15## 汇总 16 17 18### 文件 19 20| 名称 | 描述 | 21| -------- | -------- | 22| [native_avsource.h](native__avsource_8h.md) | 声明用于音视频媒体数据解析的接口。 | 23 24 25### 类型定义 26 27| 名称 | 描述 | 28| -------- | -------- | 29| typedef struct [OH_AVSource](#oh_avsource) [OH_AVSource](#oh_avsource) | 为媒体资源接口定义native层对象。 | 30 31 32### 函数 33 34| 名称 | 描述 | 35| -------- | -------- | 36| [OH_AVSource](#oh_avsource) \* [OH_AVSource_CreateWithDataSource](#oh_avsource_createwithdatasource) ([OH_AVDataSource](_o_h___a_v_data_source.md) \*dataSource) | 为用户自定义数据源的资源对象创建OH_AVSource实例,可以通过调用OH_AVSource_Destroy接口释放实例。 | 37| [OH_AVSource](#oh_avsource) \* [OH_AVSource_CreateWithDataSourceExt](#oh_avsource_createwithdatasourceext) ([OH_AVDataSourceExt](_o_h___a_v_data_source_ext.md) \*dataSource, void *userData) | 为用户自定义数据源的资源对象创建OH_AVSource实例,可以通过调用OH_AVSource_Destroy接口释放实例。回调支持通过userData传递用户自定义数据。 | 38| [OH_AVSource](#oh_avsource) \* [OH_AVSource_CreateWithURI](#oh_avsource_createwithuri) (char \*uri) | 为统一资源标识符对应的资源对象创建OH_AVSource实例。 | 39| [OH_AVSource](#oh_avsource) \* [OH_AVSource_CreateWithFD](#oh_avsource_createwithfd) (int32_t fd, int64_t offset, int64_t size) | 为文件描述符对应的资源对象创建OH_AVSource实例。 | 40| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVSource_Destroy](#oh_avsource_destroy) ([OH_AVSource](#oh_avsource) \*source) | 销毁OH_AVSource实例并清理内部资源。 | 41| [OH_AVFormat](_core.md#oh_avformat) \* [OH_AVSource_GetSourceFormat](#oh_avsource_getsourceformat) ([OH_AVSource](#oh_avsource) \*source) | 获取媒体资源文件的基础信息。 | 42| [OH_AVFormat](_core.md#oh_avformat) \* [OH_AVSource_GetTrackFormat](#oh_avsource_gettrackformat) ([OH_AVSource](#oh_avsource) \*source, uint32_t trackIndex) | 获取轨道的基础信息。 | 43| [OH_AVFormat](_core.md#oh_avformat) \* [OH_AVSource_GetCustomMetadataFormat](#oh_avsource_getcustommetadataformat) ([OH_AVSource](#oh_avsource) \*source) | 获取自定义元数据的基础信息。 | 44 45 46## 类型定义说明 47 48 49### OH_AVSource 50 51``` 52typedef struct OH_AVSource OH_AVSource 53``` 54**描述** 55为媒体资源接口定义native层对象。 56 57**起始版本:** 10 58 59 60## 函数说明 61 62 63### OH_AVSource_CreateWithDataSource() 64 65``` 66OH_AVSource* OH_AVSource_CreateWithDataSource (OH_AVDataSource * dataSource) 67``` 68**描述** 69为用户自定义数据源的资源对象创建OH_AVSource实例,可以通过调用OH_AVSource_Destroy接口释放实例。 70 71**系统能力:** SystemCapability.Multimedia.Media.Spliter 72 73**起始版本:** 12 74 75**参数:** 76 77| 名称 | 描述 | 78| -------- | -------- | 79| dataSource | 用户自定义数据源。 | 80 81**返回:** 82 83如果执行成功,则返回一个指向OH_AVSource实例的指针,否则返回NULL。 84 85可能的故障原因: 861. dataSource为nullptr; 872. dataSource->size == 0; 883. 设置数据源失败; 894. 内存不足; 905. 解码器引擎为nullptr; 916. dataSource->readAt == nullptr。 92 93 94### OH_AVSource_CreateWithDataSourceExt() 95 96``` 97OH_AVSource *OH_AVSource_CreateWithDataSourceExt(OH_AVDataSourceExt *dataSource, void *userData) 98``` 99**描述** 100为用户自定义数据源的资源对象创建OH_AVSource实例,可以通过调用OH_AVSource_Destroy接口释放实例。回调支持通过userData传递用户自定义数据。 101 102**系统能力:** SystemCapability.Multimedia.Media.Spliter 103 104**起始版本:** 20 105 106**参数:** 107 108| 名称 | 描述 | 109| -------- | -------- | 110| dataSource | 指向数据源结构体的指针,该结构体可用于获取输入数据。 | 111| userData | 指向用户自定义数据的指针。 | 112 113**返回:** 114 115如果执行成功,则返回一个指向OH_AVSource实例的指针,否则返回NULL。 116 117可能的故障原因: 1181. dataSource为nullptr。 1192. dataSource->size == 0。 1203. 设置数据源失败。 1214. 内存不足。 1225. 解码器引擎为nullptr。 1236. dataSource->readAt == nullptr。 124 125 126### OH_AVSource_CreateWithFD() 127 128``` 129OH_AVSource* OH_AVSource_CreateWithFD (int32_t fd, int64_t offset, int64_t size) 130``` 131**描述** 132为文件描述符对应的资源对象创建OH_AVSource实例。可以通过调用OH_AVSource_Destroy接口释放实例。 133 134该接口如果传入offset不为文件起始位置,或size不为文件大小时,可能会因数据获取不完整导致 OH_AVSource创建失败、后续解封装失败等未定义错误。 135 136**系统能力:** SystemCapability.Multimedia.Media.Spliter 137 138**起始版本:** 10 139 140**参数:** 141 142| 名称 | 描述 | 143| -------- | -------- | 144| fd | 数据资源的文件描述符。 | 145| offset | 开始读取数据的位置。 | 146| size | 文件的字节数大小。 | 147 148**返回:** 149 150执行成功返回一个指向OH_AVSource实例的指针,否则返回NULL。 151 152可能的故障原因: 153 1541. fd无效; 1552. 传入offset不是文件起始位置; 1563. size错误; 1574. 资源无效; 1585. 文件格式不支持。 159 160 161### OH_AVSource_CreateWithURI() 162 163``` 164OH_AVSource* OH_AVSource_CreateWithURI (char *uri) 165``` 166**描述** 167为统一资源标识符对应的资源对象创建OH_AVSource实例,可以通过调用OH_AVSource_Destroy接口释放实例。 168 169**系统能力:** SystemCapability.Multimedia.Media.Spliter 170 171**起始版本:** 10 172 173**参数:** 174 175| 名称 | 描述 | 176| -------- | -------- | 177| uri | 远程媒体资源的统一资源标识符。 | 178 179**返回:** 180 181执行成功返回一个指向OH_AVSource实例的指针,否则返回NULL。 182 183可能的故障原因: 184 1851. 网络异常; 1862. 资源无效; 1873. 文件格式不支持。 188 189 190### OH_AVSource_Destroy() 191 192``` 193OH_AVErrCode OH_AVSource_Destroy (OH_AVSource *source) 194``` 195**描述** 196销毁OH_AVSource实例并清理内部资源。同一实例只能被销毁一次。销毁的实例在被重新创建之前不能再被使用。建议实例销毁成功后将指针置为NULL。 197 198**系统能力:** SystemCapability.Multimedia.Media.Spliter 199 200**起始版本:** 10 201 202**参数:** 203 204| 名称 | 描述 | 205| -------- | -------- | 206| source | 指向OH_AVSource实例的指针。 | 207 208**返回:** 209 210返回函数结果: 211 212AV_ERR_OK:操作成功。 213 214AV_ERR_INVALID_VAL: 215 216 1. source指针无效; 217 2. 空指针或非OH_AVSource实例。 218 219 220### OH_AVSource_GetCustomMetadataFormat() 221 222``` 223OH_AVFormat *OH_AVSource_GetCustomMetadataFormat(OH_AVSource *source) 224``` 225 226**描述** 227 228获取自定义元数据的基础信息。 229 230需要注意的是,指向的OH_AVFormat实例在生命周期结束时需开发者通过调用接口[OH_AVFormat_Destroy](_core.md#oh_avformat_destroy)释放。 231 232**系统能力:** SystemCapability.Multimedia.Media.Spliter 233 234**起始版本:** 18 235 236**参数:** 237 238| 名称 | 描述 | 239| -------- | -------- | 240| source | 指向OH_AVSource实例的指针。 | 241 242**返回:** 243 244执行成功返回元数据的基础信息,否则返回NULL。 245 246可能的故障原因: 247 2481. source指针无效; 2492. 空指针或非OH_AVSource实例; 2503. source没有初始化。 251 252 253### OH_AVSource_GetSourceFormat() 254 255``` 256OH_AVFormat* OH_AVSource_GetSourceFormat (OH_AVSource *source) 257``` 258**描述** 259获取媒体资源文件的基础信息。 260 261需要注意的是,指向的OH_AVFormat实例在生命周期结束时需开发者通过调用接口[OH_AVFormat_Destroy](_core.md#oh_avformat_destroy)释放。 262 263**系统能力:** SystemCapability.Multimedia.Media.Spliter 264 265**起始版本:** 10 266 267**参数:** 268 269| 名称 | 描述 | 270| -------- | -------- | 271| source | 指向OH_AVSource实例的指针。 | 272 273**返回:** 274 275执行成功返回文件的基础信息,否则返回NULL。 276 277可能的故障原因: 278 2791. source指针无效; 2802. 空指针或非OH_AVSource实例; 2813. source没有初始化。 282 283 284### OH_AVSource_GetTrackFormat() 285 286``` 287OH_AVFormat* OH_AVSource_GetTrackFormat (OH_AVSource *source, uint32_t trackIndex) 288``` 289**描述** 290获取轨道的基础信息。 291 292需要注意的是,指向的OH_AVFormat实例在生命周期结束时需开发者通过调用接口[OH_AVFormat_Destroy](_core.md#oh_avformat_destroy)释放。 293 294**系统能力:** SystemCapability.Multimedia.Media.Spliter 295 296**起始版本:** 10 297 298**参数:** 299 300| 名称 | 描述 | 301| -------- | -------- | 302| source | 指向OH_AVSource实例的指针。 | 303| trackIndex | 需要获取信息的轨道的索引。 | 304 305**返回:** 306 307执行成功返回轨道的基础信息,否则返回NULL。 308 309可能的故障原因: 310 3111. source指针无效,空指针或非OH_AVSource实例; 3122. 轨道的索引超出范围; 3133. source没有初始化。 314