1e41f4b71Sopenharmony_ci# AVMuxer 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ci## 概述 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ciAVMuxer模块提供用于音视频封装功能的接口。 7e41f4b71Sopenharmony_ci 8e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci**起始版本:** 10 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci## 汇总 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci### 文件 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci| 名称 | 描述 | 19e41f4b71Sopenharmony_ci| -------- | -------- | 20e41f4b71Sopenharmony_ci| [native_avmuxer.h](native__avmuxer_8h.md) | 声明用于音视频封装的Native API。 | 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci### 类型定义 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci| 名称 | 描述 | 26e41f4b71Sopenharmony_ci| -------- | -------- | 27e41f4b71Sopenharmony_ci| typedef struct [OH_AVMuxer](#oh_avmuxer) [OH_AVMuxer](#oh_avmuxer) | 为封装接口定义native层对象。 | 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci### 函数 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci| 名称 | 描述 | 33e41f4b71Sopenharmony_ci| -------- | -------- | 34e41f4b71Sopenharmony_ci| [OH_AVMuxer](#oh_avmuxer) \* [OH_AVMuxer_Create](#oh_avmuxer_create) (int32_t fd, [OH_AVOutputFormat](_codec_base.md#oh_avoutputformat) format) | 通过文件描述符fd和封装格式创建OH_AVMuxer实例。 | 35e41f4b71Sopenharmony_ci| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_SetRotation](#oh_avmuxer_setrotation) ([OH_AVMuxer](#oh_avmuxer) \*muxer, int32_t rotation) | 设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。 | 36e41f4b71Sopenharmony_ci| [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) | 向封装器添加音视频轨。| 37e41f4b71Sopenharmony_ci| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Start](#oh_avmuxer_start) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 开始封装。| 38e41f4b71Sopenharmony_ci| [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已废弃)。 | 39e41f4b71Sopenharmony_ci| [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写入封装器。 | 40e41f4b71Sopenharmony_ci| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Stop](#oh_avmuxer_stop) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 停止封装。 | 41e41f4b71Sopenharmony_ci| [OH_AVErrCode](_core.md#oh_averrcode) [OH_AVMuxer_Destroy](#oh_avmuxer_destroy) ([OH_AVMuxer](#oh_avmuxer) \*muxer) | 清理内部资源,销毁OH_AVMuxer实例。 | 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci 44e41f4b71Sopenharmony_ci## 类型定义说明 45e41f4b71Sopenharmony_ci 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci### OH_AVMuxer 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci``` 50e41f4b71Sopenharmony_citypedef struct OH_AVMuxer OH_AVMuxer 51e41f4b71Sopenharmony_ci``` 52e41f4b71Sopenharmony_ci**描述** 53e41f4b71Sopenharmony_ci为封装接口定义native层对象。 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci**起始版本:** 10 56e41f4b71Sopenharmony_ci 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci## 函数说明 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci### OH_AVMuxer_AddTrack() 62e41f4b71Sopenharmony_ci 63e41f4b71Sopenharmony_ci``` 64e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_AddTrack (OH_AVMuxer *muxer, int32_t *trackIndex, OH_AVFormat *trackFormat) 65e41f4b71Sopenharmony_ci``` 66e41f4b71Sopenharmony_ci**描述** 67e41f4b71Sopenharmony_ci向封装器添加音视频轨。每调用一次本接口可以在封装器中添加一个音视频轨。该接口必须在OH_AVMuxer_Start前调用。 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_ci**起始版本:** 10 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci**参数:** 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci| 名称 | 描述 | 76e41f4b71Sopenharmony_ci| -------- | -------- | 77e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 78e41f4b71Sopenharmony_ci| trackIndex | 用于获取该轨的索引,该值在OH_AVMuxer_WriteSample接口中使用。 如果音视频轨添加成功,该值大于或等于0,否则小于0。 | 79e41f4b71Sopenharmony_ci| trackFormat | 指向OH_AVFormat实例的指针。 | 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci**返回:** 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或trackFormat无效。 AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。AV_ERR_UNSUPPORT,不支持的mime类型。 AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci### OH_AVMuxer_Create() 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci``` 91e41f4b71Sopenharmony_ciOH_AVMuxer* OH_AVMuxer_Create (int32_t fd, OH_AVOutputFormat format) 92e41f4b71Sopenharmony_ci``` 93e41f4b71Sopenharmony_ci**描述** 94e41f4b71Sopenharmony_ci通过文件描述符fd和封装格式创建OH_AVMuxer实例。 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci**起始版本:** 10 99e41f4b71Sopenharmony_ci 100e41f4b71Sopenharmony_ci**参数:** 101e41f4b71Sopenharmony_ci 102e41f4b71Sopenharmony_ci| 名称 | 描述 | 103e41f4b71Sopenharmony_ci| -------- | -------- | 104e41f4b71Sopenharmony_ci| fd | 用读写方式打开(O_RDWR),由调用者关闭该fd。 | 105e41f4b71Sopenharmony_ci| format | 封装输出的文件格式,参考[OH_AVOutputFormat](_codec_base.md#oh_avoutputformat)。 | 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci**返回:** 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ci返回一个指向OH_AVMuxer实例的指针, 需要调用OH_AVMuxer_Destroy销毁。 110e41f4b71Sopenharmony_ci 111e41f4b71Sopenharmony_ci 112e41f4b71Sopenharmony_ci### OH_AVMuxer_Destroy() 113e41f4b71Sopenharmony_ci 114e41f4b71Sopenharmony_ci``` 115e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_Destroy (OH_AVMuxer *muxer) 116e41f4b71Sopenharmony_ci``` 117e41f4b71Sopenharmony_ci**描述** 118e41f4b71Sopenharmony_ci清理内部资源,销毁OH_AVMuxer实例。 119e41f4b71Sopenharmony_ci 120e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 121e41f4b71Sopenharmony_ci 122e41f4b71Sopenharmony_ci**起始版本:** 10 123e41f4b71Sopenharmony_ci 124e41f4b71Sopenharmony_ci**参数:** 125e41f4b71Sopenharmony_ci 126e41f4b71Sopenharmony_ci| 名称 | 描述 | 127e41f4b71Sopenharmony_ci| -------- | -------- | 128e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 129e41f4b71Sopenharmony_ci 130e41f4b71Sopenharmony_ci**返回:** 131e41f4b71Sopenharmony_ci 132e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,需调用者置空muxer;否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 133e41f4b71Sopenharmony_ci 134e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针。 135e41f4b71Sopenharmony_ci 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci### OH_AVMuxer_SetRotation() 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci``` 140e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_SetRotation (OH_AVMuxer *muxer, int32_t rotation) 141e41f4b71Sopenharmony_ci``` 142e41f4b71Sopenharmony_ci**描述** 143e41f4b71Sopenharmony_ci设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。该接口必须在OH_AVMuxer_Start前调用。 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci**起始版本:** 10 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci**参数:** 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci| 名称 | 描述 | 152e41f4b71Sopenharmony_ci| -------- | -------- | 153e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 154e41f4b71Sopenharmony_ci| rotation | 角度,必须为0、90、180 或 270。 | 155e41f4b71Sopenharmony_ci 156e41f4b71Sopenharmony_ci**返回:** 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 159e41f4b71Sopenharmony_ci 160e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针,或rotation无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。 161e41f4b71Sopenharmony_ci 162e41f4b71Sopenharmony_ci 163e41f4b71Sopenharmony_ci### OH_AVMuxer_Start() 164e41f4b71Sopenharmony_ci 165e41f4b71Sopenharmony_ci``` 166e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_Start (OH_AVMuxer *muxer) 167e41f4b71Sopenharmony_ci``` 168e41f4b71Sopenharmony_ci**描述** 169e41f4b71Sopenharmony_ci开始封装。该接口必须在OH_AVMuxer_AddTrack后,OH_AVMuxer_WriteSample前调用。 170e41f4b71Sopenharmony_ci 171e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 172e41f4b71Sopenharmony_ci 173e41f4b71Sopenharmony_ci**起始版本:** 10 174e41f4b71Sopenharmony_ci 175e41f4b71Sopenharmony_ci**参数:** 176e41f4b71Sopenharmony_ci 177e41f4b71Sopenharmony_ci| 名称 | 描述 | 178e41f4b71Sopenharmony_ci| -------- | -------- | 179e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci**返回:** 182e41f4b71Sopenharmony_ci 183e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。AV_ERR_UNKNOWN,未知错误。 186e41f4b71Sopenharmony_ci 187e41f4b71Sopenharmony_ci 188e41f4b71Sopenharmony_ci### OH_AVMuxer_Stop() 189e41f4b71Sopenharmony_ci 190e41f4b71Sopenharmony_ci``` 191e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_Stop (OH_AVMuxer *muxer) 192e41f4b71Sopenharmony_ci``` 193e41f4b71Sopenharmony_ci**描述** 194e41f4b71Sopenharmony_ci停止封装。封装器停止后不支持重新开始。 195e41f4b71Sopenharmony_ci 196e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 197e41f4b71Sopenharmony_ci 198e41f4b71Sopenharmony_ci**起始版本:** 10 199e41f4b71Sopenharmony_ci 200e41f4b71Sopenharmony_ci**参数:** 201e41f4b71Sopenharmony_ci 202e41f4b71Sopenharmony_ci| 名称 | 描述 | 203e41f4b71Sopenharmony_ci| -------- | -------- | 204e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 205e41f4b71Sopenharmony_ci 206e41f4b71Sopenharmony_ci**返回:** 207e41f4b71Sopenharmony_ci 208e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 209e41f4b71Sopenharmony_ci 210e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。 211e41f4b71Sopenharmony_ci 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ci### OH_AVMuxer_WriteSample() 214e41f4b71Sopenharmony_ci 215e41f4b71Sopenharmony_ci``` 216e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_WriteSample (OH_AVMuxer *muxer, uint32_t trackIndex, OH_AVMemory *sample, OH_AVCodecBufferAttr info) 217e41f4b71Sopenharmony_ci``` 218e41f4b71Sopenharmony_ci**描述** 219e41f4b71Sopenharmony_ci将sample写入封装器。该接口必须在OH_AVMuxer_Start后,OH_AVMuxer_Stop前调用。调用者需要按info中的时间顺序将sample写入正确的音视频轨。 220e41f4b71Sopenharmony_ci 221e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 222e41f4b71Sopenharmony_ci 223e41f4b71Sopenharmony_ci**起始版本:** 10 224e41f4b71Sopenharmony_ci 225e41f4b71Sopenharmony_ci**废弃版本:** 11 226e41f4b71Sopenharmony_ci 227e41f4b71Sopenharmony_ci**替代接口:**[OH_AVMuxer_WriteSampleBuffer](#oh_avmuxer_writesamplebuffer) 228e41f4b71Sopenharmony_ci 229e41f4b71Sopenharmony_ci**参数:** 230e41f4b71Sopenharmony_ci 231e41f4b71Sopenharmony_ci| 名称 | 描述 | 232e41f4b71Sopenharmony_ci| -------- | -------- | 233e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 234e41f4b71Sopenharmony_ci| trackIndex | 数据对应的音视频轨的索引。 | 235e41f4b71Sopenharmony_ci| sample | 编码或解封装得到的数据。 | 236e41f4b71Sopenharmony_ci| info | sample对应的描述信息,参考**OH_AVCodecBufferAttr**。 | 237e41f4b71Sopenharmony_ci 238e41f4b71Sopenharmony_ci**返回:** 239e41f4b71Sopenharmony_ci 240e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 241e41f4b71Sopenharmony_ci 242e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或sample无效,或info无效。AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。 243e41f4b71Sopenharmony_ci 244e41f4b71Sopenharmony_ci 245e41f4b71Sopenharmony_ci### OH_AVMuxer_WriteSampleBuffer() 246e41f4b71Sopenharmony_ci 247e41f4b71Sopenharmony_ci``` 248e41f4b71Sopenharmony_ciOH_AVErrCode OH_AVMuxer_WriteSampleBuffer (OH_AVMuxer *muxer, uint32_t trackIndex, const OH_AVBuffer *sample) 249e41f4b71Sopenharmony_ci``` 250e41f4b71Sopenharmony_ci**描述** 251e41f4b71Sopenharmony_ci将sample写入封装器。该接口必须在OH_AVMuxer_Start后,OH_AVMuxer_Stop前调用。 调用者需要按sample中的时间顺序将sample写入正确的音视频轨。 252e41f4b71Sopenharmony_ci 253e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Multimedia.Media.Muxer 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci**起始版本:** 11 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci**参数:** 258e41f4b71Sopenharmony_ci 259e41f4b71Sopenharmony_ci| 名称 | 描述 | 260e41f4b71Sopenharmony_ci| -------- | -------- | 261e41f4b71Sopenharmony_ci| muxer | 指向OH_AVMuxer实例的指针。 | 262e41f4b71Sopenharmony_ci| trackIndex | 数据对应的音视频轨的索引。 | 263e41f4b71Sopenharmony_ci| sample | 编码或解封装得到的数据。包含数据与数据属性 | 264e41f4b71Sopenharmony_ci 265e41f4b71Sopenharmony_ci**返回:** 266e41f4b71Sopenharmony_ci 267e41f4b71Sopenharmony_ci执行成功返回AV_ERR_OK,否则返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)。 268e41f4b71Sopenharmony_ci 269e41f4b71Sopenharmony_ciAV_ERR_INVALID_VAL,muxer为空指针,或trackIndex无效,或sample无效。 AV_ERR_OPERATE_NOT_PERMIT,不允许调用接口,它在无效状态下被调用。 AV_ERR_NO_MEMORY,申请内存失败。AV_ERR_UNKNOWN,未知错误。 270