接口调用流程

开发应用时,如果涉及视频编码,则应用程序中必须包含视频编码的代码逻辑,关于视频编码的接口调用流程,请先参见接口调用流程了解整体流程,再查看本节中的流程说明。关于VENC功能的详细介绍请参见功能及约束说明

图1 视频编码流程

实现视频的编码,关键接口的说明如下:

  1. 调用aclvencCreateChannel接口创建视频编码处理的通道。
    • 创建视频编码处理通道前,需先执行以下操作:
      1. 调用aclvencCreateChannelDesc接口创建通道描述信息。
      2. 调用aclvencSetChannelDescParam接口设置通道描述信息的属性,包括线程、回调函数、视频编码协议、输入图片格式等,其中:
        1. 回调函数需由用户提前创建,用于在视频编码后,获取编码数据,并及时释放相关资源,回调函数的原型前参见aclvencCallback

          视频编码结束后,建议用户在回调函数内及时释放输入图片内存、以及相应的图片描述信息。视频编码的输出内存由系统管理,不由用户管理,因此无需用户释放。

        2. 线程需由用户提前创建,并自定义线程函数,在线程函数内调用aclrtProcessReport接口,等待指定时间后,触发1.b.i中的回调函数。

        推荐使用aclvencSetChannelDescParam接口设置通道描述信息的属性,通过枚举值来选择通过该接口设置某一个属性的值。

        但为兼容旧版本,也可以调用aclvencSetChannelDesc系列接口设置通道描述信息的属性,每个属性的设置对应一个set接口。

    • aclvencCreateChannel接口内部封装了如下接口,无需用户单独调用:
      1. aclrtCreateStream接口:显式创建Stream,VENC内部使用。
      2. aclrtSubscribeReport接口:指定处理Stream上回调函数的线程,回调函数和线程是由用户调用aclvencSetChannelDescParam接口时指定的。
  2. 调用aclvencSendFrame接口将YUV420SP格式的图片编码成H264/H265格式的视频码流。
  3. 调用aclvencDestroyChannel接口销毁视频处理的通道。
    • 系统会等待已发送帧编码完成且用户的回调函数处理完成后再销毁通道。
    • aclvencDestroyChannel接口内部封装了如下接口,无需用户单独调用:
    • 销毁通道后,需调用aclvencDestroyChannelDesc接口销毁通道描述信息。
    • 销毁通道描述信息后,用户才可以销毁1.b.ii中创建的线程。