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_AddTrack](#oh_avmuxer_addtrack) ([OH_AVMuxer](#oh_avmuxer) \*muxer, int32_t \*trackIndex, [OH_AVFormat](_core.md#oh_avformat) \*trackFormat) | 向封装器添加音视频轨。|
39| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Start](#oh_avmuxer_start) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 开始封装。|
40| [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已废弃)。 |
41| [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写入封装器。  |
42| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Stop](#oh_avmuxer_stop) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 停止封装。  |
43| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Destroy](#oh_avmuxer_destroy) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 清理内部资源,销毁OH_AVMuxer实例。  |
44
45
46## 类型定义说明
47
48
49### OH_AVMuxer
50
51```
52typedef struct OH_AVMuxer OH_AVMuxer
53```
54**描述**
55为封装接口定义native层对象。
56
57**起始版本:** 10
58
59
60## 函数说明
61
62
63### OH_AVMuxer_AddTrack()
64
65```
66OH_AVErrCode OH_AVMuxer_AddTrack (OH_AVMuxer *muxer, int32_t *trackIndex, OH_AVFormat *trackFormat)
67```
68**描述**
69向封装器添加音视频轨。每调用一次本接口可以在封装器中添加一个音视频轨。该接口必须在OH_AVMuxer_Start前调用。
70
71**系统能力:** SystemCapability.Multimedia.Media.Muxer
72
73**起始版本:** 10
74
75**参数:**
76
77| 名称 | 描述 |
78| -------- | -------- |
79| muxer | 指向OH_AVMuxer实例的指针。  |
80| trackIndex | 用于获取该轨的索引,该值在OH_AVMuxer_WriteSample接口中使用。 如果音视频轨添加成功,该值大于或等于0,否则小于0。  |
81| trackFormat | 指向OH_AVFormat实例的指针。  |
82
83**返回:**
84
85执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
86
87AV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或trackFormat无效。 AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。AV_ERR_UNSUPPORT,不支持的mime类型。 AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。
88
89
90### OH_AVMuxer_Create()
91
92```
93OH_AVMuxer* OH_AVMuxer_Create (int32_t fd, OH_AVOutputFormat format)
94```
95**描述**
96通过文件描述符fd和封装格式创建OH_AVMuxer实例。
97
98**系统能力:** SystemCapability.Multimedia.Media.Muxer
99
100**起始版本:** 10
101
102**参数:**
103
104| 名称 | 描述 |
105| -------- | -------- |
106| fd | 用读写方式打开(O_RDWR),由调用者关闭该fd。  |
107| format | 封装输出的文件格式,参考[OH_AVOutputFormat](_codec_base.md#oh_avoutputformat)。  |
108
109**返回:**
110
111返回一个指向OH_AVMuxer实例的指针, 需要调用OH_AVMuxer_Destroy销毁。
112
113
114### OH_AVMuxer_Destroy()
115
116```
117OH_AVErrCode OH_AVMuxer_Destroy (OH_AVMuxer *muxer)
118```
119**描述**
120清理内部资源,销毁OH_AVMuxer实例。
121
122**系统能力:** SystemCapability.Multimedia.Media.Muxer
123
124**起始版本:** 10
125
126**参数:**
127
128| 名称 | 描述 |
129| -------- | -------- |
130| muxer | 指向OH_AVMuxer实例的指针。  |
131
132**返回:**
133
134执行成功返回AV_ERR_OK,需调用者置空muxer;否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
135
136AV_ERR_INVALID_VAL,muxer为空指针。
137
138
139### OH_AVMuxer_SetRotation()
140
141```
142OH_AVErrCode OH_AVMuxer_SetRotation (OH_AVMuxer *muxer, int32_t rotation)
143```
144**描述**
145设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。该接口必须在OH_AVMuxer_Start前调用。
146
147**系统能力:** SystemCapability.Multimedia.Media.Muxer
148
149**起始版本:** 10
150
151**参数:**
152
153| 名称 | 描述 |
154| -------- | -------- |
155| muxer | 指向OH_AVMuxer实例的指针。  |
156| rotation | 角度,必须为0、90、180 或 270。  |
157
158**返回:**
159
160执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
161
162AV_ERR_INVALID_VAL,muxer为空指针,或rotation无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。
163
164
165### OH_AVMuxer_Start()
166
167```
168OH_AVErrCode OH_AVMuxer_Start (OH_AVMuxer *muxer)
169```
170**描述**
171开始封装。该接口必须在OH_AVMuxer_AddTrack后,OH_AVMuxer_WriteSample前调用。
172
173**系统能力:** SystemCapability.Multimedia.Media.Muxer
174
175**起始版本:** 10
176
177**参数:**
178
179| 名称 | 描述 |
180| -------- | -------- |
181| muxer | 指向OH_AVMuxer实例的指针。  |
182
183**返回:**
184
185执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
186
187AV_ERR_INVALID_VAL,muxer为空指针。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。AV_ERR_UNKNOWN,未知错误。
188
189
190### OH_AVMuxer_Stop()
191
192```
193OH_AVErrCode OH_AVMuxer_Stop (OH_AVMuxer *muxer)
194```
195**描述**
196停止封装。封装器停止后不支持重新开始。
197
198**系统能力:** SystemCapability.Multimedia.Media.Muxer
199
200**起始版本:** 10
201
202**参数:**
203
204| 名称 | 描述 |
205| -------- | -------- |
206| muxer | 指向OH_AVMuxer实例的指针。  |
207
208**返回:**
209
210执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
211
212AV_ERR_INVALID_VAL,muxer为空指针。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。
213
214
215### OH_AVMuxer_WriteSample()
216
217```
218OH_AVErrCode OH_AVMuxer_WriteSample (OH_AVMuxer *muxer, uint32_t trackIndex, OH_AVMemory *sample, OH_AVCodecBufferAttr info)
219```
220**描述**
221将sample写入封装器。该接口必须在OH_AVMuxer_Start后,OH_AVMuxer_Stop前调用。调用者需要按info中的时间顺序将sample写入正确的音视频轨。
222
223**系统能力:** SystemCapability.Multimedia.Media.Muxer
224
225**起始版本:** 10
226
227**废弃版本:** 11
228
229**替代接口:**[OH_AVMuxer_WriteSampleBuffer](#oh_avmuxer_writesamplebuffer)
230
231**参数:**
232
233| 名称 | 描述 |
234| -------- | -------- |
235| muxer | 指向OH_AVMuxer实例的指针。  |
236| trackIndex | 数据对应的音视频轨的索引。  |
237| sample | 编码或解封装得到的数据。  |
238| info | sample对应的描述信息,参考**OH_AVCodecBufferAttr**。  |
239
240**返回:**
241
242执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
243
244AV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或sample无效,或info无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。
245
246
247### OH_AVMuxer_WriteSampleBuffer()
248
249```
250OH_AVErrCode OH_AVMuxer_WriteSampleBuffer (OH_AVMuxer *muxer, uint32_t trackIndex, const OH_AVBuffer *sample)
251```
252**描述**
253将sample写入封装器。该接口必须在OH_AVMuxer_Start后,OH_AVMuxer_Stop前调用。 调用者需要按sample中的时间顺序将sample写入正确的音视频轨。
254
255**系统能力:** SystemCapability.Multimedia.Media.Muxer
256
257**起始版本:** 11
258
259**参数:**
260
261| 名称 | 描述 |
262| -------- | -------- |
263| muxer | 指向OH_AVMuxer实例的指针。  |
264| trackIndex | 数据对应的音视频轨的索引。  |
265| sample | 编码或解封装得到的数据。包含数据与数据属性  |
266
267**返回:**
268
269执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。
270
271AV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或sample无效。 AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。 AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。
272