• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# VideoEncoder
2
3
4## 概述
5
6VideoEncoder模块提供用于视频编码功能的函数和枚举。该模块在部分设备上可能不支持,可以通过[CanIUse](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/syscap.md)接口确认。
7
8@syscap SystemCapability.Multimedia.Media.VideoEncoder
9
10**起始版本:**
119
12
13## 汇总
14
15
16### 文件
17
18  | 名称 | 描述 |
19| -------- | -------- |
20| [native_avcodec_videoencoder.h](native__avcodec__videoencoder_8h.md) | 声明用于视频编码的Native API。<br>引用文件:<multimedia/player_framework/native_avcodec_videoencoder.h>  |
21
22
23### 类型定义
24
25  | 名称 | 描述 |
26| -------- | -------- |
27| [OH_VideoEncodeBitrateMode](#oh_videoencodebitratemode) | 视频编码的比特率模式。  |
28
29
30### 枚举
31
32  | 名称 | 描述 |
33| -------- | -------- |
34| [OH_VideoEncodeBitrateMode](#oh_videoencodebitratemode) { **CBR** = 0, **VBR** = 1, **CQ** = 2 } | 视频编码的比特率模式。  |
35
36
37### 函数
38
39  | 名称 | 描述 |
40| -------- | -------- |
41| [OH_VideoEncoder_CreateByMime](#oh_videoencoder_createbymime) (const char \*mime) | 通过mime类型创建一个视频编码器实例,大多数情况下推荐使用该接口。  |
42| [OH_VideoEncoder_CreateByName](#oh_videoencoder_createbyname) (const char \*name) | 通过视频编码器名称创建一个视频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。  |
43| [OH_VideoEncoder_Destroy](#oh_videoencoder_destroy) (OH_AVCodec \*codec) | 清空编码器内部资源,并销毁编码器实例。  |
44| [OH_VideoEncoder_SetCallback](#oh_videoencoder_setcallback) (OH_AVCodec \*codec, [OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md) callback, void \*userData) | 设置异步回调函数,使得你的应用能够响应视频编码器产生的事件,该接口被调用必须是在Prepare被调用前。  |
45| [OH_VideoEncoder_Configure](#oh_videoencoder_configure) (OH_AVCodec \*codec, OH_AVFormat \*format) | 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,该接口被调用必须是在Prepare被调用前。  |
46| [OH_VideoEncoder_Prepare](#oh_videoencoder_prepare) (OH_AVCodec \*codec) | 准备编码器内部资源,调用该接口前必须先调用Configure接口。  |
47| [OH_VideoEncoder_Start](#oh_videoencoder_start) (OH_AVCodec \*codec) | 启动编码器,该接口必须在已经Prepare成功后调用。 在启动成功后,编码器将开始报告[OH_AVCodecOnNeedInputData](_codec_base.md#oh_avcodeconneedinputdata)事件。  |
48| [OH_VideoEncoder_Stop](#oh_videoencoder_stop) (OH_AVCodec \*codec) | 停止编码器。在停止后可通过Start重新进入Started状态。  |
49| [OH_VideoEncoder_Flush](#oh_videoencoder_flush) (OH_AVCodec \*codec) | 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 失效,确保不要再访问这些索引对应的Buffers。  |
50| [OH_VideoEncoder_Reset](#oh_videoencoder_reset) (OH_AVCodec \*codec) | 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。  |
51| [OH_VideoEncoder_GetOutputDescription](#oh_videoencoder_getoutputdescription) (OH_AVCodec \*codec) | 获取该编码器输出数据的描述信息,需要注意的是,返回值所指向的OH_AVFormat实例的生命周期 将会再下一次调用该接口时或者该OH_AVCodec实例被销毁时失效。  |
52| [OH_VideoEncoder_SetParameter](#oh_videoencoder_setparameter) (OH_AVCodec \*codec, OH_AVFormat \*format) | 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败。  |
53| [OH_VideoEncoder_GetSurface](#oh_videoencoder_getsurface) (OH_AVCodec \*codec, OHNativeWindow \*\*window) | 从视频编码器获取输入Surface, 该接口被调用必须是在Prepare被调用前。  |
54| [OH_VideoEncoder_FreeOutputData](#oh_videoencoder_freeoutputdata) (OH_AVCodec \*codec, uint32_t index) | 将处理结束的输出Buffer交还给编码器。  |
55| [OH_VideoEncoder_NotifyEndOfStream](#oh_videoencoder_notifyendofstream) (OH_AVCodec \*codec) | 通知视频编码器输入码流已结束。surface模式推荐使用该接口通知编码器码流结束。  |
56
57
58## 类型定义说明
59
60
61### OH_VideoEncodeBitrateMode
62
63
64```
65typedef enum OH_VideoEncodeBitrateModeOH_VideoEncodeBitrateMode
66```
67**描述:**
68视频编码的比特率模式。
69
70@syscap SystemCapability.Multimedia.Media.VideoEncoder
71
72
73## 枚举类型说明
74
75
76### OH_VideoEncodeBitrateMode
77
78
79```
80enum OH_VideoEncodeBitrateMode
81```
82**描述:**
83视频编码的比特率模式。
84
85@syscap SystemCapability.Multimedia.Media.VideoEncoder
86
87  | 枚举值 | 描述 |
88| -------- | -------- |
89| CBR  | 恒定比特率模式 |
90| VBR  | 可变比特率模式 |
91| CQ  | 恒定质量模式 |
92
93
94## 函数说明
95
96
97### OH_VideoEncoder_Configure()
98
99
100```
101OH_AVErrCode OH_VideoEncoder_Configure (OH_AVCodec * codec, OH_AVFormat * format )
102```
103**描述:**
104配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,该接口被调用必须是在Prepare被调用前。
105
106@syscap SystemCapability.Multimedia.Media.VideoEncoder
107
108**参数:**
109
110  | 名称 | 描述 |
111| -------- | -------- |
112| codec | 指向OH_AVCodec实例的指针  |
113| format | 指向OH_AVFormat的指针,用以给出待编码视频轨道的描述信息  |
114
115**返回:**
116
117执行成功返回AV_ERR_OK
118
119执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
120
121
122### OH_VideoEncoder_CreateByMime()
123
124
125```
126OH_AVCodec* OH_VideoEncoder_CreateByMime (const char * mime)
127```
128**描述:**
129通过mime类型创建一个视频编码器实例,大多数情况下推荐使用该接口。
130
131@syscap SystemCapability.Multimedia.Media.VideoEncoder
132
133**参数:**
134
135  | 名称 | 描述 |
136| -------- | -------- |
137| mime | mime类型描述字符串,参考[OH_AVCODEC_MIMETYPE_VIDEO_AVC](_codec_base.md#oh_avcodec_mimetype_video_avc) |
138
139**返回:**
140
141返回一个指向OH_AVCodec实例的指针
142
143
144### OH_VideoEncoder_CreateByName()
145
146
147```
148OH_AVCodec* OH_VideoEncoder_CreateByName (const char * name)
149```
150**描述:**
151通过视频编码器名称创建一个视频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。
152
153@syscap SystemCapability.Multimedia.Media.VideoEncoder
154
155**参数:**
156
157  | 名称 | 描述 |
158| -------- | -------- |
159| name | 视频编码器名称  |
160
161**返回:**
162
163返回一个指向OH_AVCodec实例的指针
164
165
166### OH_VideoEncoder_Destroy()
167
168
169```
170OH_AVErrCode OH_VideoEncoder_Destroy (OH_AVCodec * codec)
171```
172**描述:**
173清空编码器内部资源,并销毁编码器实例。
174
175@syscap SystemCapability.Multimedia.Media.VideoEncoder
176
177**参数:**
178
179  | 名称 | 描述 |
180| -------- | -------- |
181| codec | 指向OH_AVCodec实例的指针  |
182
183**返回:**
184
185执行成功返回AV_ERR_OK
186
187执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
188
189
190### OH_VideoEncoder_Flush()
191
192
193```
194OH_AVErrCode OH_VideoEncoder_Flush (OH_AVCodec * codec)
195```
196**描述:**
197清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 失效,确保不要再访问这些索引对应的Buffers。
198
199@syscap SystemCapability.Multimedia.Media.VideoEncoder
200
201**参数:**
202
203  | 名称 | 描述 |
204| -------- | -------- |
205| codec | 指向OH_AVCodec实例的指针  |
206
207**返回:**
208
209执行成功返回AV_ERR_OK
210
211执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
212
213
214### OH_VideoEncoder_FreeOutputData()
215
216
217```
218OH_AVErrCode OH_VideoEncoder_FreeOutputData (OH_AVCodec * codec, uint32_t index )
219```
220**描述:**
221将处理结束的输出Buffer交还给编码器。
222
223@syscap SystemCapability.Multimedia.Media.VideoEncoder
224
225**参数:**
226
227  | 名称 | 描述 |
228| -------- | -------- |
229| codec | 指向OH_AVCodec实例的指针  |
230| index | 输出Buffer对应的索引值  |
231
232**返回:**
233
234执行成功返回AV_ERR_OK
235
236执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
237
238
239### OH_VideoEncoder_GetOutputDescription()
240
241
242```
243OH_AVFormat* OH_VideoEncoder_GetOutputDescription (OH_AVCodec * codec)
244```
245**描述:**
246获取该编码器输出数据的描述信息,需要注意的是,返回值所指向的OH_AVFormat实例的生命周期 将会再下一次调用该接口时或者该OH_AVCodec实例被销毁时失效。
247
248@syscap SystemCapability.Multimedia.Media.VideoEncoder
249
250**参数:**
251
252  | 名称 | 描述 |
253| -------- | -------- |
254| codec | 指向OH_AVCodec实例的指针  |
255
256**返回:**
257
258返回AVFormat实例的指针
259
260
261### OH_VideoEncoder_GetSurface()
262
263
264```
265OH_AVErrCode OH_VideoEncoder_GetSurface (OH_AVCodec * codec, OHNativeWindow ** window )
266```
267**描述:**
268从视频编码器获取输入Surface, 该接口被调用必须是在Prepare被调用前。
269
270@syscap SystemCapability.Multimedia.Media.VideoEncoder
271
272**参数:**
273
274  | 名称 | 描述 |
275| -------- | -------- |
276| codec | 指向OH_AVCodec实例的指针  |
277| window | 指向一个OHNativeWindow实例的指针  |
278
279**返回:**
280
281执行成功返回AV_ERR_OK
282
283执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
284
285
286### OH_VideoEncoder_NotifyEndOfStream()
287
288
289```
290OH_AVErrCode OH_VideoEncoder_NotifyEndOfStream (OH_AVCodec * codec)
291```
292**描述:**
293通知视频编码器输入码流已结束。surface模式推荐使用该接口通知编码器码流结束。
294
295@syscap SystemCapability.Multimedia.Media.VideoEncoder
296
297**参数:**
298
299  | 名称 | 描述 |
300| -------- | -------- |
301| codec | 指向OH_AVCodec实例的指针  |
302
303**返回:**
304
305执行成功返回AV_ERR_OK
306
307执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
308
309
310### OH_VideoEncoder_Prepare()
311
312
313```
314OH_AVErrCode OH_VideoEncoder_Prepare (OH_AVCodec * codec)
315```
316**描述:**
317准备编码器内部资源,调用该接口前必须先调用Configure接口。
318
319@syscap SystemCapability.Multimedia.Media.VideoEncoder
320
321**参数:**
322
323  | 名称 | 描述 |
324| -------- | -------- |
325| codec | 指向OH_AVCodec实例的指针  |
326
327**返回:**
328
329执行成功返回AV_ERR_OK
330
331执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
332
333
334### OH_VideoEncoder_Reset()
335
336
337```
338OH_AVErrCode OH_VideoEncoder_Reset (OH_AVCodec * codec)
339```
340**描述:**
341重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。
342
343@syscap SystemCapability.Multimedia.Media.VideoEncoder
344
345**参数:**
346
347  | 名称 | 描述 |
348| -------- | -------- |
349| codec | 指向OH_AVCodec实例的指针  |
350
351**返回:**
352
353执行成功返回AV_ERR_OK
354
355执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
356
357
358### OH_VideoEncoder_SetCallback()
359
360
361```
362OH_AVErrCode OH_VideoEncoder_SetCallback (OH_AVCodec * codec, OH_AVCodecAsyncCallback callback, void * userData )
363```
364**描述:**
365设置异步回调函数,使得你的应用能够响应视频编码器产生的事件,该接口被调用必须是在Prepare被调用前。
366
367@syscap SystemCapability.Multimedia.Media.VideoEncoder
368
369**参数:**
370
371  | 名称 | 描述 |
372| -------- | -------- |
373| codec | 指向OH_AVCodec实例的指针  |
374| callback | 一个包含所有回调函数的集合体,参考[OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md) |
375| userData | 用户特定数据  |
376
377**返回:**
378
379执行成功返回AV_ERR_OK
380
381执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
382
383
384### OH_VideoEncoder_SetParameter()
385
386
387```
388OH_AVErrCode OH_VideoEncoder_SetParameter (OH_AVCodec * codec, OH_AVFormat * format )
389```
390**描述:**
391向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败。
392
393@syscap SystemCapability.Multimedia.Media.VideoEncoder
394
395**参数:**
396
397  | 名称 | 描述 |
398| -------- | -------- |
399| codec | 指向OH_AVCodec实例的指针  |
400| format | OH_AVFormat句柄指针  |
401
402**返回:**
403
404执行成功返回AV_ERR_OK
405
406执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
407
408
409### OH_VideoEncoder_Start()
410
411
412```
413OH_AVErrCode OH_VideoEncoder_Start (OH_AVCodec * codec)
414```
415**描述:**
416启动编码器,该接口必须在已经Prepare成功后调用。 在启动成功后,编码器将开始报告[OH_AVCodecOnNeedInputData](_codec_base.md#oh_avcodeconneedinputdata)事件。
417
418@syscap SystemCapability.Multimedia.Media.VideoEncoder
419
420**参数:**
421
422  | 名称 | 描述 |
423| -------- | -------- |
424| codec | 指向OH_AVCodec实例的指针  |
425
426**返回:**
427
428执行成功返回AV_ERR_OK
429
430执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
431
432
433### OH_VideoEncoder_Stop()
434
435
436```
437OH_AVErrCode OH_VideoEncoder_Stop (OH_AVCodec * codec)
438```
439**描述:**
440停止编码器。在停止后可通过Start重新进入Started状态。
441
442@syscap SystemCapability.Multimedia.Media.VideoEncoder
443
444**参数:**
445
446  | 名称 | 描述 |
447| -------- | -------- |
448| codec | 指向OH_AVCodec实例的指针  |
449
450**返回:**
451
452执行成功返回AV_ERR_OK
453
454执行失败返回具体错误码,参考[OH_AVErrCode](_core.md#oh_averrcode)
455