1# AVDemuxer 2 3 4## 概述 5 6AVDemuxer模块提供用于音视频解封装功能的函数。 7 8**系统能力:** SystemCapability.Multimedia.Media.Spliter 9 10**起始版本:** 10 11 12 13## 汇总 14 15 16### 文件 17 18| 名称 | 描述 | 19| -------- | -------- | 20| [native_avdemuxer.h](native__avdemuxer_8h.md) | 声明用于音视频解封装的Native API。<br>**引用文件**:<multimedia/player_framework/native_avdemuxer.h><br>**库**:libnative_media_avdemuxer.so | 21 22 23### 函数 24 25| 名称 | 描述 | 26| -------- | -------- | 27| OH_AVDemuxer \* [OH_AVDemuxer_CreateWithSource](#oh_avdemuxer_createwithsource) ([OH_AVSource](_a_v_source.md#oh_avsource) \*source) | 通过source实例对象创建OH_AVDemuxer实例对象。 | 28| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_Destroy](#oh_avdemuxer_destroy) (OH_AVDemuxer \*demuxer) | 销毁OH_AVDemuxer实例并清理内部资源。 | 29| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_SelectTrackByID](#oh_avdemuxer_selecttrackbyid) (OH_AVDemuxer \*demuxer, uint32_t trackIndex) | 选中指定轨道,解封装器将会从该轨道中读取数据。 | 30| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_UnselectTrackByID](#oh_avdemuxer_unselecttrackbyid) (OH_AVDemuxer \*demuxer, uint32_t trackIndex) | 取消选择指定轨道,未选中的轨道的数据不会被解封装器读取。 | 31| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_ReadSample](#oh_avdemuxer_readsample) (OH_AVDemuxer \*demuxer, uint32_t trackIndex, [OH_AVMemory](_core.md#oh_avmemory) \*sample, [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) \*info) | 从选中轨道中获取当前位置压缩帧及相关信息。 | 32| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_ReadSampleBuffer](#oh_avdemuxer_readsamplebuffer) (OH_AVDemuxer \*demuxer, uint32_t trackIndex, [OH_AVBuffer](_core.md#oh_avbuffer) \*sample) | 从选中轨道中获取当前位置压缩帧及相关信息。 | 33| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_SeekToTime](#oh_avdemuxer_seektotime) (OH_AVDemuxer \*demuxer, int64_t millisecond, [OH_AVSeekMode](_codec_base.md#oh_avseekmode) mode) | 根据设定的跳转模式,将所有选中的轨道到指定时间附近。 | 34| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_SetMediaKeySystemInfoCallback](#oh_avdemuxer_setmediakeysysteminfocallback) (OH_AVDemuxer \*demuxer, DRM_MediaKeySystemInfoCallback callback) | 设置异步DRM信息回调函数。 | 35| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_GetMediaKeySystemInfo](#oh_avdemuxer_getmediakeysysteminfo) (OH_AVDemuxer \*demuxer, DRM_MediaKeySystemInfo \*mediaKeySystemInfo) | 获取DRM信息。 | 36 37 38## 函数说明 39 40 41### OH_AVDemuxer_CreateWithSource() 42 43``` 44OH_AVDemuxer* OH_AVDemuxer_CreateWithSource (OH_AVSource *source) 45``` 46 47**描述** 48 49通过source实例对象创建OH_AVDemuxer实例对象。可以通过调用[OH_AVDemuxer_Destroy](#oh_avdemuxer_destroy)释放实例。 50 51**系统能力:** SystemCapability.Multimedia.Media.Spliter 52 53**起始版本:** 10 54 55**参数:** 56 57| 名称 | 描述 | 58| -------- | -------- | 59| source | 指向OH_AVSource实例的指针。 | 60 61**返回:** 62 63返回一个指向OH_AVDemuxer实例的指针。 64 65 66### OH_AVDemuxer_Destroy() 67 68``` 69OH_AVErrCode OH_AVDemuxer_Destroy (OH_AVDemuxer *demuxer) 70``` 71 72**描述** 73 74销毁OH_AVDemuxer实例并清理内部资源。同一实例只能被销毁一次。 75 76注意,销毁的实例在被重新创建之前不能再被使用。建议实例销毁成功后将指针置为NULL。 77 78**系统能力:** SystemCapability.Multimedia.Media.Spliter 79 80**起始版本:** 10 81 82**参数:** 83 84| 名称 | 描述 | 85| -------- | -------- | 86| demuxer | 指向OH_AVDemuxer实例的指针。 | 87 88**返回:** 89 90执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode) 91 92 93### OH_AVDemuxer_GetMediaKeySystemInfo() 94 95``` 96OH_AVErrCode OH_AVDemuxer_GetMediaKeySystemInfo (OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo) 97``` 98**描述** 99 100获取DRM信息。 101 102**系统能力:** SystemCapability.Multimedia.Media.Spliter 103 104**起始版本:** 11 105 106**参数:** 107 108| 名称 | 描述 | 109| -------- | -------- | 110| demuxer | 指向OH_AVDemuxer实例的指针。 | 111| mediaKeySystemInfo | 指向DRM信息的指针,请参阅[DRM_MediaKeySystemInfo](../apis-drm-kit/_d_r_m___media_key_system_info.md)。 | 112 113**返回:** 114 115执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 116 117 118### OH_AVDemuxer_ReadSample() 119 120``` 121OH_AVErrCode OH_AVDemuxer_ReadSample (OH_AVDemuxer *demuxer, uint32_t trackIndex, OH_AVMemory *sample, OH_AVCodecBufferAttr *info) 122``` 123 124**描述** 125 126从选中轨道中获取当前位置压缩帧及相关信息。 127 128注意,读取轨道帧数据前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。 129 130**系统能力:** SystemCapability.Multimedia.Media.Spliter 131 132**起始版本:** 10 133 134**废弃版本:** 11 135 136**替代接口:**[OH_AVDemuxer_ReadSampleBuffer](#oh_avdemuxer_readsamplebuffer) 137 138**参数:** 139 140| 名称 | 描述 | 141| -------- | -------- | 142| demuxer | 指向OH_AVDemuxer实例的指针。 | 143| trackIndex | 本次读取压缩帧的轨道的索引。 | 144| sample | 指向OH_AVMemory实例的指针,用于储存压缩帧数据。 | 145| info | 指向OH_AVCodecBufferAttr实例的指针,用于储存压缩帧的相关信息。 | 146 147**返回:** 148 149执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 150 151 152### OH_AVDemuxer_ReadSampleBuffer() 153 154``` 155OH_AVErrCode OH_AVDemuxer_ReadSampleBuffer (OH_AVDemuxer *demuxer, uint32_t trackIndex, OH_AVBuffer *sample) 156``` 157 158**描述** 159 160从选中轨道中获取当前位置压缩帧及相关信息。 161 162注意,读取轨道帧数据前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。 163 164**系统能力:** SystemCapability.Multimedia.Media.Spliter 165 166**起始版本:** 11 167 168**参数:** 169 170| 名称 | 描述 | 171| -------- | -------- | 172| demuxer | 指向OH_AVDemuxer实例的指针。 | 173| trackIndex | 本次读取压缩帧的轨道的索引。 | 174| sample | 指向OH_AVBuffer实例的指针,用于储存压缩帧数据以及相关信息。 | 175 176**返回:** 177 178执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 179 180 181### OH_AVDemuxer_SeekToTime() 182 183``` 184OH_AVErrCode OH_AVDemuxer_SeekToTime (OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode) 185``` 186 187**描述** 188 189根据设定的跳转模式,将所有选中的轨道到指定时间附近。 190 191**系统能力:** SystemCapability.Multimedia.Media.Spliter 192 193**起始版本:** 10 194 195**参数:** 196 197| 名称 | 描述 | 198| -------- | -------- | 199| demuxer | 指向OH_AVDemuxer实例的指针。 | 200| millisecond | 期望跳转位置对应的时间,单位为毫秒,该时间戳是相对文件开始的位置。 | 201| mode | 跳转的模式,参考[OH_AVSeekMode](_codec_base.md#oh_avseekmode)。 | 202 203**返回:** 204 205执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 206 207 208### OH_AVDemuxer_SelectTrackByID() 209 210``` 211OH_AVErrCode OH_AVDemuxer_SelectTrackByID (OH_AVDemuxer *demuxer, uint32_t trackIndex) 212``` 213 214**描述** 215 216选中指定轨道,解封装器将会从该轨道中读取数据。 217 218注意,通过多次调用接口并传入不同轨道的索引来选中多个轨道。 调用OH_AVDemuxer_ReadSample时只会读取被选中的轨道中数据,同一轨道被选择多次时,接口会返回AV_ERR_OK,并且只会生效一次。 219 220**系统能力:** SystemCapability.Multimedia.Media.Spliter 221 222**起始版本:** 10 223 224**参数:** 225 226| 名称 | 描述 | 227| -------- | -------- | 228| demuxer | 指向OH_AVDemuxer实例的指针。 | 229| trackIndex | 需选择的轨道的索引。 | 230 231**返回:** 232 233执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 234 235 236### OH_AVDemuxer_SetMediaKeySystemInfoCallback() 237 238``` 239OH_AVErrCode OH_AVDemuxer_SetMediaKeySystemInfoCallback (OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfoCallback callback) 240``` 241**描述** 242 243设置异步DRM信息回调函数。 244 245**系统能力:** SystemCapability.Multimedia.Media.Spliter 246 247**起始版本:** 11 248 249**参数:** 250 251| 名称 | 描述 | 252| -------- | -------- | 253| demuxer | 指向OH_AVDemuxer实例的指针。 | 254| callback | 回调函数,详见[DRM_MediaKeySystemInfoCallback](../apis-drm-kit/_drm.md#drm_mediakeysysteminfocallback)。 | 255 256**返回:** 257 258执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 259 260 261### OH_AVDemuxer_UnselectTrackByID() 262 263``` 264OH_AVErrCode OH_AVDemuxer_UnselectTrackByID (OH_AVDemuxer *demuxer, uint32_t trackIndex) 265``` 266 267**描述** 268 269取消选择指定轨道,未选中的轨道的数据不会被解封装器读取。 270 271注意,通过多次调用接口并传入不同轨道的索引来取消对多个轨道的选择。 同一轨道被多次取消选择时,接口会返回AV_ERR_OK,并且只会生效一次。 272 273**系统能力:** SystemCapability.Multimedia.Media.Spliter 274 275**起始版本:** 10 276 277**参数:** 278 279| 名称 | 描述 | 280| -------- | -------- | 281| demuxer | 指向OH_AVDemuxer实例的指针。 | 282| trackIndex | 需取消选择的轨道的索引。 | 283 284**返回:** 285 286执行成功返回AV_ERR_OK, 否则返回具体错误码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。 287