안드로이드 CMakeList.txt 를 이용한 FFMPEG 라이브러리 적용법
- Coding/Android
- 2019. 4. 18.
1. 안드로이드에서 FFMPEG 사용을 위한 작업환경
- 윈도우 10 or Ubuntu
- 안드로이드 스튜디오(이 포스팅에서는 CMAKE를 이용한 NDK Build 환경)
- NDK환경에서 빌드된 FFMPEG so 파일들(FFMPEG version에 따라 다르게 나올 수 있다.)
- libavcodec-57.so
- libavfilter-6.so
- libavformat-57.so
- libavutil-55.so
- libavpostproc-54.so
- libswresample-2.so
- libswscale-4.so
- etc....
FFMPEG NDK Build의 경우 따로 다룰 예정입니다.
- FFMPEG 헤더파일 (.h)
- armeabi-v7a ABI
2. FFMPEG 라이브러리와 헤더파일 넣기
- 안드로이드를 프로젝트 생성 (NDK 사용)
- 안드로이드 프로젝트 main/jniLibs/armeabi-v7a 폴더에 빌드된 FFMPEG so 파일들을 집어넣어 줍니다.
- cpp/include 폴더에 FFMPEG 헤더파일을 넣어줍니다.
3. CMakeList.txt 을 이용한 FFMPEG 라이브러리 Path 설정
- CMakeList.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.
set(FFmpeg_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/include)
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_avpostproc SHARED IMPORTED)
set_target_properties(lib_avpostproc PROPERTIES IMPORTED_LOCATION ${FFmpeg_DIR}/${ANDROID_ABI}/libavpostproc-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
-landroid
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})
이대로 빌드하게 되면 ABI가 맞지 않아 컴파일에 실패할 수도 있습니다.
- build.gradle 에 abiFilters 추가해주기
ndk{
abiFilters "armeabi-v7a"
}
4. 미리 빌드해 놓은 FFMPEG NDK File 이용
- FFMPEG NDK Build가 힘드신 분들을 위해 제가 미리 빌드해 놓은 파일을 올려놓았습니다.
- zip 파일을 풀어서 사용하시면 됩니다.
- https://github.com/caramelnim/FFMPEG_NDK_BUILD
X. 참고 사이트
http://gamdekong.tistory.com/102
https://d2.naver.com/helloworld/8794
https://whiteduck.tistory.com/130
https://gamdekong.tistory.com/106?category=802028
'Coding > Android' 카테고리의 다른 글
안드로이드 Java 난수 발생 시키기_Random Number (0) | 2020.03.22 |
---|---|
안드로이드 HttpURLConnection을 이용한 CCTV CGI control (0) | 2019.05.11 |
안드로이드 init.rc와 ifconfig를 통한 부팅시 고정 아이피 설정 (0) | 2019.05.07 |
안드로이드 부팅 후 앱 자동실행_AndroidStudio (3) | 2019.05.04 |
안드로이드 시리얼 통신_USB_COM_PROT (8) | 2019.04.30 |