一种基于动态库的视频数据处理方法与流程

未命名 10-19 阅读:98 评论:0


1.本技术一般涉及智能识别技术领域,尤其涉及一种基于动态库的视频数据处理方法。


背景技术:

2.在智能摄像机、机器人、无人机等ai设备中,往往具有用于将设备所拍摄视频进行解码的解码单元、用于存储被解码视频的存储单元,以及用于对被解码视频进行分析识别的应用单元。atlas 200ai加速模块集成了昇腾310ai处理器,即可实现对输入视频的解码和分析识别功能。但现有的用于实现应用单元对被解码视频数据进行分析识别的方式为,在存储单元与应用单元之间设置有线或无线的物理通道连接,以传输被解码视频数据,但此种方式传输速度慢,上述二者之间交互模式比较单一,当应用单元需要多路调用被解码视频数据时,效率较低。


技术实现要素:

3.鉴于现有技术中的上述缺陷或不足,期望提供一种视频数据处理速度更快的基于动态库的视频数据处理方法。
4.具体技术方案如下:
5.本技术提供一种基于动态库的视频数据处理方法,包括如下步骤:
6.获取第一视频数据,所述第一视频数据中的图像数据为第一图像数据,所述第一图像数据为已被去掉参数数据的图像数据;
7.由解码单元对所述第一视频数据进行解码,以得到被解码视频数据;
8.在存储单元内建立调用接口,所述调用接口用于供应用单元调用,所述应用单元为视频数据处理机构中用于对被解码视频数据进行分析识别的功能单元,所述存储单元为视频数据处理机构中用于存储被解码视频数据的功能单元;
9.由所述应用单元调用所述被解码视频,并对其进行分析识别,以得到识别信息。
10.作为本技术的进一步限定,所述解码单元为加速模块。
11.作为本技术的进一步限定,所述获取第一视频数据,包括如下步骤:
12.将ffmpeg软解码库移植到所述解码单元;
13.设置初始化资源调用接口;
14.利用ffmpeg动态库将输入所述解码单元的视频数据中相应图像数据中的参数数据去掉,以得到所述第一视频数据。
15.作为本技术的进一步限定,所述将ffmpeg软解码库移植到所述解码单元,包括如下步骤:
16.配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
17.修改acodec.h文件,增加参数帧长度sei_len和数组sei_buf,根据应用层需求确
定其参数帧大小sei_buf_size;
18.在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于sei_buf_size,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];
[0019]
执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
[0020]
将动态库拷贝到解码板卡的/usr/lib路径下。
[0021]
作为本技术的进一步限定,所述设置初始化资源调用接口,包括如下步骤:
[0022]
初始化信号量mutex;
[0023]
创建初始化资源设置线程;
[0024]
使用ffmpeg动态库获取含参数帧的完整压缩图像数据包。
[0025]
作为本技术的进一步限定,所述创建初始化资源设置线程,包括如下步骤:
[0026]
设置硬解码设备序号;
[0027]
使用库函数创建硬解码上下文环境;
[0028]
使用库函数创建硬解码数据流对象;
[0029]
创建解码线程;
[0030]
初始化ffmpeg资源;
[0031]
创建网络接收数据线程,将接收到的数据放入到环形缓冲数组;
[0032]
初始化加速解码模块资源
[0033]
定时查询网络是否接收到图像数组,即环形缓冲数组是否有数据,如果有则按协议规定的帧长度取走数据,并进行到下一个过程,否则继续查询等待网络数据。
[0034]
作为本技术的进一步限定,所述初始化加速解码模块资源,包括如下步骤:
[0035]
创建解码通道属性,如果创建成功则进行下一步,否则报错退出;
[0036]
设置解码通道id号,如果设置成功则进行下一步,否则报错退出;
[0037]
设置解码线程号;
[0038]
设置解码通道回调函数,如果设置成功则进行下一步,否则报错退出;
[0039]
设置解码通道的解码类型,如果设置成功则进行下一步,否则报错退出;
[0040]
设置解码通道的输出图像格式,如果设置成功则进行下一步,否则报错退出;
[0041]
设置解码通道输出模式,如果设置成功则进行下一步,否则报错退出;
[0042]
根据解码通道属性创建解码通道。
[0043]
作为本技术的进一步限定,所述利用ffmpeg动态库将输入所述解码单元的视频数据中相应图像数据中的参数数据去掉,包括如下步骤:
[0044]
初始化解码库使用环境;
[0045]
获取从网络读取的图像数据数组首地址指针bufptr和长度buflen;
[0046]
判断当前的数据长度buflen是否大于0,如果是则继续下一步,如果不是,则等待网络下次发送数据;
[0047]
传送数据数组首地址指针bufptr和长度buflen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则
记录继续下一步,如果不是则退出本次解码过程;
[0048]
保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度buflen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufptr,移动次数为ret;
[0049]
将本次分割的图像完整数据包放到待解码队列中。
[0050]
作为本技术的进一步限定,所述由解码单元对所述第一视频数据进行解码,包括如下步骤:
[0051]
设置解码回调函数;
[0052]
从所述待解码队列中获取完整图像数据包;
[0053]
将数据包发送给硬解码模块进行解码。
[0054]
作为本技术的进一步限定,所述由所述应用单元调用所述被解码视频,并对其进行分析识别,包括如下步骤:
[0055]
设置提供获取图像数据接口函数readbuf;
[0056]
设置提供获取图像数据数组地址函数void*getbufaddress,该函数返回g_read_buf地址。
[0057]
本技术有益效果在于:
[0058]
在本方案中,在获取到去掉参数数据的所述第一视频数据后,通过在所述存储单元中设置相应的调用接口,以便所述应用单元可以直接对所述存储单元中的被所述解码单元解码的视频数据进行调用,这样可以省去上述二者之间的物理连接,进而提升了数据传输的速度和安全性;另外,所述应用单元在执行多通道的分析识别任务时,还可对所述被解码视频数据实行分时调用方式,进而使得上述数据利用方式更为灵活,效率更高,从而使得视频处理总体速度更快。
附图说明
[0059]
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本技术的其它特征、目的和优点将会变得更明显:
[0060]
图1为本技术实施例提供的一种基于动态库的视频数据处理方法的步骤流程图。
具体实施方式
[0061]
下面结合附图和实施例对本技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。
[0062]
需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。
[0063]
请参考图1,为本实施例提供的一种基于动态库的视频数据处理方法,包括如下步骤:
[0064]
s1:获取第一视频数据,所述第一视频数据中的图像数据为第一图像数据,所述第一图像数据为已被去掉参数数据的图像数据;
[0065]
s2:由解码单元对所述第一视频数据进行解码,以得到被解码视频数据;
[0066]
s3:在存储单元内建立调用接口,所述调用接口用于供应用单元调用,所述应用单
元为视频数据处理机构中用于对被解码视频数据进行分析识别的功能单元,所述存储单元为视频数据处理机构中用于存储被解码视频数据的功能单元;
[0067]
s4:由所述应用单元调用所述被解码视频,并对其进行分析识别,以得到识别信息。
[0068]
在本方案中,在获取到去掉参数数据的所述第一视频数据后,通过在所述存储单元中设置相应的调用接口,以便所述应用单元可以直接对所述存储单元中的被所述解码单元解码的视频数据进行调用,这样可以省去上述二者之间的物理连接,进而提升了数据传输的速度和安全性。其中所述参数数据为图像分辨率、图像大小、图像颜色;另外,所述应用单元在执行多通道的分析识别任务时,还可对所述被解码视频数据实行分时调用方式,进而使得上述数据利用方式更为灵活,效率更高,从而使得视频处理总体速度更快。
[0069]
其中,所述解码单元为加速模块。
[0070]
所述获取第一视频数据,包括如下步骤:
[0071]
将ffmpeg软解码库移植到所述解码单元;
[0072]
设置初始化资源调用接口;
[0073]
利用ffmpeg动态库将输入所述解码单元的视频数据中相应图像数据中的参数数据去掉,以得到所述第一视频数据。
[0074]
所述将ffmpeg软解码库移植到所述解码单元,包括如下步骤:
[0075]
配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
[0076]
修改acodec.h文件,增加参数帧长度sei_len和数组sei_buf,根据应用层需求确定其参数帧大小sei_buf_size;
[0077]
在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于sei_buf_size,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];
[0078]
执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
[0079]
将动态库拷贝到解码板卡的/usr/lib路径下。
[0080]
所述设置初始化资源调用接口,包括如下步骤:
[0081]
初始化信号量mutex;
[0082]
创建初始化资源设置线程;
[0083]
使用ffmpeg动态库获取含参数帧的完整压缩图像数据包。
[0084]
所述创建初始化资源设置线程,包括如下步骤:
[0085]
设置硬解码设备序号;
[0086]
使用库函数创建硬解码上下文环境;
[0087]
使用库函数创建硬解码数据流对象;
[0088]
创建解码线程;
[0089]
初始化ffmpeg资源;
[0090]
创建网络接收数据线程,将接收到的数据放入到环形缓冲数组;
[0091]
初始化加速解码模块资源;
[0092]
定时查询网络是否接收到图像数组,即环形缓冲数组是否有数据,如果有则按协议规定的帧长度取走数据,并进行到下一个过程,否则继续查询等待网络数据。
[0093]
所述初始化加速解码模块资源,包括如下步骤:
[0094]
创建解码通道属性,如果创建成功则进行下一步,否则报错退出;
[0095]
设置解码通道id号,如果设置成功则进行下一步,否则报错退出;
[0096]
设置解码线程号;
[0097]
设置解码通道回调函数,如果设置成功则进行下一步,否则报错退出;
[0098]
设置解码通道的解码类型,如果设置成功则进行下一步,否则报错退出;
[0099]
设置解码通道的输出图像格式,如果设置成功则进行下一步,否则报错退出;
[0100]
设置解码通道输出模式,如果设置成功则进行下一步,否则报错退出;
[0101]
根据解码通道属性创建解码通道。
[0102]
所述利用ffmpeg动态库将输入所述解码单元的视频数据中相应图像数据中的参数数据去掉,包括如下步骤:
[0103]
初始化解码库使用环境;
[0104]
获取从网络读取的图像数据数组首地址指针bufptr和长度buflen;
[0105]
判断当前的数据长度buflen是否大于0,如果是则继续下一步,如果不是,则等待网络下次发送数据;
[0106]
传送数据数组首地址指针bufptr和长度buflen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程;
[0107]
保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度buflen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufptr,移动次数为ret;
[0108]
将本次分割的图像完整数据包放到待解码队列中。
[0109]
所述由解码单元对所述第一视频数据进行解码,包括如下步骤:
[0110]
设置解码回调函数,具体如下:
[0111]
使用库函数获取解码正常帧输出,如果获取结果为0,则执行下一步,否则报错退出;
[0112]
使用库函数获取图像属性数据output;
[0113]
使用库函数从output里获取图像大小、宽和高度参数数据;
[0114]
将图像数据和参数数据拷贝到用户返回数组g_send_buf;
[0115]
将信号量mutex解锁,允许对用户返回数组g_send_buf的访问权限;
[0116]
从所述待解码队列中获取完整图像数据包;
[0117]
将数据包发送给硬解码模块进行解码,具体如下:
[0118]
使用库函数动态申请图像存储空间;
[0119]
从ffmpeg获取图像帧的参数信息;
[0120]
将参数信息和图像解码后的数据整合成完整帧;
[0121]
创建输入图像流属性对象;
[0122]
设置输入图像流属性对象;
[0123]
动态申请图像输出内存空间;
[0124]
创建输出图像属性对象;
[0125]
根据图像的数据、大小、格式设置输出图像属性;
[0126]
将解码通道属性、输入图像流属性、输出图像属性作为参数使用库函数发送图像帧数据给硬解码模块;
[0127]
释放申请的图像内存空间;
[0128]
销毁输入图像流对象资源。
[0129]
所述由所述应用单元调用所述被解码视频,并对其进行分析识别,包括如下步骤:
[0130]
设置提供获取图像数据接口函数readbuf,具体内容如下:
[0131]
信号量上锁,防止对用户返回数组读写冲突;
[0132]
将所述解码后的图像数据数组g_send_buf拷贝到临时数据数组g_read_buf中;
[0133]
返回图像数据长度。
[0134]
设置提供获取图像数据数组地址函数void*getbufaddress,该函数返回g_read_buf地址。
[0135]
以上描述仅为本技术的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本技术中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本技术中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

技术特征:
1.一种基于动态库的视频数据处理方法,其特征在于,包括如下步骤:获取第一视频数据,所述第一视频数据中的图像数据为第一图像数据,所述第一图像数据为已被去掉参数数据的图像数据;由解码单元对所述第一视频数据进行解码,以得到被解码视频数据;在存储单元内建立调用接口,所述调用接口用于供应用单元调用,所述应用单元为视频数据处理机构中用于对被解码视频数据进行分析识别的功能单元,所述存储单元为视频数据处理机构中用于存储被解码视频数据的功能单元;由所述应用单元调用所述被解码视频,并对其进行分析识别,以得到识别信息。2.根据权利要求1所述的基于动态库的视频数据处理方法,其特征在于,所述解码单元为加速模块。3.根据权利要求1所述的基于动态库的视频数据处理方法,其特征在于,所述获取第一视频数据,包括如下步骤:将ffmpeg软解码库移植到所述解码单元;设置初始化资源调用接口;利用ffmpeg动态库将输入所述解码单元的视频数据中相应图像数据中的参数数据去掉,以得到所述第一视频数据。4.根据权利要求3所述的基于动态库的视频数据处理方法,其特征在于,所述将ffmpeg软解码库移植到所述解码单元,包括如下步骤:配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;修改acodec.h文件,增加参数帧长度sei_len和数组sei_buf,根据应用层需求确定其参数帧大小sei_buf_size;在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于sei_buf_size,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;将动态库拷贝到解码板卡的/usr/lib路径下。5.根据权利要求3所述的基于动态库的视频数据处理方法,其特征在于,所述设置初始化资源调用接口,包括如下步骤:初始化信号量mutex;创建初始化资源设置线程;使用ffmpeg动态库获取含参数帧的完整压缩图像数据包。6.根据权利要求5所述的基于动态库的视频数据处理方法,其特征在于,所述创建初始化资源设置线程,包括如下步骤:设置硬解码设备序号;使用库函数创建硬解码上下文环境;使用库函数创建硬解码数据流对象;
创建解码线程;初始化ffmpeg资源;创建网络接收数据线程,将接收到的数据放入到环形缓冲数组;初始化加速解码模块资源;定时查询网络是否接收到图像数组,即环形缓冲数组是否有数据,如果有则按协议规定的帧长度取走数据,并进行到下一个过程,否则继续查询等待网络数据。7.根据权利要求6所述的基于动态库的视频数据处理方法,其特征在于,所述初始化加速解码模块资源,包括如下步骤:创建解码通道属性,如果创建成功则进行下一步,否则报错退出;设置解码通道id号,如果设置成功则进行下一步,否则报错退出;设置解码线程号;设置解码通道回调函数,如果设置成功则进行下一步,否则报错退出;设置解码通道的解码类型,如果设置成功则进行下一步,否则报错退出;设置解码通道的输出图像格式,如果设置成功则进行下一步,否则报错退出;设置解码通道输出模式,如果设置成功则进行下一步,否则报错退出;根据解码通道属性创建解码通道。8.根据权利要求3所述的基于动态库的视频数据处理方法,其特征在于,所述利用ffmpeg动态库将输入所述解码单元的视频数据中相应图像数据中的参数数据去掉,包括如下步骤:初始化解码库使用环境;获取从网络读取的图像数据数组首地址指针bufptr和长度buflen;判断当前的数据长度buflen是否大于0,如果是则继续下一步,如果不是,则等待网络下次发送数据;传送数据数组首地址指针bufptr和长度buflen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程;保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度buflen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufptr,移动次数为ret;将本次分割的图像完整数据包放到待解码队列中。9.根据权利要求8所述的基于动态库的视频数据处理方法,其特征在于,所述由解码单元对所述第一视频数据进行解码,包括如下步骤:设置解码回调函数;从所述待解码队列中获取完整图像数据包;将数据包发送给硬解码模块进行解码。10.根据权利要求1所述的基于动态库的视频数据处理方法,其特征在于,所述由所述应用单元调用所述被解码视频,并对其进行分析识别,包括如下步骤:设置提供获取图像数据接口函数readbuf;设置提供获取图像数据数组地址函数void*getbufaddress,该函数返回g_read_buf地址。

技术总结
本申请公开了一种基于动态库的视频数据处理方法,包括如下步骤:获取第一视频数据,所述第一视频数据中的图像数据为第一图像数据,所述第一图像数据为已被去掉参数数据的图像数据;由解码单元对所述第一视频数据进行解码,以得到被解码视频数据;在存储单元内建立调用接口,所述调用接口用于供应用单元调用,所述应用单元为视频数据处理机构中用于对被解码视频数据进行分析识别的功能单元,所述存储单元为视频数据处理机构中用于存储被解码视频数据的功能单元;由所述应用单元调用所述被解码视频,并对其进行分析识别,以得到识别信息。利用该处理方法,对于视频数据处理速度会更快。会更快。会更快。


技术研发人员:高娟
受保护的技术使用者:天津津航计算技术研究所
技术研发日:2023.07.11
技术公布日:2023/10/15
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐