#java #android #ffmpeg
#java #Android #ffmpeg
Вопрос:
ниже приведен мой файл Gradle, который я хочу загрузить avutil.so файл для FFMPEG Я добавил javabytedeco lib для ffmpeg, и он имеет большой размер, поэтому я добавил только JavaCV lib, но это необходимо.поэтому файл, когда я запускаю приложение, работает нормально, ошибок нет, но когда я пытаюсь создать видео с помощью ffmpeg, я получаю ошибку.
android {
defaultConfig {
applicationId "com.mghori.vimory"
minSdkVersion 17
targetSdkVersion 29
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk{
abiFilters "arm64-v8a"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ["libs"]
}
}
}
dependencies {
implementation group: 'org.bytedeco', name: 'javacv', version: '1.5.3'
implementation group: 'org.bytedeco', name: 'javacpp', version: '1.5.3'
implementation group: 'org.bytedeco', name: 'javacpp', version: '1.5.3', classifier: 'android-arm64'
implementation group: 'org.bytedeco', name: 'javacpp', version: '1.5.3', classifier: 'android-x86_64'
implementation group: 'org.bytedeco', name: 'ffmpeg', version: '4.2.2-1.5.3'
implementation group: 'org.bytedeco', name: 'ffmpeg', version: '4.2.2-1.5.3', classifier: 'android-arm64'
implementation group: 'org.bytedeco', name: 'ffmpeg', version: '4.2.2-1.5.3', classifier: 'android-x86_64'
}
и я получил ошибку ниже, пожалуйста, помогите мне с каким-либо решением
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mghori.vimory, PID: 21519
java.lang.NoClassDefFoundError: org.bytedeco.ffmpeg.global.avutil
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at org.bytedeco.javacpp.Loader.load(Loader.java:1176)
at org.bytedeco.javacpp.Loader.load(Loader.java:1109)
at org.bytedeco.ffmpeg.avformat.Write_packet_Pointer_BytePointer_int.<clinit>(Write_packet_Pointer_BytePointer_int.java:21)
at org.bytedeco.javacv.FFmpegFrameRecorder.<clinit>(FFmpegFrameRecorder.java:323)
at com.mghori.vimory.UtilityClass.getRecorder(UtilityClass.java:113)
at com.mghori.vimory.activity.saveoperation.setupVideoRecorder(saveoperation.java:153)
at com.mghori.vimory.activity.VideoProcessingDialogActivity.onCreate(VideoProcessingDialogActivity.java:418)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7807)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
Caused by: java.lang.UnsatisfiedLinkError: No implementation found for long org.bytedeco.ffmpeg.global.avutil.AV_NOPTS_VALUE() (tried Java_org_bytedeco_ffmpeg_global_avutil_AV_1NOPTS_1VALUE and Java_org_bytedeco_ffmpeg_global_avutil_AV_1NOPTS_1VALUE__)
at org.bytedeco.ffmpeg.global.avutil.AV_NOPTS_VALUE(Native Method)
at org.bytedeco.ffmpeg.global.avutil.<clinit>(avutil.java:270)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at org.bytedeco.javacpp.Loader.load(Loader.java:1176)
at org.bytedeco.javacpp.Loader.load(Loader.java:1125)
at org.bytedeco.javacv.FFmpegFrameRecorder.tryLoad(FFmpegFrameRecorder.java:103)
at org.bytedeco.javacv.FFmpegFrameRecorder.<clinit>(FFmpegFrameRecorder.java:129)
Комментарии:
1. Пожалуйста, попробуйте использовать Gradle JavaCPP для управления библиотеками: github.com/bytedeco/gradle-javacpp#the-platform-plugin
2. Здравствуйте #сэмюэль-одет, я перепробовал всевозможные варианты запуска ваших последних библиотек для Android. Происходит сбой для отсутствующего класса «NoClassDefFoundError: org.bytedeco.ffmpeg.global.avutil». С приведенной ниже зависимостью это работает, javacv: 1.4.1, ffmpeg: 3.4.2-1.4.1
3. Здравствуйте @samuel-audet, я перепробовал всевозможные варианты запуска ваших последних библиотек для Android. Происходит сбой из-за отсутствия класса «org.bytedeco.ffmpeg.global.avutil». Я также попытался поместить все зависимые файлы Jar в проект ‘ffmpeg-4.3.1-1.5.4.jar ‘, ‘javacpp-1.5.4.jar ‘ amp; ‘javacv-1.5.4.jar ‘ С зависимостью javacv: 1.4.1, ffmpeg: 3.4.2-1.4.1 это работает. Но это не работает с javacv: 1.5.4, ffmpeg: 4.1-1.4.4
4. ffmpeg-4.3.1-1.5.4 работает для меня просто отлично. Если вы хотите получить некоторую помощь, вам нужно предоставить более подробную информацию о сообщениях об ошибках и т.д., Которые вы получаете.