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