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