• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# AVDemuxer
2
3
4## Overview
5
6The AVDemuxer module provides the APIs for extracting samples from media streams.
7
8**System capability**: SystemCapability.Multimedia.Media.Spliter
9
10**Since**: 10
11
12
13## Summary
14
15
16### File
17
18| Name| Description|
19| -------- | -------- |
20| [native_avdemuxer.h](native__avdemuxer_8h.md) | Declares the APIs for parsing audio and video media data.|
21
22### Types
23
24| Name| Description|
25| -------- | -------- |
26| typedef void(* [DRM_MediaKeySystemInfoCallback](#drm_mediakeysysteminfocallback)) (DRM_MediaKeySystemInfo *mediaKeySystemInfo) | Defines a pointer to the callback function for [DRM_MediaKeySystemInfo](../apis-drm-kit/_d_r_m___media_key_system_info.md). No demuxer instance is returned. This callback function applies to the scenario where a single demuxer instance is used. You need to call [OH_AVDemuxer_SetMediaKeySystemInfoCallback](#oh_avdemuxer_setmediakeysysteminfocallback) to set the callback function as a callback. |
27| typedef void(* [Demuxer_MediaKeySystemInfoCallback](#demuxer_mediakeysysteminfocallback)) (OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)| Defines a pointer to the callback function for [DRM_MediaKeySystemInfo](../apis-drm-kit/_d_r_m___media_key_system_info.md). A demuxer instance is returned. This callback function applies to the scenario where multiple demuxer instances are used. You need to call [OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback](#oh_avdemuxer_setdemuxermediakeysysteminfocallback) to set the callback function as a callback. This callback function is recommended. |
28
29
30### Functions
31
32| Name| Description|
33| -------- | -------- |
34| OH_AVDemuxer \* [OH_AVDemuxer_CreateWithSource](#oh_avdemuxer_createwithsource) ([OH_AVSource](_a_v_source.md#oh_avsource) \*source) | Creates an **OH_AVDemuxer** instance based on a source instance.|
35| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_Destroy](#oh_avdemuxer_destroy) (OH_AVDemuxer \*demuxer) | Destroys an **OH_AVDemuxer** instance and clears internal resources.|
36| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_SelectTrackByID](#oh_avdemuxer_selecttrackbyid) (OH_AVDemuxer \*demuxer, uint32_t trackIndex) | Selects a track from which the demuxer reads sample data.|
37| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_UnselectTrackByID](#oh_avdemuxer_unselecttrackbyid) (OH_AVDemuxer \*demuxer, uint32_t trackIndex) | Deselects a track. The demuxer no longer reads sample data from a track after it is deselected.|
38| [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) | Reads the sample and related information from the specified track. (This API is deprecated in API version 11.) |
39| [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) | Reads the sample of the specified track.|
40| [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) | Seeks to the specified time for all the selected tracks based on a seek mode. |
41| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_SetMediaKeySystemInfoCallback](#oh_avdemuxer_setmediakeysysteminfocallback) (OH_AVDemuxer \*demuxer, DRM_MediaKeySystemInfoCallback callback) | Sets an asynchronous callback for obtaining the media key system information. |
42| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback](#oh_avdemuxer_setdemuxermediakeysysteminfocallback) (OH_AVDemuxer \*demuxer, Demuxer_MediaKeySystemInfoCallback callback) | Sets an asynchronous callback for obtaining the media key system information. |
43| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVDemuxer_GetMediaKeySystemInfo](#oh_avdemuxer_getmediakeysysteminfo) (OH_AVDemuxer \*demuxer, DRM_MediaKeySystemInfo \*mediaKeySystemInfo) | Obtains the media key system information. |
44
45
46## Type Description
47
48### Demuxer_MediaKeySystemInfoCallback
49
50```
51typedef void(* Demuxer_MediaKeySystemInfoCallback) (OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)
52```
53
54**Description**
55
56Defines a pointer to the callback function for the media key system information.
57
58**System capability**: SystemCapability.Multimedia.Media.Spliter
59
60**Since**: 12
61
62
63### DRM_MediaKeySystemInfoCallback
64
65```
66typedef void(* DRM_MediaKeySystemInfoCallback) (DRM_MediaKeySystemInfo *mediaKeySystemInfo)
67```
68
69**Description**
70
71Defines a pointer to the callback function for the media key system information.
72
73**System capability**: SystemCapability.Multimedia.Media.Spliter
74
75**Since**: 11
76
77
78## Function Description
79
80
81### OH_AVDemuxer_CreateWithSource()
82
83```
84OH_AVDemuxer* OH_AVDemuxer_CreateWithSource (OH_AVSource *source)
85```
86
87**Description**
88
89Creates an **OH_AVDemuxer** instance based on a source instance.
90
91For details about how to create, destroy, and use a source instance, see [OH_AVSource](_a_v_source.md).
92
93**System capability**: SystemCapability.Multimedia.Media.Spliter
94
95**Since**: 10
96
97**Parameters**
98
99| Name| Description|
100| -------- | -------- |
101| source | Pointer to an **OH_AVSource** instance. |
102
103**Returns**
104
105Returns the pointer to an **OH_AVDemuxer** instance if the operation is successful; returns NULL otherwise.
106
107The possible causes of an operation failure are as follows:
1081. The value of **source** is invalid, that is, a null pointer.
1092. The value of **source** does not point to an **OH_AVSource** instance.
110
111
112### OH_AVDemuxer_Destroy()
113
114```
115OH_AVErrCode OH_AVDemuxer_Destroy (OH_AVDemuxer *demuxer)
116```
117
118**Description**
119
120Destroys an **OH_AVDemuxer** instance and clears internal resources. An instance can be destroyed only once.
121
122The destroyed instance cannot be used until it is re-created. You are advised to set the pointer to **NULL** after the instance is destroyed.
123
124**System capability**: SystemCapability.Multimedia.Media.Spliter
125
126**Since**: 10
127
128**Parameters**
129
130| Name| Description|
131| -------- | -------- |
132| demuxer | Pointer to an **OH_AVDemuxer** instance. |
133
134**Returns**
135
136Returns either of the following result codes:
137
138**AV_ERR_OK**: The operation is successful.
139
140**AV_ERR_INVALID_VAL**: The value of **demuxer** is a null pointer or does not point to a demuxer instance.
141
142
143### OH_AVDemuxer_GetMediaKeySystemInfo()
144
145```
146OH_AVErrCode OH_AVDemuxer_GetMediaKeySystemInfo (OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)
147```
148**Description**
149
150Obtains the media key system information.
151
152The media key system information can be obtained only after [Demuxer_MediaKeySystemInfoCallback](#demuxer_mediakeysysteminfocallback) or [DRM_MediaKeySystemInfoCallback](#drm_mediakeysysteminfocallback) is successfully invoked.
153
154**System capability**: SystemCapability.Multimedia.Media.Spliter
155
156**Since**: 11
157
158**Parameters**
159
160| Name| Description|
161| -------- | -------- |
162| demuxer | Pointer to an **OH_AVDemuxer** instance. |
163| mediaKeySystemInfo | Pointer to the media key system information. For details, see [DRM_MediaKeySystemInfo](../apis-drm-kit/_d_r_m___media_key_system_info.md). |
164
165**Returns**
166
167Returns either of the following result codes:
168
169**AV_ERR_OK**: The operation is successful.
170
171**AV_ERR_INVALID_VAL**:
172
173    1. The value of **demuxer** is a null pointer or does not point to a demuxer instance.
174    2. The value of **mediaKeySystemInfo** is a null pointer.
175
176
177### OH_AVDemuxer_ReadSample()
178
179```
180OH_AVErrCode OH_AVDemuxer_ReadSample (OH_AVDemuxer *demuxer, uint32_t trackIndex, OH_AVMemory *sample, OH_AVCodecBufferAttr *info)
181```
182
183**Description**
184
185Reads the sample and related information from the specified track.
186
187You must select a track before reading the sample. After this API is called, the demuxer automatically proceeds to the next frame.
188
189**System capability**: SystemCapability.Multimedia.Media.Spliter
190
191**Since**: 10
192
193**Deprecated from**: 11
194
195**Substitute API**: [OH_AVDemuxer_ReadSampleBuffer](#oh_avdemuxer_readsamplebuffer)
196
197**Parameters**
198
199| Name| Description|
200| -------- | -------- |
201| demuxer | Pointer to an **OH_AVDemuxer** instance. |
202| trackIndex | Index of the track from which the compressed frame is to be read. |
203| sample | Pointer to the **OH_AVMemory** instance for storing the compressed frame data. |
204| info | Pointer to the **OH_AVCodecBufferAttr** instance for storing the compressed frame information. |
205
206**Returns**
207
208Returns any of the following result codes:
209
210**AV_ERR_OK**: The operation is successful.
211
212**AV_ERR_INVALID_VAL**:
213
214    1. The value of **demuxer** is a null pointer or does not point to a demuxer instance.
215    2. The track index is out of range.
216    3. Track reading is not supported.
217    4. The value of **sample** is null.
218    5. The value of **info** is null.
219
220**AV_ERR_OPERATE_NOT_PERMIT**:
221
222    1. The track with the specified index is not selected.
223    2. The demuxer is not correctly initialized.
224
225**AV_ERR_NO_MEMORY**: The sample capacity is insufficient to store all frame data.
226
227**AV_ERR_UNKNOWN**: Failed to read or parse the frame from the file.
228
229
230### OH_AVDemuxer_ReadSampleBuffer()
231
232```
233OH_AVErrCode OH_AVDemuxer_ReadSampleBuffer (OH_AVDemuxer *demuxer, uint32_t trackIndex, OH_AVBuffer *sample)
234```
235
236**Description**
237
238Reads the sample and related information from the specified track.
239
240You must select a track before reading the sample. After this API is called, the demuxer automatically proceeds to the next frame.
241
242**System capability**: SystemCapability.Multimedia.Media.Spliter
243
244**Since**: 11
245
246**Parameters**
247
248| Name| Description|
249| -------- | -------- |
250| demuxer | Pointer to an **OH_AVDemuxer** instance. |
251| trackIndex | Index of the track from which the compressed frame is to be read. |
252| sample | Pointer to the **OH_AVBuffer** instance for storing the compressed frame data and related information. |
253
254**Returns**
255
256Returns any of the following result codes:
257
258**AV_ERR_OK**: The operation is successful.
259
260**AV_ERR_INVALID_VAL**:
261
262    1. The value of **demuxer** is a null pointer or does not point to a demuxer instance.
263    2. The value of **sample** is a null pointer.
264    3. The track index is out of range.
265    4. The value of **sample** is null.
266
267**AV_ERR_OPERATE_NOT_PERMIT**:
268
269    1. The track with the specified index is not selected.
270    2. The demuxer is not correctly initialized.
271
272**AV_ERR_NO_MEMORY**: The sample capacity is insufficient to store all frame data.
273
274**AV_ERR_UNKNOWN**: Failed to read or parse the frame from the file.
275
276
277### OH_AVDemuxer_SeekToTime()
278
279```
280OH_AVErrCode OH_AVDemuxer_SeekToTime (OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode)
281```
282
283**Description**
284
285Seeks to the specified time for all the selected tracks based on a seek mode.
286
287**System capability**: SystemCapability.Multimedia.Media.Spliter
288
289**Since**: 10
290
291**Parameters**
292
293| Name| Description|
294| -------- | -------- |
295| demuxer | Pointer to an **OH_AVDemuxer** instance. |
296| millisecond | Time to seek to, in milliseconds. The timestamp is relative to the start position of the file. |
297| mode | Seek mode. For details, see [OH_AVSeekMode](_codec_base.md#oh_avseekmode). |
298
299**Returns**
300
301Returns any of the following result codes defined in [OH_AVErrCode](_core.md#oh_averrcode):
302
303**AV_ERR_OK**: The operation is successful.
304
305**AV_ERR_INVALID_VAL**:
306
307    1. The value of **demuxer** is a null pointer or does not point to a demuxer instance.
308    2. The demuxer is not correctly initialized.
309    2. The value of **millisecond** is out of range.
310
311**AV_ERR_OPERATE_NOT_PERMIT**:
312
313    1. The track with the specified index is not selected.
314    2. The seek operation cannot be performed on the resource.
315
316**AV_ERR_UNKNOWN**:
317
318    1. The seek operation fails.
319    2. **OH_AVSeekMode** is set to **SEEK_MODE_NEXT_SYNC** and there is no I-frame following the specified position.
320
321
322### OH_AVDemuxer_SelectTrackByID()
323
324```
325OH_AVErrCode OH_AVDemuxer_SelectTrackByID (OH_AVDemuxer *demuxer, uint32_t trackIndex)
326```
327
328**Description**
329
330Selects a track from which the demuxer reads sample data.
331
332You can select multiple tracks by calling this API multiple times, with a different track index passed in each time.
333
334When **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.
335
336**System capability**: SystemCapability.Multimedia.Media.Spliter
337
338**Since**: 10
339
340**Parameters**
341
342| Name| Description|
343| -------- | -------- |
344| demuxer | Pointer to an **OH_AVDemuxer** instance. |
345| trackIndex | Index of the track. |
346
347**Returns**
348
349Returns any of the following result codes:
350
351**AV_ERR_OK**: The operation is successful.
352
353**AV_ERR_OPERATE_NOT_PERMIT**: The demuxer is not correctly initialized.
354
355**AV_ERR_INVALID_VAL**:
356
357    1. The value of **demuxer** is a null pointer or does not point to a demuxer instance.
358    2. The track index is out of range.
359    3. Track reading is not supported.
360
361
362### OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback()
363
364```
365OH_AVErrCode OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback (OH_AVDemuxer *demuxer, Demuxer_MediaKeySystemInfoCallback callback)
366```
367
368**Description**
369
370Sets a callback for obtaining the media key system information.
371
372**System capability**: SystemCapability.Multimedia.Media.Spliter
373
374**Since**: 12
375
376**Parameters**
377
378| Name| Description|
379| -------- | -------- |
380| demuxer | Pointer to an **OH_AVDemuxer** instance. |
381| callback | Callback function. For details, see [Demuxer_MediaKeySystemInfoCallback](#demuxer_mediakeysysteminfocallback). |
382
383**Returns**
384
385Returns any of the following result codes:
386
387**AV_ERR_OK**: The operation is successful.
388
389**AV_ERR_OPERATE_NOT_PERMIT**: The demuxer is not correctly initialized.
390
391**AV_ERR_INVALID_VAL**: The value of **demuxer** is a null pointer or does not point to a demuxer instance.
392
393
394### OH_AVDemuxer_SetMediaKeySystemInfoCallback()
395
396```
397OH_AVErrCode OH_AVDemuxer_SetMediaKeySystemInfoCallback (OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfoCallback callback)
398```
399**Description**
400
401Sets a callback for obtaining the media key system information.
402
403**System capability**: SystemCapability.Multimedia.Media.Spliter
404
405**Since**: 11
406
407**Parameters**
408
409| Name| Description|
410| -------- | -------- |
411| demuxer | Pointer to an **OH_AVDemuxer** instance. |
412| callback | Callback function. For details, see [DRM_MediaKeySystemInfoCallback](#drm_mediakeysysteminfocallback). |
413
414**Returns**
415
416Returns any of the following result codes:
417
418**AV_ERR_OK**: The operation is successful.
419
420**AV_ERR_OPERATE_NOT_PERMIT**: The demuxer is not correctly initialized.
421
422**AV_ERR_INVALID_VAL**: The value of **demuxer** is a null pointer or does not point to a demuxer instance.
423
424
425### OH_AVDemuxer_UnselectTrackByID()
426
427```
428OH_AVErrCode OH_AVDemuxer_UnselectTrackByID (OH_AVDemuxer *demuxer, uint32_t trackIndex)
429```
430
431**Description**
432
433Deselects a track. The demuxer no longer reads sample data from a track after it is deselected.
434
435You can deselect multiple tracks by calling this API multiple times, with a different track index passed in each time.
436
437If the same track is deselected multiple times, **AV_ERR_OK** is returned and the API call takes effect only once.
438
439**System capability**: SystemCapability.Multimedia.Media.Spliter
440
441**Since**: 10
442
443**Parameters**
444
445| Name| Description|
446| -------- | -------- |
447| demuxer | Pointer to an **OH_AVDemuxer** instance. |
448| trackIndex | Index of the track. |
449
450**Returns**
451
452Returns any of the following result codes:
453
454**AV_ERR_OK**: The operation is successful.
455
456**AV_ERR_OPERATE_NOT_PERMIT**: The demuxer is not correctly initialized.
457
458**AV_ERR_INVALID_VAL**: The value of **demuxer** is a null pointer or does not point to a demuxer instance.
459