<작업환경>

-윈도우10

-안드로이드 스튜디오 2.3.3

-필요 라이브러리 빌드된 ffmpeg 라이브러리

  (ffmpeg 빌드하기 : http://gamdekong.tistory.com/103?category=776642 )



1.안드로이드 프로젝트 생성


include C++ support를 채크해서 프로젝트를 생성한다.




안드로이드에서 프로젝트로 변경






2. 이미 빌드된 라이브러리 복사



앞서 만든 라이브러리를 

main/cpp폴더에 include폴더를 복사

main/에 jniLibs 폴더를 생성후 라이브러리 so파일을 그림과 같은 폴더형태로 복사한다.






3. CMakeLists.txt 파일 내용 설정


app/CMakeLists.txt 파일수정


# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
 
# Sets the minimum version of CMake required to build the native library.
 
cmake_minimum_required(VERSION 3.4.1)
 
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
 
 
#####################################################################
#FFmpeg_DIR 변수 설정(위치를 위한)
 
## 위치설정은 중요하다.
set(FFmpeg_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)
 
 
 
#####################################################################
#라이브러리의 헤더파일 위치 설정
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/include)
 
 
#ffmpeg 라이브러리 추가
add_library(lib_avcodec SHARED IMPORTED)
set_target_properties(lib_avcodec PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libavcodec-57.so)
 
 
 
add_library(lib_avfilter SHARED IMPORTED)
set_target_properties(lib_avfilter PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libavfilter-6.so)
 
add_library(lib_avformat SHARED IMPORTED)
set_target_properties(lib_avformat PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libavformat-57.so)
 
add_library(lib_avutil SHARED IMPORTED)
set_target_properties(lib_avutil PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libavutil-55.so)
 
add_library(lib_postproc SHARED IMPORTED)
set_target_properties(lib_postproc PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libpostproc-54.so)
 
add_library(lib_swresample SHARED IMPORTED)
set_target_properties(lib_swresample PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libswresample-2.so)
 
add_library(lib_swscale SHARED IMPORTED)
set_target_properties(lib_swscale PROPERTIES IMPORTED_LOCATION
    ${FFmpeg_DIR}/${ANDROID_ABI}/libswscale-4.so)
 
#####################################################################
 
add_library( # Sets the name of the library.
             native-lib
 
             # Sets the library as a shared library.
             SHARED
 
             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )
 
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
 
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 )
 
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
 
target_link_libraries( # Specifies the target library.
                       native-lib
 
                       #native-lib에서 사용할 라이브러리 링크하기
                       lib_avcodec
                       lib_avfilter
                       lib_avformat
                       lib_avutil
                       lib_swresample
                       lib_swscale
 
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
cs


주위점은 위치설정이다 위치설정은 꼭해주는것이 좋다.


1. 위치설정

2. 라이브러리 추가

3. 사용할 라이브러리에 라이브러리 링크해주기.






4. build.gradle 설정


app/build.gradle 파일 수정


녹색박스 추가.






5. jni파일 수정


자동으로 생성된 native-lib.cpp 파일


cpp파일로 생성되었기 때문에

extern "C"{ } 안에 헤더를 포함한다.(중요)


av_register_all() 는 avformat.h 에 선언되어있는 함수.




MainActivity


자동으로 생성되어 있는것을 확인할 수 있다.

'안드로이드 > ffmpeg' 카테고리의 다른 글

ffmpeg for android 빌드  (2) 2017.11.09
안드로이드에서 ffmpeg 라이브러리 사용하기(NDK)  (10) 2017.11.09

+ Recent posts