macOS에서 Android용 소스에서 FFmpeg 빌드하기
이 페이지는 Android용 FFmpeg를 구성하고 빌드하는 방법을 설명합니다. Android용 컴파일은 교차 컴파일이며 macOS를 호스트 시스템으로 사용하는 것을 전제로 합니다. 필요한 단계는 다음과 같습니다:
- FFmpeg 소스 코드를 가져옵니다.
- 필요한 종속 요소를 설치합니다.
- 명령줄에서 FFmpeg를 구성합니다.
- 개발 라이브러리를 빌드합니다.
FFmpeg 소스 코드 가져오기
다음과 같은 방법으로 FFmpeg 소스 코드를 얻을 수 있습니다:
- FFmpeg 다운로드 페이지에서 다운로드합니다.
- git에서 복제. 예를 들어, 이 명령은 FFmpeg 소스 버전 7.1.1을
~/ffmpeg
으로 복제합니다.% git clone --branch n7.1.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
Qt Multimedia 메인 페이지에 설명된 것과 동일한 FFmpeg 버전을 사용하는 것이 좋습니다.
다음 단락에서는 FFmpeg 소스 코드를 ~/ffmpeg
에 저장한다고 가정합니다.
전제 조건
FFmpeg를 빌드하려면 다음 도구와 패키지가 필요합니다:
- 홈브루
- 홈브루 패키지(yasm).
또한 Android NDK, SDK 및 JDK를 설치 및 구성해야 합니다. 이러한 도구를 설정하는 방법에 대한 자세한 내용은 Android용 Qt 시작하기를 참조하세요.
홈브루 설치하기
Homebrew를 설치하려면 다음을 실행합니다:
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
홈브루 패키지 설치하기
홈브루 패키지 Yasm을 설치하려면 다음을 실행합니다:
% brew install yasm
환경 변수 설정하기
이 부분은 꼭 필요한 것은 아니지만 구성 명령을 좀 더 깔끔하고 짧게 유지하는 데 도움이 됩니다.
다음 명령은 Andorid SDK가 ~/Library/Android/sdk
에 설치되어 있고 Android NDK 버전이 26.1.10909125 이라고 가정합니다.
% export ANDROID_NDK_ROOT=~/Library/Android/sdk/ndk/26.1.10909125
안드로이드용 Qt 시작하기 문서에 설명된 것과 동일한 NDK 버전을 사용하는 것이 좋습니다.
빌드해야 하는 아키텍처는 대상 기기에 따라 다릅니다:
- aarch64(ARM64-v8a): 대부분의 최신 안드로이드 기기(64비트)에서 사용됩니다.
- ARMV7 (ARMABI-V7A): 구형 32비트 ARM 디바이스용.
- x86: 주로 인텔 프로세서에서 실행되는 Android 에뮬레이터용입니다.
- x86_64: 64비트 인텔 기반 에뮬레이터 또는 특수 장치용.
아키텍처별 변수를 설정합니다:
- aarch64
% export ARCH=aarch64 % export TOOLCHAIN_ARCH=aarch64-linux-android % export CPU=armv8-a
- armv7
% export ARCH=armv7 % export TOOLCHAIN_ARCH=armv7a-linux-androideabi % export CPU=armv7-a
- x86
% export ARCH=x86 % export TOOLCHAIN_ARCH=i686-linux-android % export CPU=i686
- x86_64
% export ARCH=x86_64 % export TOOLCHAIN_ARCH=x86_64-linux-android % export CPU=x86-64
FFmpeg 구성 및 빌드
~/ffmpeg
디렉터리 내에 build-android
디렉터리를 생성하고 그 안으로 이동합니다:
% mkdir ~/ffmpeg/build-android % cd ~/ffmpeg/build-android
FFmpeg를 구성하려면 실행합니다:
% ../configure --prefix=../install-android --disable-doc --enable-network --enable-shared \ --host-os=darwin-x86_64 --target-os=android \ --enable-cross-compile --arch=${ARCH} --cpu=${CPU} \ --enable-jni --enable-mediacodec \ --sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot \ --sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/ \ --cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \ --cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \ --strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-strip
--prefix
인수는 빌드 후 FFmpeg 개발 라이브러리가 설치되는 경로를 지정합니다. 설명서가 필요하지는 않지만 네트워크 기능이 활성화되어 있어야 합니다. FFmpeg를 정적 라이브러리로 빌드하려면 --enable-shared
옵션을 생략하세요.
보안 백엔드가 있는 FFmpeg를 빌드하는 경우 4가지 옵션 중에서 선택할 수 있지만(Linux용 빌드 시와 동일), 현재 QtMultimedia 관리자는 OpenSSL만 테스트하고 있습니다. 적절한 옵션을 선택하고 FFmpeg 구성 중에 추가하세요:
% --enable-openssl # For OpenSSL % --enable-gnutls # For GnuTLS % --enable-libtls # For LibreSSL (libtls) % --enable-mbedtls # For MbedTLS
OpenSSL을 사용하는 경우 FFmpeg 구성 중에 다음 옵션도 추가해야 합니다. <ANDROID_OPENSSL_INCLUDE_DIR>
및 <ANDROID_OPENSSL_LIBS_DIR>
을 실제 경로로 바꾸는 것을 잊지 마세요.
% --extra-cflags=-I<ANDROID_OPENSSL_INCLUDE_DIR> --extra-ldflags=-L<ANDROID_OPENSSL_LIBS_DIR>
보안 백엔드가 포함된 경우 대상 플랫폼에 올바른 라이브러리가 설치되어 있는지 확인하거나 스텁을 사용하여 직접 전달해야 합니다. 연결된 OpenSSL 라이브러리는 버전 관리 접미사 없이 libssl.so
및 libcrypto.so
으로 호출해야 합니다. 사용자는 라이브러리가 FFmpeg가 컴파일된 OpenSSL 헤더와 동일한 ABI 버전인지 확인해야 합니다. 자세한 내용은 Android용 OpenSSL 지원 추가하기를 참조하세요.
configure
명령이 완료되면 make
명령을 사용하여 FFmpeg를 빌드하고 설치합니다.
% make -j install
빌드가 오류 없이 완료되면 ~/ffmpeg/install-android
디렉토리에 FFmpeg 개발 라이브러리가 설치됩니다. Qt Multimedia 을 빌드하는 경우 이 경로는 Qt Multimedia 을 구성할 때 사용되는 FFMPEG_DIR
변수에 저장됩니다.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.