• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &lt;&lt; 0, **AVCODEC_BUFFER_FLAGS_SYNC_FRAME** = 1 &lt;&lt; 1, **AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME** = 1 &lt;&lt; 2, **AVCODEC_BUFFER_FLAGS_CODEC_DATA**= 1 &lt;&lt; 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