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