国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ffmpeg-android studio創(chuàng)建jni項(xiàng)目

這篇具有很好參考價(jià)值的文章主要介紹了ffmpeg-android studio創(chuàng)建jni項(xiàng)目。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、創(chuàng)建native項(xiàng)目

1.1、選擇Native C++

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

1.2、命名項(xiàng)目名稱

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

1.3、選擇C++標(biāo)準(zhǔn)

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

1.4、項(xiàng)目結(jié)構(gòu)

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

1.5、app的build.gradle

plugins {
    id 'com.android.application'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.anniljing.ffmpegnative"
        minSdk 25
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags '-std=c++11'
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    externalNativeBuild {
        cmake {
            path file('src/main/cpp/CMakeLists.txt')
            version '3.18.1'
        }
    }
    buildFeatures {
        viewBinding true
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}
  • android -> defaultConfig ->externalNativeBuild -> cmake
    配置c++使用標(biāo)準(zhǔn)
  • android -> externalNativeBuild -> cmake
    1 、配置cmake文件路徑
    2、配置cmake的版本

1.6、CMakeLists.txt

cmake_minimum_required(VERSION 3.18.1)

project("ffmpegnative")


add_library( # Sets the name of the library.
        ffmpegnative

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        native-lib.cpp)

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

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)


target_link_libraries( # Specifies the target library.
        ffmpegnative

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
  • cmake_minimum_required
    cmake最低版本要求

  • project
    設(shè)置項(xiàng)目名稱

  • add_library
    添加庫并設(shè)置庫的源文件
    1、 Normal Libraries

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])

name:庫名稱
STATIC|SHARED|MODULE:庫類型(靜態(tài)、動(dòng)態(tài)、模塊)
source:源文件

2、Imported Libraries

add_library(<name> <type> IMPORTED [GLOBAL])

導(dǎo)入已經(jīng)生成的庫,通常情況搭配set_target_properties,指定庫的相關(guān)配置信息

set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)
  • find_library
    查找本地庫,一般位于NDK中
find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

  • target_link_libraries
    用于指定目標(biāo)(target)與其所需的庫之間的鏈接關(guān)系。它被用于在構(gòu)建過程中將庫文件鏈接到可執(zhí)行文件或共享庫。
target_link_libraries(
        ffmpegnative
        ${log-lib})

將log-lib庫鏈接到ffmpegnative中

二、配置FFmpeg頭文件和庫

2.1、配置FFmpeg頭文件

#設(shè)置頭文件路徑
include_directories(${CMAKE_SOURCE_DIR}/include)

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

2.2、配置ffmpeg相關(guān)的so庫

2.2.1、添加so庫

#聲明ffmpeg_lib_dir變量,設(shè)置統(tǒng)一的庫文件路徑
set(ffmpeg_lib_dir ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
#添加ffmpeg相關(guān)的庫
#avcodec(音視頻編解碼核心庫)
add_library( avcodec
        SHARED
        IMPORTED )
set_target_properties( avcodec
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libavcodec.so )

#avfilter(音視頻濾鏡庫 如視頻加水印、音頻變聲)
add_library( avfilter
        SHARED
        IMPORTED)
set_target_properties( avfilter
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libavfilter.so )

#swscale(圖像格式轉(zhuǎn)換的模塊)
add_library( swscale
        SHARED
        IMPORTED)
set_target_properties( swscale
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libswscale.so )

#avformat(音視頻容器格式的封裝和解析)
add_library( avformat
        SHARED
        IMPORTED)
set_target_properties( avformat
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libavformat.so )

#avdevice(輸入輸出設(shè)備庫,提供設(shè)備數(shù)據(jù)的輸入與輸出)
add_library( avdevice
        SHARED
        IMPORTED)
set_target_properties( avdevice
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libavdevice.so )

#avutil(核心工具庫)
add_library( avutil
        SHARED
        IMPORTED )
set_target_properties( avutil
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libavutil.so )

#swresample(音頻重采樣)
add_library( swresample
        SHARED
        IMPORTED )
set_target_properties( swresample
        PROPERTIES IMPORTED_LOCATION
        ${ffmpeg_lib_dir}/libswresample.so )

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

2.2.2、鏈接ffmpeg庫

target_link_libraries(
        ffmpegnative
        #鏈接ffmpeg相關(guān)庫
        avutil
        swresample
        avcodec
        avfilter
        swscale
        avformat
        avdevice
        #鏈接本地日志庫
        ${log-lib})

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

2.3、ffmpeg靜態(tài)庫配置

2.3.1、拷貝靜態(tài)庫到j(luò)niLibs文件夾

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

2.3.2、把靜態(tài)庫路徑設(shè)置到默認(rèn)的編譯變量或者庫的搜索變量中

2.3.2.1、設(shè)置CMAKE_CXX_FLAGS

CMAKE_CXX_FLAGS 是 CMake 構(gòu)建系統(tǒng)中用于設(shè)置 C++ 編譯器選項(xiàng)的變量。通過設(shè)置 CMAKE_CXX_FLAGS 變量,您可以向編譯器傳遞各種編譯選項(xiàng)和標(biāo)志。

#聲明ffmpeg路徑變量,設(shè)置統(tǒng)一的庫文件路徑
set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/../jniLibs/ffmpeg)
#聲明ffmpeg包含所有庫變量
set(FFMPEG_LIB avformat avcodec avdevice avfilter avutil swresample swscale)
set(ANDROID_LIB z -landroid log)

#設(shè)置ffmpeg庫文件路徑
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${FFMPEG_DIR}/lib/${ANDROID_ABI}")
#設(shè)置ffmpeg的頭文件
include_directories(${FFMPEG_DIR}/include)

CmakeLists.txt

cmake_minimum_required(VERSION 3.18.1)

project("ffmpegnative")

#聲明ffmpeg路徑變量,設(shè)置統(tǒng)一的庫文件路徑
set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/../jniLibs/ffmpeg)
#聲明ffmpeg包含所有庫變量
set(FFMPEG_LIB avformat avcodec avdevice avfilter avutil swresample swscale)
set(ANDROID_LIB z -landroid log)


#設(shè)置ffmpeg庫文件路徑
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${FFMPEG_DIR}/lib/${ANDROID_ABI}")
#設(shè)置ffmpeg的頭文件
include_directories(${FFMPEG_DIR}/include)


add_library(
        ffmpegnative
        SHARED
        native-lib.cpp

)


target_link_libraries(
        ffmpegnative
        #鏈接ffmpeg相關(guān)庫
        ${FFMPEG_LIB}
        #鏈接本地日志庫
        ${ANDROID_LIB})
2.3.2.2、使用LINK_DIRECTORIES,設(shè)置靜態(tài)庫

LINK_DIRECTORIES是CMake構(gòu)建系統(tǒng)中的一個(gè)命令,用于指定編譯器在鏈接階段查找?guī)煳募乃阉髀窂?/strong>。

在CMakeLists.txt文件中,可以使用LINK_DIRECTORIES命令來指定庫文件的搜索路徑

#聲明ffmpeg路徑變量,設(shè)置統(tǒng)一的庫文件路徑
set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/../jniLibs/ffmpeg)
#聲明ffmpeg包含所有庫變量
set(FFMPEG_LIB avformat avcodec avdevice avfilter avutil swresample swscale)
set(ANDROID_LIB z -landroid log)


#設(shè)置ffmpeg庫文件搜索路徑
LINK_DIRECTORIES(${FFMPEG_DIR}/lib/${ANDROID_ABI})
#設(shè)置ffmpeg的頭文件
include_directories(${FFMPEG_DIR}/include)

CmakeLists.txt

cmake_minimum_required(VERSION 3.18.1)

project("ffmpegnative")

#聲明ffmpeg路徑變量,設(shè)置統(tǒng)一的庫文件路徑
set(FFMPEG_DIR ${CMAKE_SOURCE_DIR}/../jniLibs/ffmpeg)
#聲明ffmpeg包含所有庫變量
set(FFMPEG_LIB avformat avcodec avdevice avfilter avutil swresample swscale)
set(ANDROID_LIB z -landroid log)


#設(shè)置ffmpeg庫文件搜索路徑
LINK_DIRECTORIES(${FFMPEG_DIR}/lib/${ANDROID_ABI})
#設(shè)置ffmpeg的頭文件
include_directories(${FFMPEG_DIR}/include)


add_library(
        ffmpegnative
        SHARED
        native-lib.cpp

)


target_link_libraries(
        ffmpegnative
        #鏈接ffmpeg相關(guān)庫
        ${FFMPEG_LIB}
        #鏈接本地日志庫
        ${ANDROID_LIB})

三、編譯測試

3.1、錯(cuò)誤一

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

  • 把1.6.1修改為1.5.1

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

3.2、編譯arm64-v8a錯(cuò)誤

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

  • 因?yàn)槲覀冎慌渲昧薬rmeabi-v7a,所以我們需要指定只編譯armeabi-v7a的
    ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

3.3、多個(gè)相同文件問題

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

 sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

3.4、找不到so庫文件

為了使目錄更加清晰,我在jniLibs目錄下增加了新的目錄,運(yùn)行以后,程序報(bào)出無法找到so庫文件,生成的apk文件里面也沒有把相關(guān)的so庫打包進(jìn)去
ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android
ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android
ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android
解決方案:

 sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/jniLibs/lib']
        }
    }

在build.gradle的文件下配置好so庫文件所在的路徑
ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

四、調(diào)用ffmpeg相關(guān)api

4.1、聲明native函數(shù)

public native String getFFmpegVersion();

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

4.2、實(shí)現(xiàn)native函數(shù)

#include <libavformat/avformat.h>

extern "C"
JNIEXPORT jstring JNICALL
Java_com_anniljing_ffmpegnative_MainActivity_getFFmpegVersion(JNIEnv *env, jobject thiz) {
    const char* version = av_version_info();

    return env->NewStringUTF(version);
}

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android
ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

  • 沒有正確添加依賴,指定確保C++編譯器按照C語言的約定處理函數(shù)
    ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android

4.3、調(diào)用測試

ffmpeg-android studio創(chuàng)建jni項(xiàng)目,jni,ffmpeg,android studio,android文章來源地址http://www.zghlxwxcb.cn/news/detail-699179.html

到了這里,關(guān)于ffmpeg-android studio創(chuàng)建jni項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android Studio中使用cmake開發(fā)JNI實(shí)戰(zhàn)

    Android Studio中使用cmake開發(fā)JNI實(shí)戰(zhàn)

    JNI學(xué)習(xí)大綱 一、JNI編程入門 二、Android Studio中使用cmake開發(fā)JNI實(shí)戰(zhàn) 第一章節(jié)我們介紹了JNI的開發(fā)步驟,那這一章節(jié)我們就開始在Android Studio中實(shí)戰(zhàn)一下吧,Let\\\'s Start。 AS中菜單欄選擇ToolsSDK Manager 在Android SDK中選擇SDK Tools,安裝CMake和NDK。 在項(xiàng)目工程下的src/main創(chuàng)建cpp目錄,編

    2024年02月14日
    瀏覽(25)
  • 使用Android Studio創(chuàng)建第一個(gè)小項(xiàng)目(登錄頁面)

    使用Android Studio創(chuàng)建第一個(gè)小項(xiàng)目(登錄頁面)

    僅供參考,學(xué)習(xí)使用 我這里了就直接創(chuàng)建一個(gè)模塊了 然后選擇Empty Activity 接下來直接點(diǎn)finish 我沒有藝術(shù)細(xì)胞,所以畫的比較差,大家不要介意 點(diǎn)擊下面我圖片的箭頭處 然后點(diǎn)擊split ####刪掉我圖片中的內(nèi)容 然后點(diǎn)回design 點(diǎn)擊旁邊的TextView,拖動(dòng)到方框中來 接著我們讓這個(gè)

    2024年02月07日
    瀏覽(30)
  • Flutter在Android Studio上創(chuàng)建項(xiàng)目與構(gòu)建模式

    Flutter在Android Studio上創(chuàng)建項(xiàng)目與構(gòu)建模式

    一、安裝插件 ? ? 1、前提條件,安裝配置好Android Studio環(huán)境 ? ? 2、安裝Flutter和Dart插件 ? ?? ? ? Linux或者Windows平臺(tái): 1)、打開 File ?? Settings。 2)、在左側(cè)列表中,選擇 \\\" Plugins \\\" 右側(cè)上方面板選中 ?\\\"Marketplace\\\" 在搜索框中輸入“flutter”,選擇Flutter插件,點(diǎn)擊“Install”安

    2024年02月04日
    瀏覽(34)
  • Android Studio 創(chuàng)建項(xiàng)目不自動(dòng)生成BuildConfig文件

    Android Studio 創(chuàng)建項(xiàng)目不自動(dòng)生成BuildConfig文件

    今天在AS上新建項(xiàng)目發(fā)現(xiàn)找不到BuildConfig文件,怎么clear都不行。通過多方面查找發(fā)現(xiàn)原來gradle版本不同造成的,Gradle 8.0默認(rèn)不生成 BuildConfig 文件。 如上圖,8.0版本是沒有source文件夾 上圖是低于8.0版本有source文件夾 針對(duì)這個(gè)問題,有兩種解決辦法 ?????? 方法一:降低Gr

    2024年01月22日
    瀏覽(23)
  • Android Studio 2022.1.1創(chuàng)建項(xiàng)目的Gradle配置

    Android Studio 2022.1.1創(chuàng)建項(xiàng)目的Gradle配置

    今天使用Android Studio建了一個(gè)新項(xiàng)目,遇到了不少問題,網(wǎng)上也找了不少解決方案都無效(可能Studio版本、項(xiàng)目版本等都不一樣,解決辦法也不一樣吧),最后問題解決,總結(jié)梳理以下幾點(diǎn): Android Studio版本:2022.1.1 Gradle版本:7.5 Android Gradle Plugin Version:7.4.2 JDK版本:Java?1

    2024年02月06日
    瀏覽(24)
  • Android studio配置OpenCV的JNI接口,實(shí)現(xiàn)C++代碼編程

    Android studio配置OpenCV的JNI接口,實(shí)現(xiàn)C++代碼編程

    目錄 一、下載OpenCV-android-sdk 二、新建項(xiàng)目 三、導(dǎo)入OpenCV包 ?四、配置OpenCV的JNI接口,拷貝OpenCV所需的頭文件和庫文件 五、修改Cmake文件 ?六、配置app的build.gradle文件 ?七、測試 OpenCV官網(wǎng)地址:https://opencv.org/? 點(diǎn)擊Library--Releases,下載Android版本,解壓得到?OpenCV-android-sdk文件

    2024年02月10日
    瀏覽(24)
  • Android Studio更新新版本后無法創(chuàng)建flutter項(xiàng)目

    Android Studio更新新版本后無法創(chuàng)建flutter項(xiàng)目

    最新更新了AndroidStudio版本,發(fā)現(xiàn)無法創(chuàng)建flutter項(xiàng)目。 dart和flutter插件確認(rèn)都已安裝,該有的環(huán)境配置都已配置。 最后與同事的插件作比較發(fā)現(xiàn)是Android APK Support這個(gè)插件沒勾選。 勾選后,點(diǎn)擊右下角的apply,重啟AndroidStudio。 然后去點(diǎn)擊File--New--New Flutter Project。

    2024年02月09日
    瀏覽(18)
  • OpenCV(一):Android studio jni配置OpenCV(親測有效,保姆級(jí))

    OpenCV(一):Android studio jni配置OpenCV(親測有效,保姆級(jí))

    目錄 1.下載OpenCV的SDK 2.創(chuàng)建Android Native C++項(xiàng)目 3.Android項(xiàng)目中導(dǎo)入OpenCV工程 4.導(dǎo)入OpenCV的庫文件 5.實(shí)現(xiàn)opencv高斯模糊圖像處理的demo 要在Android Studio中配置使用OpenCV庫的C++方法,需要完成以下步驟: 1.下載OpenCV的SDK 首先,您可以從OpenCV官方網(wǎng)站(Releases - OpenCV )下載適用于And

    2024年02月03日
    瀏覽(46)
  • 利用android studio 生成 JNI需要的動(dòng)態(tài)庫so文件 圖文詳解

    利用android studio 生成 JNI需要的動(dòng)態(tài)庫so文件 圖文詳解

    到官網(wǎng)下載,此處不再陳述 JNI 是JDK里的內(nèi)容,電腦上正確安裝并配置JDK即可。 直接在Android studio下載(File----Settings) 工具一: AndroidStudio下載安裝cmake(調(diào)試Native時(shí)會(huì)使用到LLDB,請(qǐng)一同勾選下載安裝) 工具二: 用NDK的腳本工具使用ndk-build 新建項(xiàng)目,選擇Native C++,如下圖所

    2024年02月09日
    瀏覽(33)
  • 【環(huán)境配置】Android-Studio-OpenCV-JNI以及常見錯(cuò)誤 ( 持續(xù)更新 )

    【環(huán)境配置】Android-Studio-OpenCV-JNI以及常見錯(cuò)誤 ( 持續(xù)更新 )

    最近一個(gè)項(xiàng)目要編譯深度學(xué)習(xí)的庫,需要用到 opencv 和 JNI,本文檔用于記錄環(huán)境配置中遇到的常見錯(cuò)誤以及解決方案 解決辦法: 刪除文件 .idea/gradle.xml 和 .idea/workspace.xml , 重新編譯; 解決辦法:Invalid Gradle JDK configuration found 原因是NDK版本過高,跟當(dāng)前的AndroidStudio版本不匹配

    2024年02月11日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包