• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# native_avdemuxer.h
2
3## 概述
4
5声明用于音视频媒体数据解析的接口。
6
7**引用文件:** <multimedia/player_framework/native_avdemuxer.h>
8
9**库:** libnative_media_avdemuxer.so
10
11**系统能力:** SystemCapability.Multimedia.Media.Spliter
12
13**起始版本:** 10
14
15**相关模块:** [AVDemuxer](capi-avdemuxer.md)
16
17**相关示例:**[AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
18
19## 汇总
20
21### 结构体
22
23| 名称 | typedef关键字 | 描述 |
24| -- | -- | -- |
25| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) | OH_AVDemuxer | 为OH_AVDemuxer接口定义native层对象。 |
26| [DRM_MediaKeySystemInfo](capi-avdemuxer-drm-mediakeysysteminfo.md) | DRM_MediaKeySystemInfo | 为DRM_MediaKeySystemInf接口定义native层对象。 |
27
28### 函数
29
30| 名称 | typedef关键字 | 描述 |
31| -- | -- | -- |
32| [typedef void (\*DRM_MediaKeySystemInfoCallback)(DRM_MediaKeySystemInfo* mediaKeySystemInfo)](#drm_mediakeysysteminfocallback) | DRM_MediaKeySystemInfoCallback | DRM_MediaKeySystemInfo回调函数指针类型,不返回解封装器实例,适用于单个解封装器实例场景。需要使用OH_AVDemuxer_SetMediaKeySystemInfoCallback接口将其设置为回调。 |
33| [typedef void (\*Demuxer_MediaKeySystemInfoCallback)(OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)](#demuxer_mediakeysysteminfocallback) | Demuxer_MediaKeySystemInfoCallback | DRM_MediaKeySystemInfo回调函数指针类型,返回解封装器实例,适用于多个解封装器实例场景。需要使用OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback接口将其设置为回调,推荐使用。 |
34| [OH_AVDemuxer *OH_AVDemuxer_CreateWithSource(OH_AVSource *source)](#oh_avdemuxer_createwithsource) | - | 通过source实例创建OH_AVDemuxer实例。source的创建、销毁及使用,详情请参考[OH_AVSource](_a_v_source.md)。 |
35| [OH_AVErrCode OH_AVDemuxer_Destroy(OH_AVDemuxer *demuxer)](#oh_avdemuxer_destroy) | - | 销毁OH_AVDemuxer实例并清理内部资源。同一实例只能被销毁一次。注意,销毁的实例在被重新创建之前不能再被使用。建议实例销毁成功后将指针置为NULL。 |
36| [OH_AVErrCode OH_AVDemuxer_SelectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex)](#oh_avdemuxer_selecttrackbyid) | - | 指定读取sample的轨道,解封装器将会从该轨道中读取数据,未指定的轨道不会读取。注意,通过多次调用接口并传入不同轨道的索引来选中多个轨道。调用OH_AVDemuxer_ReadSample时只会读取被选中的轨道中数据,同一轨道被选择多次时,接口会返回AV_ERR_OK,并且只会生效一次。 |
37| [OH_AVErrCode OH_AVDemuxer_UnselectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex)](#oh_avdemuxer_unselecttrackbyid) | - | 移除读取sample的轨道,未选中的轨道的数据不会被解封装器读取。注意,通过多次调用接口并传入不同轨道的索引来取消对多个轨道的选择。同一轨道被多次取消选择时,接口会返回AV_ERR_OK,并且只会生效一次。 |
38| [OH_AVErrCode OH_AVDemuxer_ReadSample(OH_AVDemuxer *demuxer, uint32_t trackIndex,OH_AVMemory *sample, OH_AVCodecBufferAttr *info)](#oh_avdemuxer_readsample) | - | 获取指定轨道的sample及相关信息。注意,读取轨道sample前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。 |
39| [OH_AVErrCode OH_AVDemuxer_ReadSampleBuffer(OH_AVDemuxer *demuxer, uint32_t trackIndex,OH_AVBuffer *sample)](#oh_avdemuxer_readsamplebuffer) | - | 获取指定轨道的sample及相关信息。注意,读取轨道sample前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。 |
40| [OH_AVErrCode OH_AVDemuxer_SeekToTime(OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode)](#oh_avdemuxer_seektotime) | - | 根据设定的跳转模式,将所有选中的轨道到指定时间附近。 |
41| [OH_AVErrCode OH_AVDemuxer_SetMediaKeySystemInfoCallback(OH_AVDemuxer *demuxer,DRM_MediaKeySystemInfoCallback callback)](#oh_avdemuxer_setmediakeysysteminfocallback) | - | 设置DRM信息回调函数。 |
42| [OH_AVErrCode OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback(OH_AVDemuxer *demuxer,Demuxer_MediaKeySystemInfoCallback callback)](#oh_avdemuxer_setdemuxermediakeysysteminfocallback) | - | 设置异步DRM信息回调函数。 |
43| [OH_AVErrCode OH_AVDemuxer_GetMediaKeySystemInfo(OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)](#oh_avdemuxer_getmediakeysysteminfo) | - | 获取DRM信息。在Demuxer_MediaKeySystemInfoCallback或DRM_MediaKeySystemInfoCallback接口成功回调以后,调用此接口才能获取到DRM信息。 |
44
45## 函数说明
46
47### DRM_MediaKeySystemInfoCallback()
48
49```
50typedef void (*DRM_MediaKeySystemInfoCallback)(DRM_MediaKeySystemInfo* mediaKeySystemInfo)
51```
52
53**描述**
54
55DRM_MediaKeySystemInfo回调函数指针类型,不返回解封装器实例,适用于单个解封装器实例场景。<br>需要使用[OH_AVDemuxer_SetMediaKeySystemInfoCallback](#oh_avdemuxer_setdemuxermediakeysysteminfocallback)接口将其设置为回调。
56
57**系统能力:** SystemCapability.Multimedia.Media.Spliter
58
59**起始版本:** 11
60
61**废弃版本:** 14
62
63**替代接口:** [Demuxer_MediaKeySystemInfoCallback](#demuxer_mediakeysysteminfocallback)
64
65### Demuxer_MediaKeySystemInfoCallback()
66
67```
68typedef void (*Demuxer_MediaKeySystemInfoCallback)(OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)
69```
70
71**描述**
72
73DRM_MediaKeySystemInfo回调函数指针类型,返回解封装器实例,适用于多个解封装器实例场景。<br>需要使用[OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback](#oh_avdemuxer_setdemuxermediakeysysteminfocallback)接口将其设置为回调,推荐使用。
74
75**系统能力:** SystemCapability.Multimedia.Media.Spliter
76
77**起始版本:** 12
78
79### OH_AVDemuxer_CreateWithSource()
80
81```
82OH_AVDemuxer *OH_AVDemuxer_CreateWithSource(OH_AVSource *source)
83```
84
85**描述**
86
87通过source实例创建OH_AVDemuxer实例。<br>source的创建、销毁及使用,详情请参考[OH_AVSource](_a_v_source.md)。
88
89**系统能力:** SystemCapability.Multimedia.Media.Spliter
90
91**起始版本:** 10
92
93
94**参数:**
95
96| 参数项 | 描述 |
97| -- | -- |
98| [OH_AVSource](_a_v_source.md#oh_avsource) *source | 指向OH_AVSource实例的指针。 |
99
100**返回:**
101
102| 类型 | 说明 |
103| -- | -- |
104| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) * | 返回一个指向OH_AVDemuxer实例的指针。<br> 如果执行成功,则返回指向OH_AVDemuxer实例的指针,否则返回NULL。<br> 可能的失败原因:<br> 1. source无效,即空指针。<br>2. 非OH_AVSource实例。 |
105
106### OH_AVDemuxer_Destroy()
107
108```
109OH_AVErrCode OH_AVDemuxer_Destroy(OH_AVDemuxer *demuxer)
110```
111
112**描述**
113
114销毁OH_AVDemuxer实例并清理内部资源。同一实例只能被销毁一次。<br>注意,销毁的实例在被重新创建之前不能再被使用。建议实例销毁成功后将指针置为NULL。
115
116**系统能力:** SystemCapability.Multimedia.Media.Spliter
117
118**起始版本:** 10
119
120
121**参数:**
122
123| 参数项 | 描述 |
124| -- | -- |
125| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
126
127**返回:**
128
129| 类型 | 说明 |
130| -- | -- |
131| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:当输入的demuxer指针为空或非解封装器实例。 |
132
133### OH_AVDemuxer_SelectTrackByID()
134
135```
136OH_AVErrCode OH_AVDemuxer_SelectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex)
137```
138
139**描述**
140
141指定读取sample的轨道,解封装器将会从该轨道中读取数据,未指定的轨道不会读取。<br>注意,通过多次调用接口并传入不同轨道的索引来选中多个轨道。<br>调用[OH_AVDemuxer_ReadSample](#oh_avdemuxer_readsample)时只会读取被选中的轨道中数据,同一轨道被选择多次时,接口会返回AV_ERR_OK,并且只会生效一次。
142
143**系统能力:** SystemCapability.Multimedia.Media.Spliter
144
145**起始版本:** 10
146
147
148**参数:**
149
150| 参数项 | 描述 |
151| -- | -- |
152| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
153| uint32_t trackIndex | 需选择的轨道的索引。 |
154
155**返回:**
156
157| 类型 | 说明 |
158| -- | -- |
159| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:<br> 1. 输入的demuxer指针为空或为非解封装器实例。<br> 2. 轨道的索引超出范围。<br> 3. 不支持读取轨道。<br>         AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。 |
160
161### OH_AVDemuxer_UnselectTrackByID()
162
163```
164OH_AVErrCode OH_AVDemuxer_UnselectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex)
165```
166
167**描述**
168
169移除读取sample的轨道,未选中的轨道的数据不会被解封装器读取。<br>注意,通过多次调用接口并传入不同轨道的索引来取消对多个轨道的选择。<br>同一轨道被多次取消选择时,接口会返回AV_ERR_OK,并且只会生效一次。
170
171**系统能力:** SystemCapability.Multimedia.Media.Spliter
172
173**起始版本:** 10
174
175
176**参数:**
177
178| 参数项 | 描述 |
179| -- | -- |
180| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
181| uint32_t trackIndex | 需取消选择的轨道的索引。 |
182
183**返回:**
184
185| 类型 | 说明 |
186| -- | -- |
187| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:输入的demuxer指针为空或为非解封装器实例。<br>         AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。 |
188
189### OH_AVDemuxer_ReadSample()
190
191```
192OH_AVErrCode OH_AVDemuxer_ReadSample(OH_AVDemuxer *demuxer, uint32_t trackIndex,OH_AVMemory *sample, OH_AVCodecBufferAttr *info)
193```
194
195**描述**
196
197获取指定轨道的sample及相关信息。<br>注意,读取轨道sample前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。
198
199**系统能力:** SystemCapability.Multimedia.Media.Spliter
200
201**起始版本:** 10
202
203**废弃版本:** 11
204
205**替代接口:** [OH_AVDemuxer_ReadSampleBuffer](#oh_avdemuxer_readsamplebuffer)
206
207
208**参数:**
209
210| 参数项 | 描述 |
211| -- | -- |
212| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
213| uint32_t trackIndex | 本次读取压缩帧的轨道的索引。 |
214| [OH_AVMemory](_core.md#oh_avmemory) *sample | 指向OH_AVMemory实例的指针,用于储存压缩帧数据。 |
215| [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) *info | 指向OH_AVCodecBufferAttr实例的指针,用于储存压缩帧的相关信息。 |
216
217**返回:**
218
219| 类型 | 说明 |
220| -- | -- |
221| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:<br>1. 输入的demuxer指针为空或为非解封装器实例。<br>2. 轨道的索引超出范围。<br>3. 不支持读取轨道。<br>4. 输入sample为空。<br>5. 输入info为空。<br>         AV_ERR_OPERATE_NOT_PERMIT:<br>1. 轨道的索引没有被选中。<br>2. demuxer没有正确的初始化。<br>         AV_ERR_NO_MEMORY:sample容量不足以存储所有帧数据。<br>         AV_ERR_UNKNOWN:无法从文件中读取或解析帧。 |
222
223### OH_AVDemuxer_ReadSampleBuffer()
224
225```
226OH_AVErrCode OH_AVDemuxer_ReadSampleBuffer(OH_AVDemuxer *demuxer, uint32_t trackIndex,OH_AVBuffer *sample)
227```
228
229**描述**
230
231获取指定轨道的sample及相关信息。<br>注意,读取轨道sample前,轨道必须被选中,可使用[OH_AVDemuxer_SelectTrackByID](#oh_avdemuxer_selecttrackbyid)。调用接口后解封装器将自动前进到下一帧。
232
233**系统能力:** SystemCapability.Multimedia.Media.Spliter
234
235**起始版本:** 11
236
237
238**参数:**
239
240| 参数项 | 描述 |
241| -- | -- |
242| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
243| uint32_t trackIndex | 本次读取压缩帧的轨道的索引。. |
244| [OH_AVBuffer](_core.md#oh_avbuffer) *sample | 指向OH_AVBuffer实例的指针,用于储存压缩帧数据以及相关信息。 |
245
246**返回:**
247
248| 类型 | 说明 |
249| -- | -- |
250| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:<br> 1. 输入的demuxer指针为空或为非解封装器实例。<br>2. sample为空指针。<br>3. 轨道的索引超出范围。<br>4. 输入sample为空。<br>         AV_ERR_OPERATE_NOT_PERMIT:<br> 1. 轨道的索引没有被选中。<br>2. demuxer没有正确的初始化。<br>         AV_ERR_NO_MEMORY:sample容量不足以存储所有帧数据。<br>         AV_ERR_UNKNOWN:无法从文件中读取或解析帧。 |
251
252### OH_AVDemuxer_SeekToTime()
253
254```
255OH_AVErrCode OH_AVDemuxer_SeekToTime(OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode)
256```
257
258**描述**
259
260根据设定的跳转模式[OH_AVSeekMode](capi-native-avcodec-base-h.md#oh_avseekmode),将所有选中的轨道到指定时间附近。
261
262**系统能力:** SystemCapability.Multimedia.Media.Spliter
263
264**起始版本:** 10
265
266
267**参数:**
268
269| 参数项 | 描述 |
270| -- | -- |
271| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
272| int64_t millisecond | 期望跳转位置对应的时间,单位为毫秒,该时间戳是相对文件开始的位置。 |
273| [OH_AVSeekMode](capi-native-avcodec-base-h.md#oh_avseekmode) mode | 跳转的模式。 |
274
275**返回:**
276
277| 类型 | 说明 |
278| -- | -- |
279| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:执行成功。<br>         AV_ERR_INVALID_VAL:<br>1. 输入的demuxer指针为空或为非解封装器实例。<br>2. 毫秒值超出范围。<br>         AV_ERR_OPERATE_NOT_PERMIT:<br>1. 轨道的索引没有被选中。<br>2. demuxer没有正确的初始化。<br>3. 资源无法seek。<br>         AV_ERR_UNKNOWN:<br>1. seek失败。<br>2. OH_AVSeekMode选择SEEK_MODE_NEXT_SYNC,并且时间点后无I帧,可能会跳转失败。 |
280
281### OH_AVDemuxer_SetMediaKeySystemInfoCallback()
282
283```
284OH_AVErrCode OH_AVDemuxer_SetMediaKeySystemInfoCallback(OH_AVDemuxer *demuxer,DRM_MediaKeySystemInfoCallback callback)
285```
286
287**描述**
288
289设置DRM信息回调函数。
290
291**系统能力:** SystemCapability.Multimedia.Media.Spliter
292
293**起始版本:** 11
294
295**废弃版本:** 14
296
297**替代接口:** [OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback](#oh_avdemuxer_setdemuxermediakeysysteminfocallback)
298
299
300**参数:**
301
302| 参数项 | 描述 |
303| -- | -- |
304| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
305| [DRM_MediaKeySystemInfoCallback](#drm_mediakeysysteminfocallback) callback | 回调函数。 |
306
307**返回:**
308
309| 类型 | 说明 |
310| -- | -- |
311| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:操作成功。<br>         AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。<br>         AV_ERR_INVALID_VAL:输入的demuxer指针为空或为非解封装器实例。 |
312
313### OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback()
314
315```
316OH_AVErrCode OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback(OH_AVDemuxer *demuxer,Demuxer_MediaKeySystemInfoCallback callback)
317```
318
319**描述**
320
321设置DRM信息回调函数。
322
323**系统能力:** SystemCapability.Multimedia.Media.Spliter
324
325**起始版本:** 12
326
327
328**参数:**
329
330| 参数项 | 描述 |
331| -- | -- |
332| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
333| [Demuxer_MediaKeySystemInfoCallback](#demuxer_mediakeysysteminfocallback) callback | 回调函数。 |
334
335**返回:**
336
337| 类型 | 说明 |
338| -- | -- |
339| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:操作成功。<br>         AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。<br>         AV_ERR_INVALID_VAL:输入的demuxer指针为空或为非解封装器实例。 |
340
341### OH_AVDemuxer_GetMediaKeySystemInfo()
342
343```
344OH_AVErrCode OH_AVDemuxer_GetMediaKeySystemInfo(OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo)
345```
346
347**描述**
348
349获取DRM信息。在[Demuxer_MediaKeySystemInfoCallback](#demuxer_mediakeysysteminfocallback)或[DRM_MediaKeySystemInfoCallback](#drm_mediakeysysteminfocallback)成功回调以后,调用此接口才能获取到DRM信息。
350
351**系统能力:** SystemCapability.Multimedia.Media.Spliter
352
353**起始版本:** 11
354
355
356**参数:**
357
358| 参数项 | 描述 |
359| -- | -- |
360| [OH_AVDemuxer](capi-avdemuxer-oh-avdemuxer.md) *demuxer | 指向OH_AVDemuxer实例的指针。 |
361| [DRM_MediaKeySystemInfo](capi-avdemuxer-drm-mediakeysysteminfo.md) *mediaKeySystemInfo | 指向DRM信息的指针。 |
362
363**返回:**
364
365| 类型 | 说明 |
366| -- | -- |
367| [OH_AVErrCode](_core.md#oh_averrcode-1) | AV_ERR_OK:操作成功。<br>         AV_ERR_INVALID_VAL:<br> 1. 输入的demuxer指针为空或为非解封装器实例。<br> 2. mediaKeySystemInfo为nullptr。 |
368
369
370