• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# VideoEncoder
2
3
4## 概述
5
6VideoEncoder模块提供用于视频编码的函数。
7
8**系统能力:** SystemCapability.Multimedia.VideoEncoder
9
10**起始版本:** 9
11
12
13## 汇总
14
15
16### 文件
17
18| 名称 | 描述 |
19| -------- | -------- |
20| [native_avcodec_videoencoder.h](native__avcodec__videoencoder_8h.md) | 声明用于视频编码的Native API。 |
21
22
23### 类型定义
24
25| 名称 | 描述 |
26| -------- | -------- |
27| typedef enum [OH_VideoEncodeBitrateMode](#oh_videoencodebitratemode-1) [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_AVCodec \* [OH_VideoEncoder_CreateByMime](#oh_videoencoder_createbymime) (const char \*mime) | 从MIME类型创建视频编码器实例。 |
42| OH_AVCodec \* [OH_VideoEncoder_CreateByName](#oh_videoencoder_createbyname) (const char \*name) | 通过视频编码器名称创建视频编码器实例。 |
43| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Destroy](#oh_videoencoder_destroy) (OH_AVCodec \*codec) | 清理编码器内部资源,销毁编码器实例。 |
44| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_SetCallback](#oh_videoencoder_setcallback) (OH_AVCodec \*codec, [OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md) callback, void \*userData) | 设置异步回调函数,让应用可以响应视频编码器生成的事件。 |
45| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_RegisterCallback](#oh_videoencoder_registercallback) (OH_AVCodec \*codec, [OH_AVCodecCallback](_o_h___a_v_codec_callback.md) callback, void \*userData) | 注册异步回调函数,让应用可以响应视频编码器生成的事件。 |
46| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Configure](#oh_videoencoder_configure) (OH_AVCodec \*codec, OH_AVFormat \*format) | 配置视频编码器,通常需要配置要编码的视频轨的描述信息。 |
47| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Prepare](#oh_videoencoder_prepare) (OH_AVCodec \*codec) | 准备编码器的内部资源。 |
48| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Start](#oh_videoencoder_start) (OH_AVCodec \*codec) | 启动编码器,准备成功后必须调用此接口。 |
49| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Stop](#oh_videoencoder_stop) (OH_AVCodec \*codec) | 停止编码器。 |
50| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Flush](#oh_videoencoder_flush) (OH_AVCodec \*codec) | 清除编码器中缓存的输入和输出数据。 |
51| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_Reset](#oh_videoencoder_reset) (OH_AVCodec \*codec) | 重置编码器。 |
52| OH_AVFormat \* [OH_VideoEncoder_GetOutputDescription](#oh_videoencoder_getoutputdescription) (OH_AVCodec \*codec) | 获取编码器输出数据的描述信息。 |
53| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_SetParameter](#oh_videoencoder_setparameter) (OH_AVCodec \*codec, OH_AVFormat \*format) | 为编码器设置动态参数。 |
54| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_GetSurface](#oh_videoencoder_getsurface) (OH_AVCodec \*codec, OHNativeWindow \*\*window) | 从视频编码器获取输入Surface。 |
55| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_FreeOutputData](#oh_videoencoder_freeoutputdata) (OH_AVCodec \*codec, uint32_t index) | 将处理后的输出缓冲区返回给编码器。 |
56| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_NotifyEndOfStream](#oh_videoencoder_notifyendofstream) (OH_AVCodec \*codec) | 通知视频编码器输入流已结束。 |
57| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_PushInputData](#oh_videoencoder_pushinputdata) (OH_AVCodec \*codec, uint32_t index, [OH_AVCodecBufferAttr](_o_h___a_v_codec_buffer_attr.md) attr) | 将填入数据的输入缓冲区提交给视频编码器。 |
58| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_PushInputBuffer](#oh_videoencoder_pushinputbuffer) (OH_AVCodec \*codec, uint32_t index) | 将填入数据的输入缓冲区提交给视频编码器。 |
59| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_FreeOutputBuffer](#oh_videoencoder_freeoutputbuffer) (OH_AVCodec \*codec, uint32_t index) | 将处理后的输出缓冲区返回给编码器。 |
60| OH_AVFormat \* [OH_VideoEncoder_GetInputDescription](#oh_videoencoder_getinputdescription) (OH_AVCodec \*codec) | 获取视频编码器接收的描述信息。 |
61| [OH_AVErrCode](_core.md#oh_averrcode) [OH_VideoEncoder_IsValid](#oh_videoencoder_isvalid) (OH_AVCodec \*codec, bool \*isValid) | 检查当前编码实例是否有效。 |
62
63
64## 类型定义说明
65
66
67### OH_VideoEncodeBitrateMode
68
69```
70typedef enum OH_VideoEncodeBitrateMode OH_VideoEncodeBitrateMode
71```
72
73**描述**
74
75视频编码器的比特率模式。
76
77**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
78
79**起始版本:** 9
80
81
82## 枚举类型说明
83
84
85### OH_VideoEncodeBitrateMode
86
87```
88enum OH_VideoEncodeBitrateMode
89```
90
91**描述**
92
93视频编码器的比特率模式。
94
95**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
96
97**起始版本:** 9
98
99| 枚举值 | 描述 |
100| -------- | -------- |
101| CBR | 恒定比特率模式。 |
102| VBR | 可变比特率模式。 |
103| CQ | 恒定质量模式。 |
104
105
106## 函数说明
107
108
109### OH_VideoEncoder_Configure()
110
111```
112OH_AVErrCode OH_VideoEncoder_Configure (OH_AVCodec *codec, OH_AVFormat *format )
113```
114
115**描述**
116
117配置视频编码器,通常需要配置要编码的视频轨的描述信息。必须在调用Prepare之前,调用此接口。
118
119**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
120
121**起始版本:** 9
122
123**参数:**
124
125| 名称 | 描述 |
126| -------- | -------- |
127| codec | 指向视频编码实例的指针。 |
128| format | 指向OH_AVFormat的指针,用于给出要编码的视频轨的描述。 |
129
130**返回:**
131
132如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
133
134
135### OH_VideoEncoder_CreateByMime()
136
137```
138OH_AVCodec* OH_VideoEncoder_CreateByMime (const char *mime)
139```
140
141**描述**
142
143从MIME类型创建视频编码器实例,大多数情况下建议使用。
144
145**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
146
147**起始版本:** 9
148
149**参数:**
150
151| 名称 | 描述 |
152| -------- | -------- |
153| mime | MIME类型描述字符串,请参阅[AVCODEC_MIMETYPE](_codec_base.md#变量)。 |
154
155**返回:**
156
157成功则返回一个指向视频编码实例的指针,失败则返回nullptr。
158
159
160### OH_VideoEncoder_CreateByName()
161
162```
163OH_AVCodec* OH_VideoEncoder_CreateByName (const char *name)
164```
165
166**描述**
167
168通过视频编码器名称创建视频编码器实例。使用此接口的前提是知道编码器的确切名称。
169
170**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
171
172**起始版本:** 9
173
174**参数:**
175
176| 名称 | 描述 |
177| -------- | -------- |
178| name | 视频编码器名称。 |
179
180**返回:**
181
182成功则返回一个指向视频编码实例的指针,失败则返回nullptr。
183
184
185### OH_VideoEncoder_Destroy()
186
187```
188OH_AVErrCode OH_VideoEncoder_Destroy (OH_AVCodec *codec)
189```
190
191**描述**
192
193清理编码器内部资源,销毁编码器实例。
194
195**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
196
197**起始版本:** 9
198
199**参数:**
200
201| 名称 | 描述 |
202| -------- | -------- |
203| codec | 指向视频编码实例的指针。 |
204
205**返回:**
206
207如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
208
209
210### OH_VideoEncoder_Flush()
211
212```
213OH_AVErrCode OH_VideoEncoder_Flush (OH_AVCodec *codec)
214```
215
216**描述**
217
218清除编码器中缓存的输入和输出数据。
219
220调用此接口后,以前通过异步回调上报的所有缓冲区索引都将失效,请确保不要访问这些索引对应的缓冲区。
221
222**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
223
224**起始版本:** 9
225
226**参数:**
227
228| 名称 | 描述 |
229| -------- | -------- |
230| codec | 指向视频编码实例的指针。 |
231
232**返回:**
233
234如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
235
236
237### OH_VideoEncoder_FreeOutputBuffer()
238
239```
240OH_AVErrCode OH_VideoEncoder_FreeOutputBuffer (OH_AVCodec *codec, uint32_t index )
241```
242
243**描述**
244
245将处理后的输出缓冲区返回给编码器。
246
247**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
248
249**起始版本:** 11
250
251**参数:**
252
253| 名称 | 描述 |
254| -------- | -------- |
255| codec | 指向视频编码实例的指针。 |
256| index | 输出缓冲区对应的索引值。 |
257
258**返回:**
259
260如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
261
262
263### OH_VideoEncoder_FreeOutputData()
264
265```
266OH_AVErrCode OH_VideoEncoder_FreeOutputData (OH_AVCodec *codec, uint32_t index )
267```
268
269**描述**
270
271将处理后的输出缓冲区返回给编码器。
272
273**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
274
275**起始版本:** 9
276
277**废弃版本:** 11
278
279**替代接口:**[OH_VideoEncoder_FreeOutputBuffer](#oh_videoencoder_freeoutputbuffer)
280
281**参数:**
282
283| 名称 | 描述 |
284| -------- | -------- |
285| codec | 指向视频编码实例的指针。 |
286| index | 输出缓冲区对应的索引值。 |
287
288**返回:**
289
290如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
291
292
293### OH_VideoEncoder_GetInputDescription()
294
295```
296OH_AVFormat* OH_VideoEncoder_GetInputDescription (OH_AVCodec *codec)
297```
298
299**描述**
300
301获取视频编码器接收的描述信息,调用[OH_VideoEncoder_Configure](#oh_videoencoder_configure)后调用此接口。 应该注意的是,返回指针所指向的OH_AVFormat实例的生命周期需要由调用者手动释放,请参阅[OH_AVFormat_Destroy](_core.md#oh_avformat_destroy)。
302
303**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
304
305**起始版本:** 10
306
307**参数:**
308
309| 名称 | 描述 |
310| -------- | -------- |
311| codec | 指向视频编码实例的指针。 |
312
313**返回:**
314
315返回指向OH_AVFormat实例的指针。
316
317
318### OH_VideoEncoder_GetOutputDescription()
319
320```
321OH_AVFormat* OH_VideoEncoder_GetOutputDescription (OH_AVCodec *codec)
322```
323
324**描述**
325
326获取编码器输出数据的描述信息。
327
328需要注意的是,返回值指向的OH_AVFormat实例的生命周期需要调用者手动释放。
329
330**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
331
332**起始版本:** 9
333
334**参数:**
335
336| 名称 | 描述 |
337| -------- | -------- |
338| codec | 指向视频编码实例的指针。 |
339
340**返回:**
341
342返回指向OH_AVFormat实例的指针。
343
344
345### OH_VideoEncoder_GetSurface()
346
347```
348OH_AVErrCode OH_VideoEncoder_GetSurface (OH_AVCodec *codec, OHNativeWindow ** window )
349```
350
351**描述**
352
353从视频编码器获取输入Surface,必须在调用Prepare之前调用此接口。
354
355**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
356
357**起始版本:** 9
358
359**参数:**
360
361| 名称 | 描述 |
362| -------- | -------- |
363| codec | 指向视频编码实例的指针。 |
364| window | 指向OHNativeWindow实例的指针。 应用负责管理window的生命周期,结束时调用OH_NativeWindow_DestroyNativeWindow释放。 |
365
366**返回:**
367
368如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
369
370
371### OH_VideoEncoder_IsValid()
372
373```
374OH_AVErrCode OH_VideoEncoder_IsValid (OH_AVCodec *codec, bool *isValid )
375```
376
377**描述**
378
379检查当前编码实例是否有效。
380
381**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
382
383**起始版本:** 10
384
385**参数:**
386
387| 名称 | 描述 |
388| -------- | -------- |
389| codec | 指向视频编码实例的指针。 |
390| isValid | 输出参数。指向布尔实例的指针,如果编码器实例有效,则为true,如果编码器实例无效,则为false。 |
391
392**返回:**
393
394如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
395
396
397### OH_VideoEncoder_NotifyEndOfStream()
398
399```
400OH_AVErrCode OH_VideoEncoder_NotifyEndOfStream (OH_AVCodec *codec)
401```
402
403**描述**
404
405通知视频编码器输入流已结束。建议使用此接口进行通知。编码器surface模式下,输入流的结束通知。
406
407**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
408
409**起始版本:** 9
410
411**参数:**
412
413| 名称 | 描述 |
414| -------- | -------- |
415| codec | 指向视频编码实例的指针。 |
416
417**返回:**
418
419如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
420
421
422### OH_VideoEncoder_Prepare()
423
424```
425OH_AVErrCode OH_VideoEncoder_Prepare (OH_AVCodec *codec)
426```
427
428**描述**
429
430若要准备编码器的内部资源,必须先调用Configure接口,再调用此接口。
431
432**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
433
434**起始版本:** 9
435
436**参数:**
437
438| 名称 | 描述 |
439| -------- | -------- |
440| codec | 指向视频编码实例的指针。 |
441
442**返回:**
443
444如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
445
446
447### OH_VideoEncoder_PushInputBuffer()
448
449```
450OH_AVErrCode OH_VideoEncoder_PushInputBuffer (OH_AVCodec *codec, uint32_t index )
451```
452
453**描述**
454
455将填入数据的输入缓冲区提交给视频编码器。
456
457**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
458
459**起始版本:** 11
460
461**参数:**
462
463| 名称 | 描述 |
464| -------- | -------- |
465| codec | 指向视频编码实例的指针。 |
466| index | 输入缓冲区对应的索引值。 |
467
468**返回:**
469
470如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
471
472
473### OH_VideoEncoder_PushInputData()
474
475```
476OH_AVErrCode OH_VideoEncoder_PushInputData (OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr )
477```
478
479**描述**
480
481将填入数据的输入缓冲区提交给视频编码器。
482
483**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
484
485**起始版本:** 10
486
487**废弃版本:** 11
488
489**替代接口:**[OH_VideoEncoder_PushInputBuffer](#oh_videoencoder_pushinputbuffer)
490
491**参数:**
492
493| 名称 | 描述 |
494| -------- | -------- |
495| codec | 指向视频编码实例的指针。 |
496| index | 输入缓冲区对应的索引值。 |
497| attr | 缓冲区中包含数据的描述信息。 |
498
499**返回:**
500
501如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
502
503
504### OH_VideoEncoder_RegisterCallback()
505
506```
507OH_AVErrCode OH_VideoEncoder_RegisterCallback (OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData )
508```
509
510**描述**
511
512注册异步回调函数,让应用可以响应视频编码器生成的事件。在调用Prepare之前,必须调用此接口。
513
514**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
515
516**起始版本:** 11
517
518**参数:**
519
520| 名称 | 描述 |
521| -------- | -------- |
522| codec | 指向视频编码实例的指针。 |
523| callback | 所有回调函数的集合,请参阅[OH_AVCodecCallback](_o_h___a_v_codec_callback.md)。 |
524| userData | 用户特定数据。 |
525
526**返回:**
527
528如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
529
530
531### OH_VideoEncoder_Reset()
532
533```
534OH_AVErrCode OH_VideoEncoder_Reset (OH_AVCodec *codec)
535```
536
537**描述**
538
539重置编码器。如果要继续编码,需要再次调用Configure接口配置编码器实例。
540
541**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
542
543**起始版本:** 9
544
545**参数:**
546
547| 名称 | 描述 |
548| -------- | -------- |
549| codec | 指向视频编码实例的指针。 |
550
551**返回:**
552
553如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
554
555
556### OH_VideoEncoder_SetCallback()
557
558```
559OH_AVErrCode OH_VideoEncoder_SetCallback (OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData )
560```
561
562**描述**
563
564设置异步回调函数,让应用可以响应视频编码器生成的事件。在调用Prepare之前,必须调用此接口。
565
566**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
567
568**起始版本:** 9
569
570**废弃版本:** 11
571
572**替代接口:**[OH_VideoEncoder_RegisterCallback](#oh_videoencoder_registercallback)
573
574**参数:**
575
576| 名称 | 描述 |
577| -------- | -------- |
578| codec | 指向视频编码实例的指针。 |
579| callback | 所有回调函数的集合,请参阅[OH_AVCodecAsyncCallback](_o_h___a_v_codec_async_callback.md)。 |
580| userData | 用户特定数据。 |
581
582**返回:**
583
584如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
585
586
587### OH_VideoEncoder_SetParameter()
588
589```
590OH_AVErrCode OH_VideoEncoder_SetParameter (OH_AVCodec *codec, OH_AVFormat *format )
591```
592
593**描述**
594
595为编码器设置动态参数。 注意,此接口只有在编码器启动后才能调用。 同时,不正确的参数设置可能会导致编码失败。
596
597**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
598
599**起始版本:** 9
600
601**参数:**
602
603| 名称 | 描述 |
604| -------- | -------- |
605| codec | 指向视频编码实例的指针。 |
606| format | 指向OH_AVFormat实例的指针。 |
607
608**返回:**
609
610如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
611
612
613### OH_VideoEncoder_Start()
614
615```
616OH_AVErrCode OH_VideoEncoder_Start (OH_AVCodec *codec)
617```
618
619**描述**
620
621启动编码器,准备成功后必须调用此接口。成功启动后,编码器将开始报告注册的回调事件。
622
623**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
624
625**起始版本:** 9
626
627**参数:**
628
629| 名称 | 描述 |
630| -------- | -------- |
631| codec | 指向视频编码实例的指针。 |
632
633**返回:**
634
635如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
636
637
638### OH_VideoEncoder_Stop()
639
640```
641OH_AVErrCode OH_VideoEncoder_Stop (OH_AVCodec *codec)
642```
643
644**描述**
645
646停止编码器。停止之后,你可以通过Start接口进入Started状态。
647
648**系统能力:** SystemCapability.Multimedia.Media.VideoEncoder
649
650**起始版本:** 9
651
652**参数:**
653
654| 名称 | 描述 |
655| -------- | -------- |
656| codec | 指向视频编码实例的指针。 |
657
658**返回:**
659
660如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅[OH_AVErrCode](_core.md#oh_averrcode)。
661