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