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