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