## 概述

PhonePC/2in1TabletTVWearable

声明用于视频解码的Native API。

**引用文件：** <multimedia/player\_framework/native\_avcodec\_videodecoder.h>

**库：** libnative\_media\_vdec.so

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**相关模块：** [VideoDecoder](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-videodecoder)

**相关示例：** [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)

接口在每个版本的支持情况以及在解码过程中可以调用的情况，如下图所示：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/73/v3/PjSgCDoPQG-S13ut-mBQZQ/zh-cn_image_0000002599479699.png?HW-CC-KV=V1&HW-CC-Date=20260511T053533Z&HW-CC-Expire=86400&HW-CC-Sign=A399AFCF2CC81EE71969ABB69628BD0D407B6CF64DDF301050D8131441960BFC)

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c8/v3/7hgteWtGQJC5Fq95ZNceJg/zh-cn_image_0000002568760510.png?HW-CC-KV=V1&HW-CC-Date=20260511T053533Z&HW-CC-Expire=86400&HW-CC-Sign=72EB1071E589249DC05C5A332A562E8970F8A0CDED691D1C3906B8D182A43DD6)

## 汇总

PhonePC/2in1TabletTVWearable

### 结构体

PhonePC/2in1TabletTVWearable

展开

| 名称 | typedef关键字 | 描述 |
| --- | --- | --- |
| [MediaKeySession](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-drm-mediakeysession) | MediaKeySession | 为MediaKeySession定义native层对象。 |

### 函数

PhonePC/2in1TabletTVWearable

展开

| 名称 | 描述 |
| --- | --- |
| [OH\_AVCodec \*OH\_VideoDecoder\_CreateByMime(const char \*mime)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_createbymime) | 根据MIME类型创建视频解码器实例，大多数情况下建议使用。 |
| [OH\_AVCodec \*OH\_VideoDecoder\_CreateByName(const char \*name)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_createbyname) | 根据视频解码器名称创建视频解码器实例。使用此接口的前提是知道解码器的确切名称，解码器的名称可以通过能力查询获取。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Destroy(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_destroy) | 清理解码器内部资源，销毁解码器实例。不能重复销毁。 |
| [OH\_AVErrCode OH\_VideoDecoder\_SetCallback(OH\_AVCodec \*codec, OH\_AVCodecAsyncCallback callback, void \*userData)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_setcallback) | 设置异步回调函数，让应用可以响应视频解码器生成的事件。在调用OH\_VideoDecoder\_Prepare接口之前，必须调用此接口（从API version 11开始废弃）。 |
| [OH\_AVErrCode OH\_VideoDecoder\_RegisterCallback(OH\_AVCodec \*codec, OH\_AVCodecCallback callback, void \*userData)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_registercallback) | 注册异步回调函数，让应用可以响应视频解码器生成的事件。在调用OH\_VideoDecoder\_Prepare接口之前，必须调用此接口。 |
| [OH\_AVErrCode OH\_VideoDecoder\_SetSurface(OH\_AVCodec \*codec, OHNativeWindow \*window)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_setsurface) | 设置输出surface以提供视频解码输出。  在初始化阶段，必须在调用OH\_VideoDecoder\_Prepare接口之前调用此接口。在Executing状态可以直接调用该接口。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Configure(OH\_AVCodec \*codec, OH\_AVFormat \*format)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_configure) | 配置视频解码器，通常需要配置解码视频的描述信息，这些信息可以从[OH\_AVSource](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-avsource-oh-avsource)中提取。在调用OH\_VideoDecoder\_Prepare接口之前，必须调用此接口。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Prepare(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_prepare) | 准备解码器的内部资源，在调用该接口之前，必须调用OH\_VideoDecoder\_Configure接口。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Start(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_start) | 调用[OH\_VideoDecoder\_Prepare](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_prepare)接口成功后调用此接口启动解码器。成功启动后，解码器将开始报告注册的回调事件。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Stop(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_stop) | 停止解码器，释放输入输出buffer。停止后，可以通过调用OH\_VideoDecoder\_Start接口重新进入Running状态。  需要注意的是，如果编解码器特定数据以前已输入到解码器，则需要再次输入。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Flush(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_flush) | 清除解码器中缓存的输入和输出数据及参数集如H.264格式的PPS/SPS。  调用此接口后，以前通过异步回调上报的所有缓冲区index都将失效，请确保不要访问这些index对应的缓冲区。 |
| [OH\_AVErrCode OH\_VideoDecoder\_Reset(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_reset) | 重置解码器，解码器回到初始化状态。如果要继续解码，需要再次调用OH\_VideoDecoder\_Configure接口配置解码器实例。 |
| [OH\_AVFormat \*OH\_VideoDecoder\_GetOutputDescription(OH\_AVCodec \*codec)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getoutputdescription) | 获取解码器输出数据的OH\_AVFormat信息，请参阅[OH\_AVFormat](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-core-oh-avformat)。  需要注意的是，指向的OH\_AVFormat实例在生命周期结束时需开发者通过调用接口[OH\_AVFormat\_Destroy](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avformat-h#oh_avformat_destroy)释放。 |
| [OH\_AVErrCode OH\_VideoDecoder\_SetParameter(OH\_AVCodec \*codec, OH\_AVFormat \*format)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_setparameter) | 设置解码器的动态参数。  注意，该接口只能在解码器启动后调用。同时，参数配置错误可能会导致解码失败。 |
| [OH\_AVErrCode OH\_VideoDecoder\_PushInputData(OH\_AVCodec \*codec, uint32\_t index, OH\_AVCodecBufferAttr attr)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_pushinputdata) | 将填充数据的输入缓冲区提交给视频解码器。  输入回调将报告可用的输入缓冲区和相应的index值，请参阅{@OH\_AVCodecOnNeedInputData}。一旦具有指定index的缓冲区提交到视频解码器，则无法再次访问缓冲区，直到再次收到输入回调，报告具有相同index的缓冲区可用。此外，对于某些解码器，需要在开始时向解码器输入编解码特定数据，以初始化解码器的解码过程，如H.264格式的PPS/SPS数据（从API version 11开始废弃）。 |
| [OH\_AVErrCode OH\_VideoDecoder\_RenderOutputData(OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputdata) | 将处理后的输出buffer返回给解码器，并通知解码器完成在输出surface上渲染buffer中包含的解码数据。  如果之前没有配置输出surface，则调用此接口仅将指定index对应的输出缓冲区返回给解码器（从API version 11开始废弃）。 |
| [OH\_AVErrCode OH\_VideoDecoder\_FreeOutputData(OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_freeoutputdata) | 将处理后的输出缓冲区返回到解码器（从API version 11开始废弃）。 |
| [OH\_AVErrCode OH\_VideoDecoder\_PushInputBuffer(OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_pushinputbuffer) | 通知视频解码器已对index对应的缓冲区完成输入数据的填充。  输入回调将报告可用的输入缓冲区和相应的index值，请参阅{@OH\_AVCodecOnNeedInputBuffer}。一旦具有指定index的缓冲区提交到视频解码器，则无法再次访问缓冲区，直到再次收到输入回调，报告具有相同index的缓冲区可用。此外，对于某些解码器，需要在开始时向解码器输入编解码特定数据，以初始化解码器的解码过程，如H.264格式的PPS/SPS数据。  开发者可以使用该接口把解码需要的参数集如H.264格式的PPS/SPS传递给解码器，该参数集可以单独送入解码器也可以和要解码的数据一起传入。 |
| [OH\_AVErrCode OH\_VideoDecoder\_RenderOutputBuffer(OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbuffer) | 将index对应的输出缓冲返回给解码器，缓冲区中携带解码输出数据，并通知解码器完成在输出surface上渲染，输出缓冲包含解码数据。  如果之前没有配置输出surface，则调用此接口仅将指定index对应的输出缓冲区返回给解码器。 |
| [OH\_AVErrCode OH\_VideoDecoder\_RenderOutputBufferAtTime(OH\_AVCodec \*codec, uint32\_t index, int64\_t renderTimestampNs)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbufferattime) | 将index对应的输出缓冲返回给解码器，缓冲区中携带解码输出数据，并通知解码器在开发者指定的时间内完成在输出surface上渲染，输出缓冲包含解码数据。 |
| [OH\_AVErrCode OH\_VideoDecoder\_FreeOutputBuffer(OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_freeoutputbuffer) | 将处理后的输出缓冲区返回到解码器。用户使用完需要及时调用此接口释放输出缓存区，否则会阻塞解码流程。 |
| [OH\_AVErrCode OH\_VideoDecoder\_IsValid(OH\_AVCodec \*codec, bool \*isValid)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_isvalid) | 在解码器实例存在的情况下，检查当前解码器服务是否有效。 |
| [OH\_AVErrCode OH\_VideoDecoder\_SetDecryptionConfig(OH\_AVCodec \*codec, MediaKeySession \*mediaKeySession, bool secureVideoPath)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_setdecryptionconfig) | 设置解密配置。在调用OH\_VideoDecoder\_Prepare接口之前，可选择调用此接口。 |
| [OH\_AVErrCode OH\_VideoDecoder\_QueryInputBuffer(struct OH\_AVCodec \*codec, uint32\_t \*index, int64\_t timeoutUs)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_queryinputbuffer) | 查询下一个可用输入缓冲区的索引。  调用此接口后需要接着调用[OH\_VideoDecoder\_GetInputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getinputbuffer)接口获取缓冲区实例，并通过[OH\_VideoDecoder\_PushInputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_pushinputbuffer)接口传递给解码器。  需要注意的是，上述操作仅在同步模式下支持。 |
| [OH\_AVBuffer \*OH\_VideoDecoder\_GetInputBuffer(struct OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getinputbuffer) | 获取可用输入缓冲区的实例。  需要注意的是，此接口仅适用于同步模式。 |
| [OH\_AVErrCode OH\_VideoDecoder\_QueryOutputBuffer(struct OH\_AVCodec \*codec, uint32\_t \*index, int64\_t timeoutUs)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_queryoutputbuffer) | 查询下一个可用输出缓冲区的索引。  通过[OH\_VideoDecoder\_GetOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getoutputbuffer)接口获取的缓冲区实例可以通过执行以下操作来显示或释放解码帧：  1. 通过[OH\_VideoDecoder\_FreeOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_freeoutputbuffer)接口将处理后的输出缓冲区返回到解码器。  2. 通过[OH\_VideoDecoder\_RenderOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbuffer)在输出surface上渲染。  3. 通过[OH\_VideoDecoder\_RenderOutputBufferAtTime](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbufferattime)在指定时间内完成输出surface上渲染。  需要注意的是，上述操作仅在同步模式下支持。 |
| [OH\_AVBuffer \*OH\_VideoDecoder\_GetOutputBuffer(struct OH\_AVCodec \*codec, uint32\_t index)](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getoutputbuffer) | 获取可用输出缓冲区的实例。需要注意的是，此接口仅适用于同步模式。 |

## 函数说明

PhonePC/2in1TabletTVWearable

### OH\_VideoDecoder\_CreateByMime()

PhonePC/2in1TabletTVWearable



```
1. OH_AVCodec *OH_VideoDecoder_CreateByMime(const char *mime)
```

**描述**

根据MIME类型创建视频解码器实例，大多数情况下建议使用。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| const char \*mime | MIME类型描述字符串，请参阅[AVCODEC\_MIME\_TYPE](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#变量)。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \* | 返回一个指向视频解码实例的指针。  当传入的解码器类型不支持或者内存资源耗尽时，返回NULL。 |

### OH\_VideoDecoder\_CreateByName()

PhonePC/2in1TabletTVWearable



```
1. OH_AVCodec *OH_VideoDecoder_CreateByName(const char *name)
```

**描述**

根据视频解码器名称创建视频解码器实例。使用此接口的前提是知道解码器的确切名称，解码器的名称可以通过能力查询获取。

详情请参见：[获取支持的编解码能力](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/obtain-supported-codecs#创建指定名称的编解码器)。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| const char \*name | 视频解码器名称。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \* | 返回指向视频解码实例的指针。  当输入的解码器名称不支持或者内存资源耗尽时，返回NULL。 |

### OH\_VideoDecoder\_Destroy()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Destroy(OH_AVCodec *codec)
```

**描述**

清理解码器内部资源，销毁解码器实例。不能重复销毁。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_SetCallback()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData)
```

**描述**

设置异步回调函数，让应用可以响应视频解码器生成的事件。在调用OH\_VideoDecoder\_Prepare接口之前，必须调用此接口。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**废弃版本：** 11

**替代接口：** [OH\_VideoDecoder\_RegisterCallback](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_registercallback)

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| [OH\_AVCodecAsyncCallback](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodecasynccallback) callback | 所有回调函数的集合。 |
| void \*userData | 开发者执行回调所依赖的数据。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_RegisterCallback()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData)
```

**描述**

注册异步回调函数，让应用可以响应视频解码器生成的事件。在调用OH\_VideoDecoder\_Prepare接口之前，必须调用此接口。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 11

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码器实例的指针。 |
| [OH\_AVCodecCallback](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodeccallback) callback | 所有回调函数的集合。 |
| void \*userData | 开发者执行回调所依赖的数据。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_SetSurface()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_SetSurface(OH_AVCodec *codec, OHNativeWindow *window)
```

**描述**

设置输出surface以提供视频解码输出。

在初始化阶段，必须在调用OH\_VideoDecoder\_Prepare接口之前调用此接口。在Executing状态可以直接调用该接口。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| [OHNativeWindow](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-nativewindow) \*window | 指向OHNativeWindow实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_OPERATE\_NOT\_PERMIT：本接口仅支持在Surface模式下调用, 如果在Buffer模式调用, 则返回此错误码。  AV\_ERR\_INVALID\_VAL：1. 输入的codec指针为非解码器实例，或者为空指针；2. window为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。 |

### OH\_VideoDecoder\_Configure()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Configure(OH_AVCodec *codec, OH_AVFormat *format)
```

**描述**

配置视频解码器，通常需要配置解码视频的描述信息，这些信息可以从[OH\_AVSource](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-avsource-oh-avsource)中提取。在调用OH\_VideoDecoder\_Prepare接口之前，必须调用此接口。

以下参数的配置范围可通过[能力查询](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/obtain-supported-codecs)获取，OH\_MD\_KEY\_ROTATION配置的参数都支持。

设置OH\_MD\_KEY\_VIDEO\_ENABLE\_LOW\_LATENCY接口时如果当前平台不支持，不报错，走正常解码流程。

参数校验规则：

展开

| Key | 配置正常范围的值 | 配置超出范围的值 | 不配置该参数 |
| --- | --- | --- | --- |
| OH\_MD\_KEY\_WIDTH | AV\_ERR\_OK | AV\_ERR\_INVALID\_VAL | AV\_ERR\_INVALID\_VAL |
| OH\_MD\_KEY\_HEIGHT | AV\_ERR\_OK | AV\_ERR\_INVALID\_VAL | AV\_ERR\_INVALID\_VAL |
| OH\_MD\_KEY\_PIXEL\_FORMAT 请参阅[OH\_AVPixelFormat](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avformat-h#oh_avpixelformat) | AV\_ERR\_OK | AV\_ERR\_UNSUPPORT | AV\_ERR\_OK |
| OH\_MD\_KEY\_FRAME\_RATE | AV\_ERR\_OK | AV\_ERR\_INVALID\_VAL | AV\_ERR\_OK |
| [OH\_MD\_KEY\_ROTATION](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#变量) | AV\_ERR\_OK | AV\_ERR\_INVALID\_VAL | AV\_ERR\_OK |

说明

建议按照该实例需要支持的最大分辨率来配置，否则可能会出现高于该分辨率的码流解码会触发异常。该设置直接影响应用的内存使用情况。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| [OH\_AVFormat](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-core-oh-avformat) \*format | 指向OH\_AVFormat的指针，用于给出要解码的视频轨道的描述。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：1. 输入的codec指针为非解码器实例，或者为空指针；2. 输入format参数不支持。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。  AV\_ERR\_INVALID\_STATE：本接口必须在OH\_VideoDecoder\_Prepare接口前调用，如果在其他状态时调用，则返回此错误码。  AV\_ERR\_VIDEO\_UNSUPPORTED\_COLOR\_SPACE\_CONVERSION：不支持色彩空间转换功能。 |

### OH\_VideoDecoder\_Prepare()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Prepare(OH_AVCodec *codec)
```

**描述**

准备解码器的内部资源，在调用该接口之前，必须调用OH\_VideoDecoder\_Configure接口。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：1. 内部执行错误；2. 配置了色彩空间转换功能，但解码器处于Buffer模式。 |

### OH\_VideoDecoder\_Start()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Start(OH_AVCodec *codec)
```

**描述**

调用[OH\_VideoDecoder\_Prepare](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_prepare)接口成功后调用此接口启动解码器。成功启动后，解码器将开始报告注册的回调事件。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：1. 内部执行错误；2. 视频色彩空间转换功能已配置，但是没有调用OH\_VideoDecoder\_Prepare接口。 |

### OH\_VideoDecoder\_Stop()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Stop(OH_AVCodec *codec)
```

**描述**

停止解码器，释放输入输出buffer。停止后，可以通过调用OH\_VideoDecoder\_Start接口重新进入Running状态。

需要注意的是，如果编解码器特定数据以前已输入到解码器，则需要再次输入。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_Flush()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Flush(OH_AVCodec *codec)
```

**描述**

清除解码器中缓存的输入和输出数据及参数集如H.264格式的PPS/SPS。

调用此接口后，以前通过异步回调上报的所有缓冲区index都将失效，请确保不要访问这些index对应的缓冲区。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_Reset()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_Reset(OH_AVCodec *codec)
```

**描述**

重置解码器，解码器回到初始化状态。如果要继续解码，需要再次调用OH\_VideoDecoder\_Configure接口配置解码器实例。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_GetOutputDescription()

PhonePC/2in1TabletTVWearable



```
1. OH_AVFormat *OH_VideoDecoder_GetOutputDescription(OH_AVCodec *codec)
```

**描述**

获取解码器输出数据的OH\_AVFormat信息，请参阅[OH\_AVFormat](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-core-oh-avformat)。

需要注意的是，指向的OH\_AVFormat实例在生命周期结束时需开发者通过调用接口[OH\_AVFormat\_Destroy](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avformat-h#oh_avformat_destroy)释放。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVFormat](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-core-oh-avformat) \* | 返回指向OH\_AVFormat实例的指针。  当输入的codec指针非解码器实例，或者为空指针，则返回NULL。 |

### OH\_VideoDecoder\_SetParameter()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format)
```

**描述**

设置解码器的动态参数。

注意，该接口只能在解码器启动后调用。同时，参数配置错误可能会导致解码失败。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| [OH\_AVFormat](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-core-oh-avformat) \*format | 指向OH\_AVFormat实例的指针。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：1. 输入的codec指针为非解码器实例，或者为空指针；2. 输入format参数不支持。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_PushInputData()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr)
```

**描述**

将填充数据的输入缓冲区提交给视频解码器。

输入回调将报告可用的输入缓冲区和相应的index值，请参阅[OH\_AVCodecOnNeedInputData](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconneedinputdata)。一旦具有指定index的缓冲区提交到视频解码器，则无法再次访问缓冲区，直到再次收到输入回调，报告具有相同index的缓冲区可用。此外，对于某些解码器，需要在开始时向解码器输入编解码特定数据，以初始化解码器的解码过程，如H.264格式的PPS/SPS数据。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**废弃版本：** 11

**替代接口：** [OH\_VideoDecoder\_PushInputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_pushinputbuffer)

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输入Buffer对应的索引值。由[OH\_AVCodecOnNeedInputData](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconneedinputdata)给出。 |
| OH\_AVCodecBufferAttr attr | 描述缓冲区中包含的数据的信息。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_RenderOutputData()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_RenderOutputData(OH_AVCodec *codec, uint32_t index)
```

**描述**

将处理后的输出buffer返回给解码器，并通知解码器完成在输出surface上渲染buffer中包含的解码数据。

如果之前没有配置输出surface，则调用此接口仅将指定index对应的输出缓冲区返回给解码器。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**废弃版本：** 11

**替代接口：** [OH\_VideoDecoder\_RenderOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbuffer)

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输出Buffer对应的索引值。由[OH\_AVCodecOnNewOutputData](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconnewoutputdata)给出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_FreeOutputData()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_FreeOutputData(OH_AVCodec *codec, uint32_t index)
```

**描述**

将处理后的输出缓冲区返回到解码器。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 9

**废弃版本：** 11

**替代接口：** [OH\_VideoDecoder\_FreeOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_freeoutputbuffer)

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输出buffer对应的索引值。由[OH\_AVCodecOnNewOutputData](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconnewoutputdata)给出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_PushInputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_PushInputBuffer(OH_AVCodec *codec, uint32_t index)
```

**描述**

通知视频解码器已对index对应的缓冲区完成输入数据的填充。

输入回调将报告可用的输入缓冲区和相应的index值，请参阅[OH\_AVCodecOnNeedInputBuffer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconneedinputbuffer)。一旦具有指定index的缓冲区提交到视频解码器，则无法再次访问缓冲区，直到再次收到输入回调，报告具有相同index的缓冲区可用。此外，对于某些解码器，需要在开始时向解码器输入编解码特定数据，以初始化解码器的解码过程，如H.264格式的PPS/SPS数据。

开发者可以使用该接口把解码需要的参数集如H.264格式的PPS/SPS传递给解码器，该参数集可以单独送入解码器也可以和要解码的数据一起传入。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 11

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输入buffer对应的索引值。由[OH\_AVCodecOnNeedInputBuffer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconneedinputbuffer)给出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。  AV\_ERR\_DRM\_DECRYPT\_FAILED：受DRM保护的视频缓冲区解密失败，建议查看日志。 |

### OH\_VideoDecoder\_RenderOutputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_RenderOutputBuffer(OH_AVCodec *codec, uint32_t index)
```

**描述**

将index对应的输出缓冲返回给解码器，缓冲区中携带解码输出数据，并通知解码器完成在输出surface上渲染，输出缓冲包含解码数据。

如果之前没有配置输出surface，则调用此接口仅将指定index对应的输出缓冲区返回给解码器。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 11

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输出buffer对应的索引值。由[OH\_AVCodecOnNewOutputBuffer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconnewoutputbuffer)给出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_RenderOutputBufferAtTime()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_RenderOutputBufferAtTime(OH_AVCodec *codec, uint32_t index, int64_t renderTimestampNs)
```

**描述**

将index对应的输出缓冲返回给解码器，缓冲区中携带解码输出数据，并通知解码器在开发者指定的时间内完成在输出surface上渲染，输出缓冲包含解码数据。

如果之前没有配置输出surface，则调用此接口仅将指定index对应的输出缓冲区返回给解码器。

开发者可以使用时间戳在特定时间（在VSYNC或者缓冲区时间戳之后）渲染缓冲区。若要在指定的时间戳显示，时间戳需要合理接近系统时间，有几点需要注意：

1. 缓冲区是按照顺序处理的，因此可能会阻塞后续缓冲区在surface上的显示，如果想要对用户的一些行为做出反应，例如停止或者快进快退视频，这一点很重要。

2. 如果多个缓冲区被发送到surface要在同一个VSYNC上渲染，那么最后一个将会被显示，其他的将被丢弃。

3. 如果时间戳与当前的系统时间不是“合理接近”，surface将会忽略时间戳，并在可行的最早时间里显示buffer。在此模式下不会丢弃帧。4. 如果需要由系统根据显示刷新率来丢帧，则必须调用此接口，否则应用需自行实现丢帧逻辑。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 12

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输出buffer对应的索引值。由[OH\_AVCodecOnNewOutputBuffer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconnewoutputbuffer)给出。 |
| int64\_t renderTimestampNs | 输出buffer被发送到surface的时间戳，取值范围大于0，应由std::chrono::steady\_clock标准库时钟生成，且单位为纳秒。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_FreeOutputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index)
```

**描述**

将处理后的输出缓冲区返回到解码器。用户使用完需要及时调用此接口释放输出缓存区，否则会阻塞解码流程。

详情请参见：[视频解码](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-decoding) “Surface模式的步骤-12或Buffer模式步骤-10”。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 11

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针 |
| uint32\_t index | 输出buffer对应的索引值。由[OH\_AVCodecOnNewOutputBuffer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-avcodec-base-h#oh_avcodeconnewoutputbuffer)给出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：1. 输入的codec指针为非解码器实例，或者为空指针；2. index非法或者连续给同一个index，该错误不影响后续解码流程。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：内部执行错误。 |

### OH\_VideoDecoder\_IsValid()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_IsValid(OH_AVCodec *codec, bool *isValid)
```

**描述**

在解码器实例存在的情况下，检查当前解码器服务是否有效。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 10

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| bool \*isValid | 输出参数，指向布尔类型的指针。只有当接口返回AV\_ERR\_OK时，该值表示解码器服务的有效性（true为有效，false为无效）。建议开发者将isValid初始化为false。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。 |

### OH\_VideoDecoder\_SetDecryptionConfig()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_SetDecryptionConfig(OH_AVCodec *codec, MediaKeySession *mediaKeySession, bool secureVideoPath)
```

**描述**

设置解密配置。在调用OH\_VideoDecoder\_Prepare接口之前，可选择调用此接口。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 11

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| [MediaKeySession](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-drm-mediakeysession) \*mediaKeySession | 指向带有解密功能的DRM会话实例的指针。 |
| bool secureVideoPath | 安全视频通路。指定安全视频通路为true，非安全视频通路为false。在[Surface模式](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-decoding#surface模式)下，既支持安全视频通路，也支持非安全视频通路。在[Buffer模式](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-decoding#buffer模式)下，仅支持非安全视频通路。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_OPERATE\_NOT\_PERMIT：1. 内部执行错误；2. 解码服务进程异常；3. 媒体密钥会话服务处于错误状态。  AV\_ERR\_INVALID\_VAL：1. 输入的codec指针为非解码器实例或为空指针；2. mediaKeySession为nullptr或无效。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。 |

### OH\_VideoDecoder\_QueryInputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs)
```

**描述**

查询下一个可用输入缓冲区的索引。

调用此接口后需要接着调用[OH\_VideoDecoder\_GetInputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getinputbuffer)接口获取缓冲区实例，并通过[OH\_VideoDecoder\_PushInputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_pushinputbuffer)接口传递给解码器。

需要注意的是，上述操作仅在同步模式下支持。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 20

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [struct OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t \*index | 输入buffer对应的索引值。 |
| int64\_t timeoutUs | 超时时长，单位为微秒。负值：无限等待；0：立即退出；正值：等待指定时长后退出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：禁止异步模式下使用。  AV\_ERR\_TRY\_AGAIN\_LATER：查询失败，建议等待短暂间隔后重试。 |

### OH\_VideoDecoder\_GetInputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVBuffer *OH_VideoDecoder_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index)
```

**描述**

获取可用输入缓冲区的实例。

需要注意的是，此接口仅适用于同步模式。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 20

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [struct OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输入buffer对应的索引值，可通过[OH\_VideoDecoder\_QueryInputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_queryinputbuffer)接口获取。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| OH\_AVBuffer \* | 如果执行成功，则返回一个指向OH\_AVBuffer实例的指针，否则返回NULL。 |

### OH\_VideoDecoder\_QueryOutputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVErrCode OH_VideoDecoder_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs)
```

**描述**

查询下一个可用输出缓冲区的索引。

通过[OH\_VideoDecoder\_GetOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getoutputbuffer)接口获取的缓冲区实例可以通过执行以下操作来显示或释放解码帧：

1. 通过[OH\_VideoDecoder\_FreeOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_freeoutputbuffer)接口将处理后的输出缓冲区返回到解码器。

2. 通过[OH\_VideoDecoder\_RenderOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbuffer)在输出surface上渲染。

3. 通过[OH\_VideoDecoder\_RenderOutputBufferAtTime](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_renderoutputbufferattime)在指定时间内完成输出surface上渲染。

需要注意的是，上述操作仅在同步模式下支持。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 20

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [struct OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t \*index | 输出buffer对应的索引值。 |
| int64\_t timeoutUs | 超时时长，单位为微秒。负值：无限等待；0：立即退出；正值：等待指定时长后退出。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVErrCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-averrors-h#oh_averrcode) | AV\_ERR\_OK：执行成功。  AV\_ERR\_NO\_MEMORY：输入的解码器实例已经销毁。  AV\_ERR\_INVALID\_VAL：输入的codec指针为非解码器实例，或者为空指针。  AV\_ERR\_UNKNOWN：未知错误。  AV\_ERR\_INVALID\_STATE：当前解码器状态不支持调用本接口。  AV\_ERR\_OPERATE\_NOT\_PERMIT：禁止异步模式下使用。  AV\_ERR\_STREAM\_CHANGED：流格式已变更，可以通过调用[OH\_VideoDecoder\_GetOutputDescription](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_getoutputdescription)接口获取新的流信息。  AV\_ERR\_TRY\_AGAIN\_LATER：查询失败，建议等待短暂间隔后重试。 |

### OH\_VideoDecoder\_GetOutputBuffer()

PhonePC/2in1TabletTVWearable



```
1. OH_AVBuffer *OH_VideoDecoder_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index)
```

**描述**

获取可用输出缓冲区的实例。需要注意的是，此接口仅适用于同步模式。

**系统能力：** SystemCapability.Multimedia.Media.VideoDecoder

**起始版本：** 20

**参数：**

展开

| 参数项 | 描述 |
| --- | --- |
| [struct OH\_AVCodec](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-codecbase-oh-avcodec) \*codec | 指向视频解码实例的指针。 |
| uint32\_t index | 输出buffer对应的索引值，可通过[OH\_VideoDecoder\_QueryOutputBuffer](/consumer/cn/doc/harmonyos-references/capi-native-avcodec-videodecoder-h#oh_videodecoder_queryoutputbuffer)接口获取。 |

**返回：**

展开

| 类型 | 说明 |
| --- | --- |
| [OH\_AVBuffer](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-core-oh-avbuffer) \* | 如果执行成功，则返回一个指向OH\_AVBuffer实例的指针，否则返回NULL。 |