마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ffmpeg 강좌(남은그루터기님) 마지막 어플 실행 질문

0 추천

안녕하세요.

남은그루터기님의 ffmpeg 강좌를 보고 진행중입니다.

컴파일까지 문제 없이 완료하였고

마지막 어플 실행 단계에서 아래와 같은 문제가 생겨서 질문드립니다.

D:\FFmpegBasic\libs\armeabi-v7a 폴더에 libbasicplayer.so 파일이 있는데

못찾는다고 나오네요.

소스는 패키지만 수정하고 첨부파일 그래도 사용하였습니다. 

package ffmpegbasic.jbong.net.ffmpegbasic;

혹시 패키지명이 달라져서 그러는건가요?

BasicPlayer의 위치

D:\FFmpegBasic\BasicPlayer

FFmpegBasic.java의 위치

D:\FFmpegBasic\app\src\main\java\ffmpegbasic\jbong\net\ffmpegbasic

BasicPlayer의 위치를 옮겨봐도 아직까지 실행은 못하고 있네요.

도와주시면 감사하겠습니다. ㅠ

 

 

오류 코드

 

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: ffmpegbasic.jbong.net.ffmpegbasic, PID: 4611
                  java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-support-annotations-24.2.1_fc66b8a095f3edd1847049bf3708f3ab77bb639a-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-internal_impl-24.2.1_e436de3328b48a7f6b2714e4a9ae435961895c32-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-internal_impl-24.2.1_be230c55548938665ec080bd7d14c9310a0e8dcc-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-internal_impl-24.2.1_a903f910720ef0596f086cfd1a68cbec6bd9a442-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-internal_impl-24.2.1_43fd694199b23f2a85984196349eeabc8247ad71-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-internal_impl-24.2.1_16dd57ae1c65dbad339350307b30bbf69a8ba4f6-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-vector-drawable-24.2.1_d24b31cb928a8e9f95a4c330e7512a48b265f4e0-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-v4-24.2.1_2f0df8688eb57c73f55f06e2f95869a53ee78e15-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-media-compat-24.2.1_2227683dae91f80a7d4d774323a2c5af055eb9bb-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-fragment-24.2.1_226862f2c400204ddd9b59e2076f204ac274b97e-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-core-utils-24.2.1_e587020bed755bb404389fcc51e303d10afd2953-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-core-ui-24.2.1_b3c3478d0a19586e358ec3ad47a18fc28843fa05-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-support-compat-24.2.1_64a9b8769eb0478c87a03d4fe00388f4620ec627-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-appcompat-v7-24.2.1_b74a21293d99497225dd8df222302a5a776cdb85-classes.dex", dex file "/data/data/ffmpegbasic.jbong.net.ffmpegbasic/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-24.2.1_bddd07b5ce08901d6c02474fb4588033176e0da9-classes.dex"],nativeLibraryDirectories=[/data/app/ffmpegbasic.jbong.net.ffmpegbasic-1/lib/x86_64, /vendor/lib64, /system/lib64]]] couldn't find "libbasicplayer.so"
                      at java.lang.Runtime.loadLibrary(Runtime.java:367)
                      at java

익명사용자 님이 2017년 4월 18일 질문

1개의 답변

0 추천
네 패키지명 수정하시면 심볼 못 찾아 라이브러리가 로드 안됩니다.

 Interface.c 파일을 보시면

Java_net_jbong_FFmpegBasic_MoviePlayView_initBasicPlayer 와 같이 되어 있습니다.

이 함수명이 괜히 긴게 아니라.  java 의 net.jbong.FFMpegBasic 패키지에 있는 MoviePlayView.java 파일의 initBasicPlayer   method 가 호출 될 때 이 함수가 불린다는 의미입니다.

 

패키지명이 변경되었으니. 이러한 함수명을 전부 변경한 패키지 명으로 바꿔 주시던지,

java 함수와 c쪽에서 사용되는 함수를 매핑 테이블 같은 것으로 선언 해 주셔야 합니다.
익명사용자 님이 2017년 4월 18일 답변
답변 감사드립니다.
말씀대로 하고 있는데 질문이 있어서 댓글답니다 ㅠ
interface의 함수명도 저의 패키지경로로 수정했는데도 잘안되네요.
그루터기님이 올려주신 함수명은 다음과 같습니다.

Java_net_jbong_FFmpegBasic_MoviePlayView_initBasicPlayer

그리고 인터페이스 파일의 경로와 FFmpegBasic.java 파일의 경로는 다음과 같습니다.

g:/Root/FFmpegBasic/BasicPlayer
g:/Root/FFmpegBasic/src/net/jbong/FFmpegBasic

다시 질문을 드리면
interface.c 의 함수명이 Java로 시작하는데 Java는 고정이고 /net 부터 경로를 적어주면 될까요?
.java파일이 있는 로컬 주소는 아래와 같습니다.

D:\FFmpegBasic\app\src\main\java\ffmpegbasic\jbong\net\ffmpegbasic

그럼 저의 경우는
Java_main_java_ffmpegbasic_jbong_net_ffmpegbasic_MoviePlayView_initBasicPlayer(JNIEnv *env, jobject thiz)
작성해야 할까요?
MoviePlayView.java 파일 최상단의 패키지명을 확인 해 보세요..
아마 package ffmpegbasic.jbong.net.ffmpegbasic; 로 선언 되어 있을 듯 하네요..

따라서 Java_ffmpegbasic_jbong_net_ffmpegbasic_MoviePlayView_initBasicPlayer 같이 변경 하시면 될 것으로 생각됩니다.
친절한 답변 감사합니다.
아직까지 해결은 못했는데

현재 진행상황은
D:\FFmpegBasic\app\src\main
폴더에서 ndk-build를 실행하고 나서
안드로이드 스튜디오 툴창에 보면

app
      manifests
      java

에서

app
  manifest
  java
  cpp

로 cpp가 추가되고 cpp 폴더안에 BasicPlayer와 ffmpeg 폴더가 갱신됐습니다.
그 다음으로 gradle.properties에 android.useDeprecatedNdk=true 추가하고
local.properties에 ndk.dir=c\:\\android-ndk-r5b 를 추가하여 진행하면

Error:A problem occurred configuring project ':app'.
> Unable to find toolchain: c:\android-ndk-r5b\toolchains\x86-4.2.1\prebuilt
이런 오류가 발생하고 있습니다.

toolchains 안 다른 폴더에는 prebuilt가 있는데 해당 오류 폴더에만 없는 상황입니다. 구글링을 해서 다시 다운받아서 없었스빈다.
최신버전의 ndk를 받아서 진행하여도 다른 부분에서 오류가 나면서 빌드가 진행되지 않습니다.
패키지를 수정하여 진행해도 동작이 안되고 답답하네요 ㅠ
안드로이드 스튜디오로 진행해서 그런걸까요?
강의에 나온 디렉토리 환경이랑 조금 다른데 해결을 못하겠네요.
혹시라도 또 조언해주실 부분 있으시면 답변 부탁드리겠습니다.
최신 NDK는 14b인데 설명은 5버젼으로 되어 있어서 그렇습니다.
gcc 버젼이 업데이트 되었으니,  x86-4.2.1 대신 x48-4.9 같은걸로 경로를 바꾸세요.
남은그루터기 님 강좌는 오래전에 나온것이라.
구글에서 빌드하는 법을 참조하시는 것도 방법입니다.(이건 오디오만 ffmpeg로 디코딩합니다.)
https://github.com/google/ExoPlayer/tree/release-v2/extensions/ffmpeg
...