Android Studio搭建FFmpeg环境

搭建NDK工程的时候特别要注意踩坑,平时基本没玩过NDK的东西,第一次搭建FFmpeg的环境就被坑爹了

不知道从Android studio哪个版本开始,创建native c++的项目“CMakeLists.txt”文件就被放在src/main/cpp文件夹下了,以前最早的工程这个文件是被放在app路径下的(跟build.gradle是同一级)。

搭建FFmpeg的环境,需要在Linux环境下编译FFmpeg库

一、FFmpeg最新的搭建

将FFmpeg的lib库和头文件全部放在src/main/cpp路径下
FFmpeg头文件和库
开始书写CmakeLists.txt

cmake_minimum_required(VERSION 3.4.1)

#定义一个FFmpeg文件路径
set(FFMPEG ${CMAKE_SOURCE_DIR}/ffmpeg)
#头文件所在文件
include_directories(${FFMPEG}/include)
#需要传递的编译路径
set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -L${FFMPEG}/libs/${CMAKE_ANDROID_ARCH_ABI}")
#指定编译路径,会将src路径下所有的c文件都编到native-lib中
file(GLOB src_files *.cpp)

add_library( # Sets the name of the library.
             native-lib

             SHARED

             ${src_files}
             #native-lib.cpp
        )


find_library( # Sets the name of the path variable.
              log-lib
              log )

target_link_libraries( # Specifies the target library.
                       native-lib
                       avcodec avfilter avformat avutil swresample swscale
                       ${log-lib}
                       #z
        )

最后配置build.gradle

externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters "armeabi-v7a"
            }
        }

        ndk{
            abiFilters("armeabi-v7a")
        }

这里需要注意,上面ndk{}这个必须要配置,否则就会在apk运营起来闪退,会报如下的错误

 Process: com.dh.dh_ndkproject3, PID: 3175
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.dh.dh_ndkproject3-LeqHzP9jyBW7bHn3tzU9tg==/base.apk"],nativeLibraryDirectories=[/data/app/com.dh.dh_ndkproject3-LeqHzP9jyBW7bHn3tzU9tg==/lib/arm64, /system/lib64, /product/lib64]]] couldn't find "libnative-lib.so"
        at java.lang.Runtime.loadLibrary0(Runtime.java:1012)
        at java.lang.System.loadLibrary(System.java:1672)
        at com.dh.dh_ndkproject3.MainActivity.<clinit>(MainActivity.java:12)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:41)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1224)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3340)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
2020-06-22 00:56:26.033 3175-3252/com.dh.dh_ndkproject3 E/MemoryLeakMonitorManager: MemoryLeakMonitor.jar is not exist!
2020-06-22 00:56:26.034 3175-3290/com.dh.dh_ndkproject3 E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@3e4b40a
2020-06-22 00:56:26.038 3175-3290/com.dh.dh_ndkproject3 E/AwareLog: AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@f7e47b

然后就是配置CMakeList.txt的路径,是在创建NDK项目的时候自动生成的,最新的配置和老的配置有所不同,如果需要改成老的配置,这里的路径就需要自己手动修改,老的配置下面会讲。

externalNativeBuild {
        cmake {
            //cmake文件的路径,以前cmake是放在app一个等级的
            path "src/main/cpp/CMakeLists.txt"
            //cmake的版本
            version "3.10.2"
        }
    }

二、FFmpeg老的搭建套路

此时FFmpeg的lib库和头文件就不是全部放在src/main/cpp下了,而是将库文件放在app下的libs中,
头文件仍然放在src/main/cpp中
在这里插入图片描述

开始书写CmakeLists.txt,此时的cmake文件就跟最新的文件写法有所差别,这两部分是同一个文件,
因为这个代码块不够智能把“/*.cpp”当成注释的开始了,┭┮﹏┭┮,所以才故意分开的

cmake_minimum_required(VERSION 3.4.1)

#指定编译路径
file(GLOB SOURCE src/main/cpp/*.cpp)
add_library( # Sets the name of the library.
             native-lib

             SHARED

             ${SOURCE}
             #src/main/cpp/native-lib.cpp
        )

#编译时候的头文件
include_directories(src/main/cpp/include)
#将armeabi-v7a设置为环境路径
set(mylib ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI})
#需要传递的编译路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${mylib}")

find_library( # Sets the name of the path variable.
              log-lib

              log )

target_link_libraries( # Specifies the target library.
                       native-lib
                       #指定哪些静态库需要编译到native-lib中
                       avcodec avfilter avformat avutil swresample swscale
                       ${log-lib} )

build.gradle的配置,ndk的配置参考上面最新的配置套路,唯一需要修改的是将CMakeList.txt的路径配置路径修改到app下。

externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
            version "3.10.2"
        }
    }

哎 纪念被坑过的时间,伤不起

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为在 CLion 中搭建 FFmpeg 环境,你需要按照以下步骤进行操作: 1. 首先,确保已经安装了 CMake 和 CLion。如果没有安装,请先下载并安装它们。 2. 接下来,下载 FFmpeg 的源代码。你可以从官方网站(https://www.ffmpeg.org/)或 GitHub 上获取最新的源代码。 3. 解压源代码,并进入解压后的目录。 4. 在终端中执行以下命令来配置 FFmpeg 的构建: ``` ./configure --prefix=/path/to/installation ``` 注意要将 `/path/to/installation` 替换为你想要安装 FFmpeg 的路径。这个路径将用于后续的步骤。 5. 执行以下命令来编译 FFmpeg: ``` make ``` 这个过程可能需要一些时间,具体取决于你的计算机性能和网络速度。 6. 编译完成后,执行以下命令来安装 FFmpeg: ``` make install ``` 这将把 FFmpeg 安装到之前指定的路径中。 7. 打开 CLion,并创建一个新的 CMake 项目。 8. 在 CMakeLists.txt 文件中,添加以下内容: ``` cmake_minimum_required(VERSION 3.10) project(ffmpeg_example) find_package(FFmpeg REQUIRED) add_executable(ffmpeg_example main.c) target_link_libraries(ffmpeg_example PRIVATE ${FFMPEG_LIBRARIES}) target_include_directories(ffmpeg_example PRIVATE ${FFMPEG_INCLUDE_DIRS}) ``` 这将设置你的项目,使其能够使用 FFmpeg。 9. 创建一个名为 `main.c` 的新文件,并编写你的代码。 10. 点击 CLion 工具栏中的 "Build" 按钮来构建你的项目。 现在,你应该能够在 CLion 中成功搭建 FFmpeg 环境并编写代码了。如果遇到任何问题,请确保已正确执行上述步骤,并检查是否有任何错误或警告信息输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃骨头不吐股骨头皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值