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