2011-07-28 7 views
7

수 있습니다. 내 아이폰/ipad project.im에서 FFmpeg를 Xcode 4를 사용하여 통합하는 방법을 말해주세요. 많은 검색을했지만 유용한 링크를 찾지 못했습니다. FFMpeg를 내 프로젝트에 통합하는 단계별 절차.iphone/ipad 프로젝트에 FFMPEG 통합

덕분에,

답변

0

의 ./configure 스크립트를

./configure를 --extra-LDFLAGS = -L/개발자/플랫폼/iPhoneOS.platform/개발자/SDK를/iPhoneOS4.3.sdk는/usr/lib/system --disable-bzlib --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver - 크로스 컴파일 - arch = target - os = darwin - cc =/개발자/플랫폼/iPhoneOS.platform/개발자/usr/bin/gcc --as = 'gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'- -sysroot =/개발자/플랫폼/iPhoneOS.platform/개발자/SDKs/iPhoneOS4.3.sdk --cpu = cortex-a8 --extra-cflags = '- arch armv7'--extra-ldflags = '- arch armv7' - enable-pic

이 작동합니다. 디폴트 ffmpeg 설정 스크립트는 기본 라이브러리 경로가 "/ usr/lib/system"으로 설정되어 있기 때문에 라이브러리 libcache.dylib를 찾을 수 없으므로 여기서 이것을 최신 sdk 경로로 설정했습니다.

38

전제 조건

MacPorts를 설치 :는 FFmpeg 소스 개방 단자와

sudo port install pkgconfig

시작 터미널을 입력하고 다운로드

디렉토리의 위치는 개인 취향에 달려 있으며, 나중에 쉽게 액세스 할 수 있도록 내 홈 폴더 아래의 ffmpeg 폴더에 저장하기로했습니다. 우리는 더 이상 갈 전에

git clone git://source.ffmpeg.org/ffmpeg.git ~/ffmpeg

, 우리는 앞서 생각하고 우리가 아이폰에 실제 테스트와 함께 맥 자체에 대한 몇 가지 시뮬레이션을 할 가능성이 있음을 인식 할 필요가있다. armv7 (iPhone 3Gs 이상), armv7s (iPhone 5) 및 i386 (iPhone Simulator)의 3 가지 아키텍처에 대한 라이브러리를 빌드해야합니다.

ffmpeg 폴더 안에 3 개의 서로 다른 빌드를 저장할 폴더를 만들어 보자. 하나의 유니버설 빌드로 함께 만들 수 있습니다.

cd ffmpeg mkdir armv7 mkdir armv7s mkdir i386 mkdir -p universal/lib

는 가스 전처리를 다운로드 ZIP 아이콘을 가스 전처리에게

  1. 를 클릭하여 설치합니다.
  2. gas-preprocessor.pl을/usr/bin 디렉토리에 복사하십시오.
  3. 특권을 읽기로 설정하여 gas-preprocessor.pl의 권한을 변경하십시오. & 모두 쓰기.당신은는 FFmpeg 폴더 타입에 이동하여 상세 옵션을 참조 할 수 , 구성하기 전에하는 ARMv7 빌드

    에 대한

구성는 FFmpeg : 옵션의

./configure --help

목록 당신의 참고 번호 : FFmpeg Configure Options. "구성 요소 옵션"은 FFmpeg로 무엇을하고 싶은지에 달려 있습니다.

이제 다음과 같은 구성 옵션을 실행

WARNING: Compiler does not indicate floating-point ABI, guessing soft.

없음 걱정 :

./configure \ --prefix=armv7 \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --enable-avresample \ --enable-cross-compile \ --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk" \ --target-os=darwin \ --cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" \ --extra-cflags="-arch armv7 -mfpu=neon -miphoneos-version-min=6.0" \ --extra-ldflags="-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -miphoneos-version-min=6.0" \ --arch=arm \ --cpu=cortex-a9 \ --enable-pic \

가 당신은 경고와 같은 발생할 수 있습니다. 다음 단계를 계속 진행하는 것이 좋습니다.

하는 ARMv7

실행에 대한 FFmpeg를 빌드 빌드 명령 :

make clean && make && make install

지금 당신이 파일을 볼 수 있어야는 는 FFmpeg /하는 ARMv7 폴더 안에 채워집니다. 우리는 지금 아이폰 5

구성에 대한 armv7s를위한 건물로 이동하고 armv7s 아키텍처는 FFmpeg 설치 (아이폰 5)

. /configure \ --prefix=armv7s \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --enable-avresample \ --enable-cross-compile \ --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk" \ --target-os=darwin \ --cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" \ --extra-cflags="-arch armv7s -mfpu=neon -miphoneos-version-min=6.0" \ --extra-ldflags="-arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk -miphoneos-version-min=6.0" \ --arch=arm \ --cpu=cortex-a9 \ --enable-pic \

그런 다음 빌드 : 대한

make clean && make && make install

구성는 FFmpeg i386 빌드

./configure \ --prefix=i386 \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --enable-avresample \ --enable-cross-compile \ --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk" \ --target-os=darwin \ --cc="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc" \ --extra-cflags="-arch i386" \ --extra-ldflags="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk" \ --arch=i386 \ --cpu=i386 \ --enable-pic \ --disable-asm \

마지막 --disable-asm 태그에 유의하십시오.

make clean && make && make install

사러 명령 (가정을 보편적 라이브러리를 작성

cc1: error in backend: Ran out of registers during register allocation! make: *** [libavcodec/h264_cabac.o] Error 1

가 I386에 대한 FFmpeg에 빌드 :이 태그를 포함하는 것을 잊지 경우, 당신은 가능성이 오류가 발생하는 것입니다 당신은 여전히 ​​ffmpeg 폴더 아래에 있습니다 : (Mountain Lion이 제공하는 lipo는 아직 armv7에 대해 아무것도 모르기 때문에 xcrun을 사용해야합니다. SDK와 함께 제공되는 사러을 찾을 수 있습니다.) 범용/lib 디렉토리 아래

cd armv7/lib for file in *.a do cd ../.. xcrun -sdk iphoneos lipo -output universal/lib/$file -create \ -arch armv7 armv7/lib/$file \ -arch armv7s armv7s/lib/$file \ -arch i386 i386/lib/$file echo "Universal $file created." cd - done cd ../..

봐, 당신은 갓이 구운 모든 FAT libs와를 찾을 수 있습니다. 우리는 이제 이러한 정적 라이브러리를 Xcode 프로젝트에 연결하는 것에 집중합니다.

오류 : 개발자 디렉토리에 개발자가 없습니다. "는 첫째, 우리는 운영자와 파일을 끌어

엑스 코드

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

연결 정적 라이브러리를 입력합니다.

Xcode를 사용하여 새 빈 응용 프로그램을 만듭니다. 제품 이름과 회사 식별자를 지정하십시오. 그런 다음 다음을 클릭하고 프로젝트를 저장하십시오. ffmpeg/universal/lib 아래에 만든 범용 라이브러리 (.a 파일)를 찾습니다. .a 파일을 Project Navigator 창의 Frameworks 폴더로 드래그하십시오. "대상 그룹의 폴더로 항목 복사 (필요한 경우)"를 선택하십시오. 마침을 클릭하십시오.

이제 인클루드 파일을 처리합니다.

ffmpeg/armv7/include에서 포함 파일을 찾으십시오. 해당 폴더의 내용을 Project Navigator 창의 Project Name 폴더로 끌어서 놓으십시오. 다시 말하면 "대상 그룹의 폴더에 항목 복사 (필요한 경우)"를 선택하십시오. 그런 다음 마침을 클릭하십시오.

마지막으로 프로젝트의 헤더 검색 경로를으로 설정해야합니다.

Project Navigator 창에서 프로젝트을 클릭하십시오. 화면의 표준 편집기에서 빌드 설정을 클릭하십시오. "헤더 검색 경로"을 검색하십시오. 프로젝트 경로를 추가하고 재귀 적으로 설정하십시오. 즉 $ (SRCROOT) 빌드 단계를 클릭하십시오. 링크 바이너리 라이브러리에서 libbz2.dyliblibz.dylib을 추가하십시오.

테스트 및 우리는 여기에 깊이 될 수 없습니다 라이브러리

의 작업을 확인합니다. 라이브러리가 작동하는지 확인하기 만하면됩니다. 당신의 AppDelegate.m로 이동하여 추가

>의 #include

"avformat.h"그리고 didFinishLaunchingWithOptions에 기능 추가 :

av_register_all();

을 당신이 생각하는 경우 이 오류가 발생하는 경우

아키텍처 i386에 대해 정의되지 않은 기호 : " _iconv_close "에서 참조 : : libmailcore.a (charconv.o)에 _mail_iconv "_iconv "libmailcore.a에서 _charconv (charconv.o) libmailcore.a (charconv.o)에서 _charconv_buffer 에서 참조,"_iconv_open ",에서 참조 된 : libmailcore.a (charconv.o)의 _charconv libmailcore.a의 charconv_buffer (charconv.O) LD : 아키텍처 i386을 collect2 찾을 수 없습니다 기호 (들) : 신분증 1 종료 상태

후 지금는 FFmpeg을 사용하여 개발에 뛰어들 준비가

프레임 워크 libiconv.dylib 추가 반환 iOS에서.

+2

놀라운. 이것은 작동한다 – onmyway133

+0

나를위한 열쇠는 libbz2.dylib, libz.dylib 및 libiconv.dylib를 추가하는 것이었다. 나는 그들이 왜 필요한지 전혀 모른다. 설명은 훌륭 할 것이다! 감사! – Jona

+0

초급의 실수 : "Build Phases"와 "Link With Binary with Libraries"를 찾으려면 오랜 시간이 걸렸다. 나 같은 사람들은 "Build Settings"와 같은 탭이지만 주어진 "Target"에만 나타나며 on에는 없다. 프로젝트". – Taiko