# AVDemuxer
## Overview
The AVDemuxer module provides functions for audio and video decapsulation.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Since**
10
## Summary
### File
| Name| Description|
| -------- | -------- |
| [native_avdemuxer.h](native__avdemuxer_8h.md) | Declares the native APIs used for audio and video decapsulation.
**File to include**:
**Library**: libnative_media_avdemuxer.so|
### Functions
| Name| Description|
| -------- | -------- |
| \*[OH_AVDemuxer_CreateWithSource](#oh_avdemuxer_createwithsource) (OH_AVSource \*source) | Creates an **OH_AVDemuxer** instance based on an **OH_AVSource** instance.|
| [OH_AVDemuxer_Destroy](#oh_avdemuxer_destroy) (OH_AVDemuxer \*demuxer) | Destroys an **OH_AVDemuxer** instance and clears internal resources.|
| [OH_AVDemuxer_SelectTrackByID](#oh_avdemuxer_selecttrackbyid) (OH_AVDemuxer \*demuxer, uint32_t trackIndex) | Selects a track, from which the demuxer reads data.|
| [OH_AVDemuxer_UnselectTrackByID](#oh_avdemuxer_unselecttrackbyid) (OH_AVDemuxer \*demuxer, uint32_t trackIndex) | Deselects a track. The demuxer no longer reads data from a track after it is deselected.|
| [OH_AVDemuxer_ReadSample](#oh_avdemuxer_readsample) (OH_AVDemuxer \*demuxer, uint32_t trackIndex, OH_AVMemory \*sample, OH_AVCodecBufferAttr \*info) | Obtains the compressed frame and related information at the current position from the selected track.|
| [OH_AVDemuxer_SeekToTime](#oh_avdemuxer_seektotime) (OH_AVDemuxer \*demuxer, int64_t millisecond, OH_AVSeekMode mode) | Seeks to the specified time for all the selected tracks based on a seek mode.|
## Function Description
### OH_AVDemuxer_CreateWithSource()
```
OH_AVDemuxer* OH_AVDemuxer_CreateWithSource (OH_AVSource *source)
```
**Description**
Creates an **OH_AVDemuxer** instance based on an **OH_AVSource** instance. You can release the instance by calling **OH_AVDemuxer_Destroy**.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Parameters**
| Name| Description|
| -------- | -------- |
| source | Pointer to an **OH_AVSource** instance.|
**Returns**
Returns the pointer to an **OH_AVDemuxer** instance.
**Since**
10
### OH_AVDemuxer_Destroy()
```
OH_AVErrCode OH_AVDemuxer_Destroy (OH_AVDemuxer *demuxer)
```
**Description**
Destroys an **OH_AVDemuxer** instance and clears internal resources. An instance can be destroyed only once.
The destroyed instance cannot be used until it is re-created. You are advised to set the pointer to **NULL** after the instance is destroyed.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Parameters**
| Name| Description|
| -------- | -------- |
| demuxer | Pointer to an **OH_AVDemuxer** instance.|
**Returns**
Returns **AV_ERR_OK** if the operation is successful; returns an error code defined in [OH_AVErrCode](_core.md#oh_averrcode) otherwise.
**Since**
10
### OH_AVDemuxer_ReadSample()
```
OH_AVErrCode OH_AVDemuxer_ReadSample (OH_AVDemuxer *demuxer, uint32_t trackIndex, OH_AVMemory *sample, OH_AVCodecBufferAttr *info)
```
**Description**
Obtains the compressed frame and related information at the current position from the selected track.
You must select a track before reading data. After this API is called, the demuxer automatically proceeds to the next frame.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Parameters**
| Name| Description|
| -------- | -------- |
| demuxer | Pointer to an **OH_AVDemuxer** instance.|
| trackIndex | Index of the track from which the compressed frame is to be read.|
| sample | Pointer to the **OH_AVMemory** instance for storing the compressed frame data.|
| info | Pointer to the **OH_AVCodecBufferAttr** instance for storing the compressed frame information.|
**Returns**
Returns **AV_ERR_OK** if the operation is successful; returns an error code defined in [OH_AVErrCode](_core.md#oh_averrcode) otherwise.
**Since**
10
### OH_AVDemuxer_SeekToTime()
```
OH_AVErrCode OH_AVDemuxer_SeekToTime (OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode)
```
**Description**
Seeks to the specified time for all the selected tracks based on a seek mode.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Parameters**
| Name| Description|
| -------- | -------- |
| demuxer | Pointer to an **OH_AVDemuxer** instance.|
| millisecond | Time to seek to, in milliseconds. The timestamp is relative to the start position of the file.|
| mode | Seek mode. For details, see **OH_AVSeekMode**.|
**Returns**
Returns **AV_ERR_OK** if the operation is successful; returns an error code defined in [OH_AVErrCode](_core.md#oh_averrcode) otherwise.
**Since**
10
### OH_AVDemuxer_SelectTrackByID()
```
OH_AVErrCode OH_AVDemuxer_SelectTrackByID (OH_AVDemuxer *demuxer, uint32_t trackIndex)
```
**Description**
Selects a track, from which the demuxer reads data.
You can select multiple tracks by calling this API multiple times, with a different track index passed in each time.
When **OH_AVDemuxer_ReadSample** is called, only the data in the selected track is read. If the same track is selected multiple times, **AV_ERR_OK** is returned and the API call takes effect only once.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Parameters**
| Name| Description|
| -------- | -------- |
| demuxer | Pointer to an **OH_AVDemuxer** instance.|
| trackIndex | Index of the track.|
**Returns**
Returns **AV_ERR_OK** if the operation is successful; returns an error code defined in [OH_AVErrCode](_core.md#oh_averrcode) otherwise.
**Since**
10
### OH_AVDemuxer_UnselectTrackByID()
```
OH_AVErrCode OH_AVDemuxer_UnselectTrackByID (OH_AVDemuxer *demuxer, uint32_t trackIndex)
```
**Description**
Deselects a track. The demuxer no longer reads data from a track after it is deselected.
You can deselect multiple tracks by calling this API multiple times, with a different track index passed in each time.
If the same track is deselected multiple times, **AV_ERR_OK** is returned and the API call takes effect only once.
\@syscap SystemCapability.Multimedia.Media.Spliter
**Parameters**
| Name| Description|
| -------- | -------- |
| demuxer | Pointer to an **OH_AVDemuxer** instance.|
| trackIndex | Index of the track.|
**Returns**
Returns **AV_ERR_OK** if the operation is successful; returns an error code defined in [OH_AVErrCode](_core.md#oh_averrcode) otherwise.
**Since**
10