VENC视频编码
昇腾910 AI处理器上,当前版本不支持该功能。
开发应用时,如果涉及视频编码,则应用程序中必须包含视频编码的代码逻辑,关于视频编码的接口调用流程,请依次参见主要接口调用流程以及本节中的说明。关于VENC功能的详细介绍请参见VENC功能。
图1 视频编码流程

实现视频的编码,详细说明及调用示例请参见视频编码。关键接口的说明如下(调用示例请参见视频编码):
- 调用acl.media.venc_create_channel接口创建视频编码处理的通道。
- 创建视频编码处理通道前,需先执行以下操作:
- 调用acl.media.venc_create_channel_desc接口创建通道描述信息。
- 调用acl.media.venc_set_channel_desc_param接口设置通道描述信息的属性,包括线程、回调函数、视频编码协议、输入图片格式等,其中:
- 回调函数需由用户提前创建,用于在视频编码后,获取编码数据,并及时释放相关资源,回调函数的原型:def venc_call_back_func(dvpp_pic_desc, dvpp_stream_desc, user_data)。
视频编码结束后,建议用户在回调函数内及时释放输入图片内存、以及相应的图片描述信息。视频编码的输出内存由系统管理,不由用户管理,因此无需用户释放。
- 线程需由用户提前创建,并自定义线程函数,在线程函数内调用acl.rt.process_report接口,等待指定时间后,触发1.b.i中的回调函数。
推荐使用acl.media.venc_set_channel_desc_param接口设置通道描述信息的属性,通过枚举值来选择通过该接口设置某一个属性的值。
但为兼容旧版本,也可以调用acl.media.venc_set_channel_desc系列接口设置通道描述信息的属性,每个属性的设置对应一个set接口。
- 回调函数需由用户提前创建,用于在视频编码后,获取编码数据,并及时释放相关资源,回调函数的原型:def venc_call_back_func(dvpp_pic_desc, dvpp_stream_desc, user_data)。
- acl.media.venc_create_channel接口内部封装了如下接口,无需用户单独调用:
- acl.rt.create_stream接口:显式创建Stream,VENC内部使用。
- acl.rt.subscribe_report接口:指定处理Stream上回调函数的线程,回调函数和线程是由用户调用acl.media.venc_set_channel_desc_param接口时指定的。
- 创建视频编码处理通道前,需先执行以下操作:
- 调用acl.media.venc_send_frame接口将YUV420SP格式的图片编码成H264/H265格式的视频码流。
- 视频编码前,需先执行以下操作:
- 调用acl.media.dvpp_create_pic_desc接口创建输入图片描述信息,并调用acl.media.dvpp_set_pic_desc系列接口设置输入图片的内存地址、内存大小、图片格式等属性。
- 调用acl.media.venc_create_frame_config接口创建单帧编码配置数据,并调用acl.media.venc_set_frame_config系列接口设置是否强制重新开始I帧间隔、是否结束帧。
- acl.media.venc_send_frame接口内部封装了acl.rt.launch_callback接口,用于在Stream的任务队列中增加一个需要在Host上执行的回调函数。用户无需单独调用acl.rt.launch_callback接口。
- 视频编码前,需先执行以下操作:
- 调用acl.media.venc_destroy_channel接口销毁视频处理的通道。
- 系统会等待已发送帧解码完成且用户的回调函数处理完成后再销毁通道。
- acl.media.venc_destroy_channel接口内部封装了如下接口,无需用户单独调用:
- acl.rt.unsubscribe_report接口:取消线程注册(Stream上的回调函数不再由指定线程处理)。
- acl.rt.destroy_stream接口:销毁Stream。
- 销毁通道后,需调用acl.media.venc_destroy_channel_desc接口销毁通道描述信息。
- 销毁通道描述信息后,用户才可以销毁1.b.ii中创建的线程。
父主题: 媒体数据处理V1