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