• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# AVMuxer
2
3<!--Kit: AVCodec Kit-->
4<!--Subsystem: Multimedia-->
5<!--Owner: @mr-chencxy-->
6<!--Designer: @dpy2650--->
7<!--Tester: @baotianhao-->
8<!--Adviser: @zengyawen-->
9
10## 概述
11
12AVMuxer模块提供用于音视频封装功能的接口。
13
14对应的开发指南及样例可参考[媒体数据封装](../../media/avcodec/audio-video-muxer.md)。
15
16**系统能力:** SystemCapability.Multimedia.Media.Muxer
17
18**起始版本:** 10
19
20
21## 汇总
22
23
24### 文件
25
26| 名称 | 描述 |
27| -------- | -------- |
28| [native_avmuxer.h](native__avmuxer_8h.md) | 声明用于音视频封装的Native API。  |
29
30
31### 类型定义
32
33| 名称 | 描述 |
34| -------- | -------- |
35| typedef struct [OH_AVMuxer](#oh_avmuxer) [OH_AVMuxer](#oh_avmuxer) | 定义封装接口native层对象类型。  |
36
37
38### 函数
39
40| 名称 | 描述 |
41| -------- | -------- |
42| [OH_AVMuxer](#oh_avmuxer) \* [OH_AVMuxer_Create](#oh_avmuxer_create) (int32_t fd, [OH_AVOutputFormat](_codec_base.md#oh_avoutputformat) format) | 通过文件描述符fd和封装格式创建OH_AVMuxer实例。  |
43| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_SetRotation](#oh_avmuxer_setrotation) ([OH_AVMuxer](#oh_avmuxer) \*muxer, int32_t rotation) | 设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。  |
44| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_SetFormat](#oh_avmuxer_setformat) ([OH_AVMuxer](#oh_avmuxer) \*muxer, [OH_AVFormat](_core.md#oh_avformat) \*format) | 设置format数据到封装器。 |
45| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_AddTrack](#oh_avmuxer_addtrack) ([OH_AVMuxer](#oh_avmuxer) \*muxer, int32_t \*trackIndex, [OH_AVFormat](_core.md#oh_avformat) \*trackFormat) | 向封装器添加音视频轨。|
46| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Start](#oh_avmuxer_start) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 开始封装。|
47| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_WriteSample](#oh_avmuxer_writesample) ([OH_AVMuxer](#oh_avmuxer) \*muxer, uint32_t trackIndex, [OH_AVMemory](_core.md#oh_avmemory) \*sample, [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) info) | 将sample写入封装器(API11已废弃)。 |
48| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_WriteSampleBuffer](#oh_avmuxer_writesamplebuffer) ([OH_AVMuxer](#oh_avmuxer) \*muxer, uint32_t trackIndex, const [OH_AVBuffer](_core.md#oh_avbuffer) \*sample) | 将sample写入封装器。  |
49| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Stop](#oh_avmuxer_stop) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 停止封装。  |
50| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Destroy](#oh_avmuxer_destroy) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 清理内部资源,销毁OH_AVMuxer实例。  |
51
52
53## 类型定义说明
54
55
56### OH_AVMuxer
57
58```
59typedef struct OH_AVMuxer OH_AVMuxer
60```
61**描述**
62定义封装接口native层对象类型。
63
64**起始版本:** 10
65
66
67## 函数说明
68
69
70### OH_AVMuxer_AddTrack()
71
72```
73OH_AVErrCode OH_AVMuxer_AddTrack (OH_AVMuxer *muxer, int32_t *trackIndex, OH_AVFormat *trackFormat)
74```
75**描述**
76向封装器添加音视频轨。每调用一次本接口可以在封装器中添加一个音视频轨。该接口必须在OH_AVMuxer_Start前调用。
77
78**系统能力:** SystemCapability.Multimedia.Media.Muxer
79
80**起始版本:** 10
81
82**参数:**
83
84| 名称 | 描述 |
85| -------- | -------- |
86| muxer | 指向OH_AVMuxer实例的指针。  |
87| trackIndex | 用于获取该轨的索引,该值在OH_AVMuxer_WriteSample接口中使用。 如果音视频轨添加成功,该值大于或等于0,否则小于0。  |
88| trackFormat | 指向OH_AVFormat实例的指针。  |
89
90**返回:**
91
92执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
93
94AV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或trackFormat无效。 AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。AV_ERR_UNSUPPORT,不支持的mime类型。 AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。
95
96
97### OH_AVMuxer_Create()
98
99```
100OH_AVMuxer* OH_AVMuxer_Create (int32_t fd, OH_AVOutputFormat format)
101```
102**描述**
103通过文件描述符fd和封装格式创建OH_AVMuxer实例。
104
105**系统能力:** SystemCapability.Multimedia.Media.Muxer
106
107**起始版本:** 10
108
109**参数:**
110
111| 名称 | 描述 |
112| -------- | -------- |
113| fd | 用读写方式打开(O_RDWR),由调用者关闭该fd。  |
114| format | 封装输出的文件格式,参考[OH_AVOutputFormat](_codec_base.md#oh_avoutputformat-1)。  |
115
116**返回:**
117
118返回一个指向OH_AVMuxer实例的指针, 在封装使用结束后需要调用OH_AVMuxer_Destroy销毁。
119
120
121### OH_AVMuxer_Destroy()
122
123```
124OH_AVErrCode OH_AVMuxer_Destroy (OH_AVMuxer *muxer)
125```
126**描述**
127清理内部资源,销毁OH_AVMuxer实例。
128
129注意不能重复销毁,否则会导致程序崩溃。
130
131**系统能力:** SystemCapability.Multimedia.Media.Muxer
132
133**起始版本:** 10
134
135**参数:**
136
137| 名称 | 描述 |
138| -------- | -------- |
139| muxer | 指向OH_AVMuxer实例的指针。  |
140
141**返回:**
142
143执行成功返回AV_ERR_OK,需调用者置空muxer;否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
144
145AV_ERR_INVALID_VAL,muxer为空指针。
146
147
148### OH_AVMuxer_SetRotation()
149
150```
151OH_AVErrCode OH_AVMuxer_SetRotation (OH_AVMuxer *muxer, int32_t rotation)
152```
153**描述**
154设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。该接口必须在OH_AVMuxer_Start前调用。
155
156**系统能力:** SystemCapability.Multimedia.Media.Muxer
157
158**起始版本:** 10
159
160**参数:**
161
162| 名称 | 描述 |
163| -------- | -------- |
164| muxer | 指向OH_AVMuxer实例的指针。  |
165| rotation | 角度,必须为0、90、180 或 270。  |
166
167**返回:**
168
169执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
170
171AV_ERR_INVALID_VAL,muxer为空指针,或rotation无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。
172
173
174### OH_AVMuxer_SetFormat()
175
176```
177OH_AVErrCode OH_AVMuxer_SetFormat(OH_AVMuxer *muxer, OH_AVFormat *format)
178```
179**描述**
180设置format数据到封装器。
181
182API 14起,支持设置创建时间OH_MD_KEY_CREATION_TIME。若创建时间未写入成功,请排查OH_MD_KEY_CREATION_TIME字符串设置是否符合ISO 8601标准的时间格式且为UTC时间。
183
184API 20起,支持:
185- 设置文件的描述性文本信息OH_MD_KEY_COMMENT。若文件描述信息未写入成功,请排查OH_MD_KEY_COMMENT是否为字符串类型或字符长度大于等于1且小于等于256。
186- 设置MP4 moov的位置OH_MD_KEY_ENABLE_MOOV_FRONT。OH_MD_KEY_ENABLE_MOOV_FRONT为0时moov后置,为1时前置,默认后置。
187
188**系统能力:** SystemCapability.Multimedia.Media.Muxer
189
190**起始版本:** 14
191
192**参数:**
193
194| 名称 | 描述 |
195| -------- | -------- |
196| muxer | 指向OH_AVMuxer实例的指针。  |
197| format | 指向OH_AVFormat实例的指针。文件级元数据集。  |
198
199**返回:**
200
201AV_ERR_OK,设置format参数正确。
202
203AV_ERR_INVALID_VAL,muxer为空指针,或format无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。
204
205
206### OH_AVMuxer_Start()
207
208```
209OH_AVErrCode OH_AVMuxer_Start (OH_AVMuxer *muxer)
210```
211**描述**
212开始封装。该接口必须在OH_AVMuxer_AddTrack后,OH_AVMuxer_WriteSample前调用。
213
214**系统能力:** SystemCapability.Multimedia.Media.Muxer
215
216**起始版本:** 10
217
218**参数:**
219
220| 名称 | 描述 |
221| -------- | -------- |
222| muxer | 指向OH_AVMuxer实例的指针。  |
223
224**返回:**
225
226执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
227
228AV_ERR_INVALID_VAL,muxer为空指针。AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。AV_ERR_UNKNOWN,未知错误。
229
230
231### OH_AVMuxer_Stop()
232
233```
234OH_AVErrCode OH_AVMuxer_Stop (OH_AVMuxer *muxer)
235```
236**描述**
237停止封装。封装器停止后不支持重新开始。
238
239**系统能力:** SystemCapability.Multimedia.Media.Muxer
240
241**起始版本:** 10
242
243**参数:**
244
245| 名称 | 描述 |
246| -------- | -------- |
247| muxer | 指向OH_AVMuxer实例的指针。  |
248
249**返回:**
250
251执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
252
253AV_ERR_INVALID_VAL,muxer为空指针。AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。
254
255
256### OH_AVMuxer_WriteSample()
257
258```
259OH_AVErrCode OH_AVMuxer_WriteSample (OH_AVMuxer *muxer, uint32_t trackIndex, OH_AVMemory *sample, OH_AVCodecBufferAttr info)
260```
261**描述**
262将sample写入封装器。该接口必须在OH_AVMuxer_Start后,OH_AVMuxer_Stop前调用。调用者需要按info中的时间顺序将sample写入正确的音视频轨。
263
264**系统能力:** SystemCapability.Multimedia.Media.Muxer
265
266**起始版本:** 10
267
268**废弃版本:** 11
269
270**替代接口:**[OH_AVMuxer_WriteSampleBuffer](#oh_avmuxer_writesamplebuffer)
271
272**参数:**
273
274| 名称 | 描述 |
275| -------- | -------- |
276| muxer | 指向OH_AVMuxer实例的指针。  |
277| trackIndex | 数据对应的音视频轨的索引。  |
278| sample | 编码或解封装得到的数据。  |
279| info | sample对应的描述信息,参考[OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md)。  |
280
281**返回:**
282
283执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
284
285AV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或sample无效,或info无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。
286
287
288### OH_AVMuxer_WriteSampleBuffer()
289
290```
291OH_AVErrCode OH_AVMuxer_WriteSampleBuffer (OH_AVMuxer *muxer, uint32_t trackIndex, const OH_AVBuffer *sample)
292```
293**描述**
294将sample写入封装器。该接口必须在OH_AVMuxer_Start后,OH_AVMuxer_Stop前调用。 调用者需要按sample中的时间顺序将sample写入正确的音视频轨。
295
296**系统能力:** SystemCapability.Multimedia.Media.Muxer
297
298**起始版本:** 11
299
300**参数:**
301
302| 名称 | 描述 |
303| -------- | -------- |
304| muxer | 指向OH_AVMuxer实例的指针。  |
305| trackIndex | 数据对应的音视频轨的索引。  |
306| sample | 编码或解封装得到的数据及属性。  |
307
308**返回:**
309
310执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
311
312AV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或sample无效。 AV_ERR_OPERATE_NOT_PERMIT,不允许调用该接口,请检查接口调用顺序。 AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。
313