背景分析
从视频智能化相关技术研发开始计算,智能化在视频行业内已经发展了十余年,但是视频行业的智能化应用一直没有达到预期。目前视频智能化主要的表现还是集中在前端设备摄像机产品的某些智能功能,以及一些配备智能分析的NVR/DVR和后端的智能分析平台系统。无插件直播和智能化水平还处在初级阶段,周边的硬件及软件设备还未完善,还有很多环境和应用限制条件。
例如传统安防行业,智能安防的技术门槛有了极大程度的提高,系统的复杂性和技术性都呈指数增长。大数据、云计算、深度学习、人工智能应用等等技术,是安防智能化发展的关键技术。对于企业来说,安防智能化的建设需要的专业知识面非常广,并且要求有相当的整合能力,这一切都对安防摄像头内容无插件直播的技术发展提出了不小的要求。无插件直播平台EasyNVR顺应而生。
无插件直播平台EasyNVR中AI_Filter功能无法使用自编的ffmpeg库
问题需求
客户在使用无插件直播平台EasyNVR的时候,使能Ai Filter功能,并且使用自己编译的ffmpeg,编译生成了libEasyAiFilter.so,但是在NVR调用Ai Filter功能模块的时候,使用的还是NVR编译的ffmpeg库。
问题分析
根据log显示ffmpeg版本,NVR在调用libEasyAiFilter库的时候,Ai Filter使用的一直是编译到NVR里面的ffmpeg库,使用的不是客户编译的ffmpeg库。
问题解决
为了避免大范围的修改前提下,保存NVR不动,只是修改Ai Filter,那就是在编译Ai Filter的时候,使用ffmpeg的静态库,把ffmpeg静态库编译到Ai Filter的动态库中,这样保证Ai Filter在ffmpeg的接口函数与时候与NVR保持独立,互不影响。
步骤
1.编译生成ffmpeg静态库:
1)下载所需要版本代码。下载地址:http://ffmpeg.org/download.html 各个历史版本下载:http://www.ffmpeg.org/releases/
2)下载完成后进行解压
代码语言:javascript复制tar –vxf ffmpeg-4.1.4.tar.xz
cd ffmpeg-4.1.4
./configure --enable-static –disable-shared --disable-yasm --enable-libx264 --enable-gpl --enable-libfreetype –enable-pic
配置完成后,进行编译
代码语言:javascript复制 make
make install
2.把编译生成的.a 文件copy到ai Filter项目下的 Lib/FFmpeg/linux/ 目录下,同时需要copy libx264.a libfreetype.a。
如果需要增加其他外部第三方库,如增加libx264方法一样。 Ffmpeg也提供了需要的地方库的下载地址 https://johnvansickle.com/ffmpeg/release-source/
注意在生成libEasyAIFilter的时候可能会出现Relocation相关的错误,此类解决方法 1)ffmpeg 编译成静态库,需要增加—enable-pic,否则aifilter 库无法调用 2)Aifilter需要"-Wl,-Bsymbolic"编译选项
3)对于在编译ffmpeg的时候使用的第三方库,也需要加入-fPIC编译选项,如libx264 编译的时候./configure --enable-static --enable-pic --disable-opencl
如在编译x246有遇到如下问题
解决:重新更新配置
重新编译x264解决