首先我们将ffmpeg所有头文件都导入项目。
头文件全位于include中。那具体的实现类呢,在LIBS中:
那么如何将这些目录是怎么项目关联起来呢,就是在CMAKE中配置:
这里话就是让项目明白,你导入的头文件位于include文件夹中。
因此,在CPP中导入其它的头文件,才不会报错,如:
这里是生成项目时就生成的CPP文件。在此类中导入其它头文件,就会自动从include这个文件夹中去找到 libavcodec这个文件里的头文件。
继续回到CMAKE,这里重点讲下CMAKE的配置:
这里没什么好说的,生成CMAKE时就自动会有此代码,这里旨在将 native-lib 这个类生成一个动态库存。 native-lib直接与JAVA交互。
但实际上,native-lib中,还会引用到其它库,如这里的ffmpeg,该如何配呢。那就是再写一个add_library:
这里是先set了一个FF变量,将路径进行了一个确定。下面的两句是固定写法,先命名了一个库,就是avcodec,这里可以取任意名字,第三行是将这个名字和具体的动态库路径关联起来。
还有一个点,就是 {ANDROID_ABI} ,这个变量是哪里来的呢,这里是build配置中定义的,如:
在build中的配置,一般只需要自己加上这个Filters就行了,其它的都会自动生成。
再讲回CMAKE,我们已经导入了需要的动态库avcodec,那么怎么将这个库和我们直接交互的cpp关联起来呢:
就要用到target-link_libraries这个语句,第一行 native-lib是我们直接交互的库,第二行开始,如这里的avcodec,就是将其打包进native-lib生成的动态库中! 这样就进行一个动态库的合并!
也就是说,我们配置CMAKE的目的,就是最终会生成一个native_lib的动态库,这个动态库里就包括了avocec这个动态库,也就是说,当生成后,我们就可以去掉CMAKE这个编译环节,免得每次RUN的时候都要重新编译这个动态库浪费时间!
网友评论