Mac android呼叫ffmpeg 方法
因為我們只編譯了 arm 版本的 so,所以需要把 so 拷到 armeabi-v7a 目錄下,完整路徑
├── build.gradle
├── libs
│ ├── armeabi-v7a
│ │ ├── libavcodec-57.so
│ │ ├── libavfilter-6.so
│ │ ├── libavformat-57.so
│ │ ├── libavutil-55.so
│ │ ├── libswresample-2.so
│ │ └── libswscale-4.so
│ └── include
│ ├── libavcodec
│ ├── libavfilter
│ ├── libavformat
│ ├── libavutil
│ ├── libswresample
│ └── libswscale
├── proguard-rules.pro
└── src
└── main
├── AndroidManifest.xml
├── cpp
├── java
└── res
指定JniLibs庫的地址,這個是在NDK編譯時能夠找到相應的庫路徑或標頭檔案的路徑
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
指定abifilter:指定當前軟體支援的CPU
android {
...
defaultConfig {
...
ndk {
abiFilters
'armeabi-v7a'
}
}
}
編寫Cmake指令碼
cmake_minimum_required(VERSION 3.4.1)
add_library( # 設定庫的名字
native-lib
# 設定為共享庫
SHARED
# 編譯下面的問生成的庫檔案時上面的名字
src/main/cpp/native-lib.cpp )
add_library( avcodec-57 #這是我們編譯的庫檔案
SHARED #共享庫
IMPORTED )
set_target_properties( avcodec-57 #編譯的庫檔案
PROPERTIES IMPORTED_LOCATION #定義匯入庫的文章
../../../../libs/armeabi-v7a/libavcodec-57.so )
add_library( avfilter-6
SHARED
IMPORTED )
set_target_properties( avfilter-6
PROPERTIES IMPORTED_LOCATION
../../../../libs/armeabi-v7a/libavfilter-6.so )
add_library( avformat-57
SHARED
IMPORTED )
set_target_properties( avformat-57
PROPERTIES IMPORTED_LOCATION
../../../../libs/armeabi-v7a/libavformat-57.so )
add_library( avutil-55
SHARED
IMPORTED )
set_target_properties( avutil-55
PROPERTIES IMPORTED_LOCATION
../../../../libs/armeabi-v7a/libavutil-55.so )
add_library( swresample-2
SHARED
IMPORTED )
set_target_properties( swresample-2
PROPERTIES IMPORTED_LOCATION
../../../../libs/armeabi-v7a/libswresample-2.so )
add_library( swscale-4
SHARED
IMPORTED )
set_target_properties( swscale-4
PROPERTIES IMPORTED_LOCATION
../../../../libs/armeabi-v7a/libswscale-4.so )
#指定標頭檔案的目錄地址
include_directories( libs/include )
#日誌檔案檔案庫的這種
find_library(
log-lib
log )
#對連線庫的指定
target_link_libraries( # Specifies the target library.
native-lib
avcodec-57
avfilter-6
avformat-57
avutil-55
swresample-2
swscale-4
# Links the target library to the log library
# included in the NDK.
${log-lib} )
在java檔案中引用下列相應的庫檔案:下列的庫要注意相應的引入順序,如果順序不對可能有好多異常出現(後面使用單個so是就不會出現)
static {
System.loadLibrary("native-lib");
System.loadLibrary("avcodec-57");
System.loadLibrary("avfilter-6");
System.loadLibrary("avformat-57");
System.loadLibrary("avutil-55");
System.loadLibrary("swresample-2");
System.loadLibrary("swscale-4");
}
native-lib.cpp中輸入程式碼
#include <jni.h>
#include <string>
extern "C"{
#include <libavcodec/avcodec.h>>
}
extern "C"
jstring
Java_com_example_testffmpeg_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
// return env->NewStringUTF(hello.c_str());
return env->NewStringUTF(av_version_info());
}
相關文章
- Mac中編譯FFmpeg教程(Android版)Mac編譯Android
- ffmpeg for androidAndroid
- mac上編譯FFmpegMac編譯
- 我的第一個ffmpeg程式(編譯及呼叫ffmpeg函式)編譯函式
- PHP-fpm Linux 環境使用 exec 函式呼叫 FFmpeg,報錯 FFmpeg: command not found 的解決方法PHPLinux函式
- FFmpeg系列(一)-Mac環境下使用NDK編譯FFmpegMac編譯
- C#程式呼叫FFmpeg操作音視訊C#
- JavaScript如何呼叫Native iOS/Android 方法JavaScriptiOSAndroid
- H5 呼叫 Android 和 iOS 方法H5AndroidiOS
- ffmpeg安裝之mac安裝Mac
- Android總結之鏈式呼叫(方法鏈)Android
- 在用Android WebView呼叫js時方法錯誤AndroidWebViewJS
- FFmpeg command line tool(Android中使用FFmpeg命令列)Android命令列
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Android 基於ffmpeg開發簡易播放器 - ffmpeg解封裝Android播放器封裝
- 將ffmpeg引入到Android工程中Android
- Android-通過cmake整合ffmpegAndroid
- Mac下載Android原始碼的方法MacAndroid原始碼
- Android高手進階教程(二十)之---Android與JavaScript方法相互呼叫!AndroidJavaScript
- FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫筆記Linux編譯Android
- FFmpeg編譯Android使用的so庫編譯Android
- Android-ffmpeg編譯so檔案Android編譯
- Android 基於ffmpeg開發簡易播放器 - NDK交叉編譯ffmpegAndroid播放器編譯
- Runloop & 方法呼叫OOP
- FFmpeg讀取Mac攝像頭的問題Mac
- Android中js呼叫java本地方法的三種方式AndroidJSJava
- android實現app通過jni呼叫C/C++方法AndroidAPPC++
- 用 NDK 編譯 ffmpeg 到 Android 平臺編譯Android
- 突破Android P(Preview 1)對呼叫隱藏API限制的方法AndroidViewAPI
- Android之Activity介面跳轉--生命週期方法呼叫順序Android
- Eclipse中Android公共庫的正確建立及呼叫方法EclipseAndroid
- 為啥呼叫new Thread().start()方法會呼叫run()方法?thread
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- restfulwebservice 呼叫方法 getRESTWeb
- js 呼叫 WebService 方法JSWeb
- FastScripts for Mac(指令碼呼叫工具)ASTMac指令碼
- Android中整合FFmpeg及NDK基礎知識Android
- 編譯Android下可執行命令的FFmpeg編譯Android