1# CodecBase 2 3 4## 概述 5 6CodecBase模块提供运行音视频编解码通用的结构体、字符常量、枚举。该模块在部分设备上可能不支持,可以通过[CanIUse](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/syscap.md)接口确认。 7 8@syscap SystemCapability.Multimedia.Media.CodecBase 9 10**起始版本:** 119 12 13## 汇总 14 15 16### 文件 17 18 | 名称 | 描述 | 19| -------- | -------- | 20| [native_avcodec_base.h](native__avcodec__base_8h.md) | 声明运行音视频编解码通用的结构体、字符常量、枚举。<br>引用文件:<multimedia/player_framework/native_avcodec_base.h> | 21 22 23### 结构体 24 25 | 名称 | 描述 | 26| -------- | -------- | 27| [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) | 定义OH_AVCodec的Buffer描述信息。 | 28| [OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md) | AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给OH_AVCodec实例,并处理通过该回调报告 的信息,以确保AVCodec正常运转。 | 29 30 31### 类型定义 32 33 | 名称 | 描述 | 34| -------- | -------- | 35| [OH_AVCodecBufferFlags](#oh_avcodecbufferflags) | 枚举OH_AVCodec的Buffer标记的类别。 | 36| [OH_AVCodecBufferAttr](#oh_avcodecbufferattr) | 定义OH_AVCodec的Buffer描述信息。 | 37| (\*[OH_AVCodecOnError](#oh_avcodeconerror)) (OH_AVCodec \*codec, int32_t errorCode, void \*userData) | 当OH_AVCodec实例运行发生错误时,该函数指针会被调用以报告具体错误信息。 | 38| (\*[OH_AVCodecOnStreamChanged](#oh_avcodeconstreamchanged)) (OH_AVCodec \*codec, OH_AVFormat \*format, void \*userData) | 当输出流发生变化时,该函数指针会被调用以报告新的流描述信息。 需要注意的时,OH_AVFormat指针的生命周期仅维持在该函数指针被调用时上有效,禁止在调用结束后继续访问。 | 39| (\*[OH_AVCodecOnNeedInputData](#oh_avcodeconneedinputdata)) (OH_AVCodec \*codec, uint32_t index, OH_AVMemory \*data, void \*userData) | 当AVCodec运行过程中需要新的输入数据时,该函数指针会被调用,并携带一块可用的Buffer以供填入新的输入数据。 | 40| (\*[OH_AVCodecOnNewOutputData](#oh_avcodeconnewoutputdata)) (OH_AVCodec \*codec, uint32_t index, OH_AVMemory \*data, [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) \*attr, void \*userData) | 当AVCodec运行过程中产生了新的输出数据时,该函数指针会被调用,并携带一块包含新输出数据的Buffer, 需要注意的是,OH_AVCodecBufferAttr指针的生命周期仅维持在该函数指针被调用时有效,禁止调用结束后继续访问。 | 41| [OH_AVCodecAsyncCallback](#oh_avcodecasynccallback) | AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给OH_AVCodec实例,并处理通过该回调报告 的信息,以确保AVCodec正常运转。 | 42| [OH_MediaType](#oh_mediatype) | 媒体类型。 | 43| [OH_AVCProfile](#oh_avcprofile) | AVC Profile枚举。 | 44| [OH_AACProfile](#oh_aacprofile) | AAC Profile枚举。 | 45 46 47### 枚举 48 49 | 名称 | 描述 | 50| -------- | -------- | 51| [OH_AVCodecBufferFlags](#oh_avcodecbufferflags) {<br/>**AVCODEC_BUFFER_FLAGS_NONE** = 0, **AVCODEC_BUFFER_FLAGS_EOS** = 1 << 0, **AVCODEC_BUFFER_FLAGS_SYNC_FRAME** = 1 << 1, **AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME** = 1 << 2, **AVCODEC_BUFFER_FLAGS_CODEC_DATA**= 1 << 3<br/>} | 枚举OH_AVCodec的Buffer标记的类别。 | 52| [OH_MediaType](#oh_mediatype) { **MEDIA_TYPE_AUD** = 0, **MEDIA_TYPE_VID** = 1 } | 媒体类型。 | 53| [OH_AVCProfile](#oh_avcprofile) { **AVC_PROFILE_BASELINE** = 0, **AVC_PROFILE_HIGH** = 4, **AVC_PROFILE_MAIN** = 8 } | AVC Profile枚举。 | 54| [OH_AACProfile](#oh_aacprofile) { **AAC_PROFILE_LC** = 0 } | AAC Profile枚举。 | 55 56 57### 变量 58 59 | 名称 | 描述 | 60| -------- | -------- | 61| [OH_AVCodecBufferAttr::pts](#pts) | 以微秒为单位表示的该Buffer的Presentation时间戳 | 62| [OH_AVCodecBufferAttr::size](#size) | 以字节为单位表示的该Buffer内所包含数据的大小 | 63| [OH_AVCodecBufferAttr::offset](#offset) | 有效数据在该Buffer内的起始偏移量 | 64| [OH_AVCodecBufferAttr::flags](#flags) | u该Buffer具有的标记,也是多个[OH_AVCodecBufferFlags](#oh_avcodecbufferflags)的组合 | 65| [OH_AVCODEC_MIMETYPE_VIDEO_AVC](#oh_avcodec_mimetype_video_avc) | AVC视频编解码器的MIME类型。 | 66| [OH_AVCODEC_MIMETYPE_AUDIO_AAC](#oh_avcodec_mimetype_audio_aac) | AAC音频编解码器的MIME类型。 | 67| [OH_ED_KEY_TIME_STAMP](#oh_ed_key_time_stamp) | 提供统一的surface Buffer附属数据的字符描述符。 | 68| [OH_ED_KEY_EOS](#oh_ed_key_eos) | surface附属数据中结束流的字符描述符,值类型为bool | 69| [OH_MD_KEY_TRACK_TYPE](#oh_md_key_track_type) | 为媒体播放框架提供统一的字符描述符。 | 70| [OH_MD_KEY_CODEC_MIME](#oh_md_key_codec_mime) | mime类型的字符描述符,值类型为string | 71| [OH_MD_KEY_DURATION](#oh_md_key_duration) | duration的字符描述符,值类型为int64_t | 72| [OH_MD_KEY_BITRATE](#oh_md_key_bitrate) | 比特率的字符描述符,值类型为uint32_t | 73| [OH_MD_KEY_MAX_INPUT_SIZE](#oh_md_key_max_input_size) | 最大输入尺寸的字符描述符,值类型为uint32_t | 74| [OH_MD_KEY_WIDTH](#oh_md_key_width) | 视频宽度的字符描述符,值类型为uint32_t | 75| [OH_MD_KEY_HEIGHT](#oh_md_key_height) | 视频高度的字符描述符,值类型为uint32_t | 76| [OH_MD_KEY_PIXEL_FORMAT](#oh_md_key_pixel_format) | 视频像素格式的字符描述符,值类型为int32_t,具体见[OH_AVPixelFormat](_core.md#oh_avpixelformat) | 77| [OH_MD_KEY_AUDIO_SAMPLE_FORMAT](#oh_md_key_audio_sample_format) | 音频采样格式的字符描述符,值类型为uint32_t | 78| [OH_MD_KEY_FRAME_RATE](#oh_md_key_frame_rate) | 视频帧率的字符描述符,值类型为double | 79| [OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE](#oh_md_key_video_encode_bitrate_mode) | 视频编码比特率模式的字符描述符,值类型为int32_t,具体见[OH_VideoEncodeBitrateMode](_video_encoder.md#oh_videoencodebitratemode) | 80| [OH_MD_KEY_PROFILE](#oh_md_key_profile) | 音视频编码能力的字符描述符,值类型为int32_t,具体见[OH_AVCProfile](#oh_avcprofile)或[OH_AACProfile](#oh_aacprofile) | 81| [OH_MD_KEY_AUD_CHANNEL_COUNT](#oh_md_key_aud_channel_count) | 音频声道数的字符描述符,值类型为uint32_t | 82| [OH_MD_KEY_AUD_SAMPLE_RATE](#oh_md_key_aud_sample_rate) | 音频采样率的字符描述符,值类型为uint32_t | 83| [OH_MD_KEY_I_FRAME_INTERVAL](#oh_md_key_i_frame_interval) | I帧间隔时长的字符描述符,值类型为int32_t,单位是毫秒 | 84| [OH_MD_KEY_ROTATION](#oh_md_key_rotation) | surface旋转角度的字符描述符,值类型为int32_t,限于{0, 90, 180, 270},默认值为0 | 85 86 87## 类型定义说明 88 89 90### OH_AACProfile 91 92 93``` 94typedef enum OH_AACProfileOH_AACProfile 95``` 96**描述:** 97AAC Profile枚举。 98 99@syscap SystemCapability.Multimedia.Media.CodecBase 100 101 102### OH_AVCodecAsyncCallback 103 104 105``` 106typedef struct OH_AVCodecAsyncCallbackOH_AVCodecAsyncCallback 107``` 108**描述:** 109AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给OH_AVCodec实例,并处理通过该回调报告 的信息,以确保AVCodec正常运转。 110 111@syscap SystemCapability.Multimedia.Media.CodecBase 112 113**参数:** 114 115 | 名称 | 描述 | 116| -------- | -------- | 117| onError | 监听AVCodec运行错误,参考[OH_AVCodecOnError](#oh_avcodeconerror) | 118| onStreamChanged | 监听编解码流信息,参考[OH_AVCodecOnStreamChanged](#oh_avcodeconstreamchanged) | 119| onNeedInputData | 监听编解码需要输入数据,参考[OH_AVCodecOnNeedInputData](#oh_avcodeconneedinputdata) | 120| onNeedInputData | 监听编解码产生输出数据,参考[OH_AVCodecOnNewOutputData](#oh_avcodeconnewoutputdata) | 121 122 123### OH_AVCodecBufferAttr 124 125 126``` 127typedef struct OH_AVCodecBufferAttrOH_AVCodecBufferAttr 128``` 129**描述:** 130定义OH_AVCodec的Buffer描述信息。 131 132@syscap SystemCapability.Multimedia.Media.CodecBase 133 134 135### OH_AVCodecBufferFlags 136 137 138``` 139typedef enum OH_AVCodecBufferFlagsOH_AVCodecBufferFlags 140``` 141**描述:** 142枚举OH_AVCodec的Buffer标记的类别。 143 144@syscap SystemCapability.Multimedia.Media.CodecBase 145 146 147### OH_AVCodecOnError 148 149 150``` 151typedef void(* OH_AVCodecOnError) (OH_AVCodec *codec, int32_t errorCode, void *userData) 152``` 153**描述:** 154当OH_AVCodec实例运行发生错误时,该函数指针会被调用以报告具体错误信息。 155 156@syscap SystemCapability.Multimedia.Media.CodecBase 157 158**参数:** 159 160 | 名称 | 描述 | 161| -------- | -------- | 162| codec | OH_AVCodec实例 | 163| errorCode | 具体错误码 | 164| userData | 用户特定数据 | 165 166 167### OH_AVCodecOnNeedInputData 168 169 170``` 171typedef void(* OH_AVCodecOnNeedInputData) (OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, void *userData) 172``` 173**描述:** 174当AVCodec运行过程中需要新的输入数据时,该函数指针会被调用,并携带一块可用的Buffer以供填入新的输入数据。 175 176@syscap SystemCapability.Multimedia.Media.CodecBase 177 178**参数:** 179 180 | 名称 | 描述 | 181| -------- | -------- | 182| codec | OH_AVCodec实例 | 183| index | 新的可用的输入Buffer对应的索引 | 184| data | 新的可用的输入Buffer | 185| userData | 用户特定数据 | 186 187 188### OH_AVCodecOnNewOutputData 189 190 191``` 192typedef void(* OH_AVCodecOnNewOutputData) (OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, OH_AVCodecBufferAttr *attr, void *userData) 193``` 194**描述:** 195当AVCodec运行过程中产生了新的输出数据时,该函数指针会被调用,并携带一块包含新输出数据的Buffer, 需要注意的是,OH_AVCodecBufferAttr指针的生命周期仅维持在该函数指针被调用时有效,禁止调用结束后继续访问。 196 197@syscap SystemCapability.Multimedia.Media.CodecBase 198 199**参数:** 200 201 | 名称 | 描述 | 202| -------- | -------- | 203| codec | OH_AVCodec实例 | 204| index | 新的输出Buffer对应的索引 | 205| data | 包含新的输出数据的Buffer | 206| attr | 新的输出Buffer的描述信息,具体参考[OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) | 207| userData | specified data | 208 209 210### OH_AVCodecOnStreamChanged 211 212 213``` 214typedef void(* OH_AVCodecOnStreamChanged) (OH_AVCodec *codec, OH_AVFormat *format, void *userData) 215``` 216**描述:** 217当输出流发生变化时,该函数指针会被调用以报告新的流描述信息。 需要注意的时,OH_AVFormat指针的生命周期仅维持在该函数指针被调用时上有效,禁止在调用结束后继续访问。 218 219@syscap SystemCapability.Multimedia.Media.CodecBase 220 221**参数:** 222 223 | 名称 | 描述 | 224| -------- | -------- | 225| codec | OH_AVCodec实例 | 226| format | 新的输出流描述信息 | 227| userData | 用户特定数据 | 228 229 230### OH_AVCProfile 231 232 233``` 234typedef enum OH_AVCProfileOH_AVCProfile 235``` 236**描述:** 237AVC Profile枚举。 238 239@syscap SystemCapability.Multimedia.Media.CodecBase 240 241 242### OH_MediaType 243 244 245``` 246typedef enum OH_MediaTypeOH_MediaType 247``` 248**描述:** 249媒体类型。 250 251@syscap SystemCapability.Multimedia.Media.CodecBase 252 253 254## 枚举类型说明 255 256 257### OH_AACProfile 258 259 260``` 261enum OH_AACProfile 262``` 263**描述:** 264AAC Profile枚举。 265 266@syscap SystemCapability.Multimedia.Media.CodecBase 267 268 269### OH_AVCodecBufferFlags 270 271 272``` 273enum OH_AVCodecBufferFlags 274``` 275**描述:** 276枚举OH_AVCodec的Buffer标记的类别。 277 278@syscap SystemCapability.Multimedia.Media.CodecBase 279 280 | 枚举值 | 描述 | 281| -------- | -------- | 282| AVCODEC_BUFFER_FLAGS_EOS | 表明该Buffer是End-of-Stream帧 | 283| AVCODEC_BUFFER_FLAGS_SYNC_FRAME | 表明该Buffer内包含关键帧 | 284| AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME | 表明该Buffer内包含的数据仅仅为一帧的一部分 | 285| AVCODEC_BUFFER_FLAGS_CODEC_DATA | 表明该Buffer包含Codec-Specific-Data | 286 287 288### OH_AVCProfile 289 290 291``` 292enum OH_AVCProfile 293``` 294**描述:** 295AVC Profile枚举。 296 297@syscap SystemCapability.Multimedia.Media.CodecBase 298 299 300### OH_MediaType 301 302 303``` 304enum OH_MediaType 305``` 306**描述:** 307媒体类型。 308 309@syscap SystemCapability.Multimedia.Media.CodecBase 310 311 | 枚举值 | 描述 | 312| -------- | -------- | 313| MEDIA_TYPE_AUD | 音频轨道 | 314| MEDIA_TYPE_VID | 视频轨道 | 315 316 317## 变量说明 318 319 320### flags 321 322 323``` 324uint32_t OH_AVCodecBufferAttr::flags 325``` 326**描述:** 327该Buffer具有的标记,也是多个[OH_AVCodecBufferFlags](#oh_avcodecbufferflags)的组合 328 329 330### offset 331 332 333``` 334int32_t OH_AVCodecBufferAttr::offset 335``` 336**描述:** 337有效数据在该Buffer内的起始偏移量 338 339 340### OH_AVCODEC_MIMETYPE_AUDIO_AAC 341 342 343``` 344const char* OH_AVCODEC_MIMETYPE_AUDIO_AAC 345``` 346**描述:** 347AAC音频编解码器的MIME类型。 348 349@syscap SystemCapability.Multimedia.Media.CodecBase 350 351 352### OH_AVCODEC_MIMETYPE_VIDEO_AVC 353 354 355``` 356const char* OH_AVCODEC_MIMETYPE_VIDEO_AVC 357``` 358**描述:** 359AVC视频编解码器的MIME类型。 360 361@syscap SystemCapability.Multimedia.Media.CodecBase 362 363 364### OH_ED_KEY_EOS 365 366 367``` 368const char* OH_ED_KEY_EOS 369``` 370**描述:** 371surface附属数据中结束流的字符描述符,值类型为bool 372 373 374### OH_ED_KEY_TIME_STAMP 375 376 377``` 378const char* OH_ED_KEY_TIME_STAMP 379``` 380**描述:** 381提供统一的surface Buffer附属数据的字符描述符。 382 383@syscap SystemCapability.Multimedia.Media.CodecBase 384 385 386### OH_MD_KEY_AUD_CHANNEL_COUNT 387 388 389``` 390const char* OH_MD_KEY_AUD_CHANNEL_COUNT 391``` 392**描述:** 393音频声道数的字符描述符,值类型为uint32_t 394 395 396### OH_MD_KEY_AUD_SAMPLE_RATE 397 398 399``` 400const char* OH_MD_KEY_AUD_SAMPLE_RATE 401``` 402**描述:** 403音频采样率的字符描述符,值类型为uint32_t 404 405 406### OH_MD_KEY_AUDIO_SAMPLE_FORMAT 407 408 409``` 410const char* OH_MD_KEY_AUDIO_SAMPLE_FORMAT 411``` 412**描述:** 413音频采样格式的字符描述符,值类型为uint32_t 414 415 416### OH_MD_KEY_BITRATE 417 418 419``` 420const char* OH_MD_KEY_BITRATE 421``` 422**描述:** 423比特率的字符描述符,值类型为uint32_t 424 425 426### OH_MD_KEY_CODEC_MIME 427 428 429``` 430const char* OH_MD_KEY_CODEC_MIME 431``` 432**描述:** 433mime类型的字符描述符,值类型为string 434 435 436### OH_MD_KEY_DURATION 437 438 439``` 440const char* OH_MD_KEY_DURATION 441``` 442**描述:** 443duration的字符描述符,值类型为int64_t 444 445 446### OH_MD_KEY_FRAME_RATE 447 448 449``` 450const char* OH_MD_KEY_FRAME_RATE 451``` 452**描述:** 453视频帧率的字符描述符,值类型为double 454 455 456### OH_MD_KEY_HEIGHT 457 458 459``` 460const char* OH_MD_KEY_HEIGHT 461``` 462**描述:** 463视频高度的字符描述符,值类型为uint32_t 464 465 466### OH_MD_KEY_I_FRAME_INTERVAL 467 468 469``` 470const char* OH_MD_KEY_I_FRAME_INTERVAL 471``` 472**描述:** 473I帧间隔时长的字符描述符,值类型为int32_t,单位是毫秒 474 475 476### OH_MD_KEY_MAX_INPUT_SIZE 477 478 479``` 480const char* OH_MD_KEY_MAX_INPUT_SIZE 481``` 482**描述:** 483最大输入尺寸的字符描述符,值类型为uint32_t 484 485 486### OH_MD_KEY_PIXEL_FORMAT 487 488 489``` 490const char* OH_MD_KEY_PIXEL_FORMAT 491``` 492**描述:** 493视频像素格式的字符描述符,值类型为int32_t,具体见[OH_AVPixelFormat](_core.md#oh_avpixelformat) 494 495 496### OH_MD_KEY_PROFILE 497 498 499``` 500const char* OH_MD_KEY_PROFILE 501``` 502**描述:** 503音视频编码能力的字符描述符,值类型为int32_t,具体见[OH_AVCProfile](#oh_avcprofile)或[OH_AACProfile](#oh_aacprofile) 504 505 506### OH_MD_KEY_ROTATION 507 508 509``` 510const char* OH_MD_KEY_ROTATION 511``` 512**描述:** 513surface旋转角度的字符描述符,值类型为int32_t,限于{0, 90, 180, 270},默认值为0 514 515 516### OH_MD_KEY_TRACK_TYPE 517 518 519``` 520const char* OH_MD_KEY_TRACK_TYPE 521``` 522**描述:** 523为媒体播放框架提供统一的字符描述符。 524 525@syscap SystemCapability.Multimedia.Media.CodecBase 526 527 528### OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE 529 530 531``` 532const char* OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE 533``` 534**描述:** 535视频编码比特率模式的字符描述符,值类型为int32_t,具体见[OH_VideoEncodeBitrateMode](_video_encoder.md#oh_videoencodebitratemode) 536 537 538### OH_MD_KEY_WIDTH 539 540 541``` 542const char* OH_MD_KEY_WIDTH 543``` 544**描述:** 545视频宽度的字符描述符,值类型为uint32_t 546 547 548### pts 549 550 551``` 552int64_t OH_AVCodecBufferAttr::pts 553``` 554**描述:** 555以微秒为单位表示的该Buffer的Presentation时间戳 556 557 558### size 559 560 561``` 562int32_t OH_AVCodecBufferAttr::size 563``` 564**描述:** 565以字节为单位表示的该Buffer内所包含数据的大小 566