'AVPlayer'에 해당되는 글 3건

  1. 2011.08.06 AV Player compile (2011년 8월 5일) (9)
  2. 2011.04.24 AV Player compile하기 (2011년 4월 24일) (7)
  3. 2010.12.27 AV Player compile하기 (4)
 AVPlayer와 ffmpeg 모두 열심히 개발하면서 버전이 올라가는 바람에 4월에 올렸던 내용이 어긋나면서 컴파일이 안되고 있었습니다. 주로 arm assembly code 관련된 문제가 많았고, gas-preprocessor.pl 의 매크로 지원 문제라서 받아서 컴파일하는 입장에서는 문제가 생길 때마다 매번 대응하기 곤란했습니다. 매번 git 에 코드가 올라올 때마다 확인할 수도 없는 노릇이어서 이번에는 아예 AVPlayer 소스안에 들어있는 ffmpeg code에 맞추어서 컴파일하도록 했습니다.
 AVPlayer.zip 에 libs/FFmpeg 에 비교적 최근(아마도?) 소스가 들어있으므로 매번 git 에서 clone 할 필요없이 주어진 것으로 컴파일하기로 했습니다. 당장 최신 ffmpeg 의 기능이 필요하지 않다면 상관없을 듯 합니다. 그리고 universal library에 i386의 library는 제외시켰습니다. yasm을 설치하고 이전 스크립트로 컴파일해도 되지만 어차피 AVPlayer에 링크될 때 simulator 용을 만들 수 없으므로 컴파일할 필요는 없습니다. ffmpeg library 자체에 흥미있으신 분들은 이전 글을 참고해서 컴파일해 보시면 될 듯 합니다. 좀 무책임한 선택이지만 매번 버전 차이 때문에 이 글을 업데이트하는 일은 없었으면 하는 바람입니다.


준비물

FFmpeg library만들기
 
  • AVPlayerDist143.zip을 작업할 폴더에 풉니다.
  • __MACOSX 폴더는 지워도 됩니다.
  • https://github.com/yuvi/gas-preprocessor 에서 gas-preprocessor.pl을 가져와 /usr/local/bin으로 복사합니다.
  • AVPlayer 안에 libs 디렉토리로 이동합니다. (cd libs)
  • libs 안에 ffmpeg-armv6, ffmpeg-armv7 디렉토리를 만듭니다. (mkdir ffmpeg-armv6 ffmpeg-armv7)
  • build-armv6 파일을 열어 15번째 줄에서 CONFIGURE_OPTIONS=" ... " 안에 --disable-doc 을 추가합니다.
  • build-armv6 파일의 30번째 줄의 ./configure ... 을 ../FFmpeg/configure ... 으로 수정합니다.
  • build-armv6 파일의 30번째 줄에서 gcc-4.2 와 iPhoneOS4.3.sdk 라고 되어 있는 부분을 자신의 버전과 일치하도록 수정합니다. 어떤 버전인지 자신이 없으면 /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ 과 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ 에 실제로 존재하는지 확인하면 됩니다.
  • build-armv7 파일을 열어 build-armv6 에서 수정한 것처럼 고칩니다.
  • FFmpeg 디렉토리에 있는 config.* 파일들을 삭제합니다. (rm -rf FFmpeg/config.*)
    configure를 실행하면 생성되는 파일들인데 이 파일이 FFmpeg에 있으면 ffmpeg-armv6이나 ffmpeg-armv7에서 configure 가 되지 않습니다.
  • 이제 순서대로 build-armv6, build-armv7 스크립트를 실행합니다. (sh build-armv6; sh build-armv7)
    각각의 target에 대해 configure, make를 순서대로 수행하게 됩니다.
    모든 target의 library가 compile되면 ffmpeg-armv6/dist, ffmpeg-armv7/dist 에 include, lib 디렉토리가 만들어지고 해더와 라이브러리가 생성됩니다.
  • combine-libs 파일을 열어서 5번째 줄의 ARCHS="armv6 armv7 i386" 에서 i386 을 지웁니다.
    그리고 8번째 줄의 BUILD_LIBS=" ... " 에서 마지막에 있는 libavcore.a 를 지웁니다.
    28번째 줄과 31번째 줄의 i386 을 armv7 으로 수정합니다.
  • combine-libs를 실행해서 (sh combine-libs) 모든 target의 library를 합칩니다. ffmpeg-uarch에 최종 헤더와 라이브러리가 만들어집니다.

AVPlayer compile하기
  • Xcode로 AVPlayer project를 엽니다.
  • Project Navigator 의 Targets 에서 AVPlayer,AVPlayerHD의 Build Settings을 선택합니다.
  • Search Paths 항목의 Header Search Paths 란의 내용을 수정합니다. ./libs/ffmpeg-uarch/include 으로 수정하고 Recursive를 체크하면 됩니다.
  • Search Paths 항목의 Library Search Paths 란의 내용을 수정합니다. ., ./libs/ffmpeg-uarch/lib 으로 수정하고 Recursive를 체크하지 않아도 됩니다. . 는 libAVPlayerLib.a 을 링크하기 위해 꼭 필요합니다.
  • Project Navigator 의 AVPlayer/libs/FFMPEG 밑의 libavcodec.a, libavcore.a, libavdevice.a, libavfilter.a, libavformat.a, libavutil.a, libswscale.a의 Utilities 창을 열고 경로를 수정합니다. AVPlayer/libs/ffmpeg-uarch/lib 밑에 있는 library를 지정하면 됩니다.
  • 프로젝트의 라이브러리 설정은 모두 수정되었습니다. 이제 build 버튼만 누르면 됩니다. 단, 주의하실 점은 Simulator로는 build가 되지 않습니다. libAVPlayerLib.a에 AVPlayer의 중요한 코드들이 모두 숨어있는데, 이 라이브러리가 i386으로 compile 되어 있지 않습니다. arm용으로만 compile되어 있기 때문에 Device로만 bulid 가능합니다.
Posted by luuvish
AVPlayer를 컴파일하는 방법을 밑에서 포스팅했었습니다. 몇분이 질문을 하셔서 체크도 해볼 겸 다시 컴파일해 보니 왠 걸. 몇 달이나 되었다고 이것 저것 바뀌었더군요. 답변 몇줄 적는 걸로 해결되지 않을 것 같아 다시 정리해 보았습니다. 변경된 부분 위주로 빨간색으로 체크해 두었습니다.


준비물

FFmpeg library만들기
  • AVPlayer-Objects.zip을 작업할 폴더에 풉니다.
  • __MACOSX 폴더는 지우세요.
  • AVPlayer 안에 FFMPEG 디렉토리로 이동합니다.
  • gas-preprocessor.pl을 /usr/local/bin으로 복사합니다.
  • build-armv7으로 armv7용 library만 만드는 것도 가능하지만 combine-libs를 보면 뭔가 이상하죠? 사실 이 스크립드의 원본은 gabriel의 ffmpeg ios compile script입니다. 제대로 armv6, armv7, i386 library를 만들어서 universal library를 만들어 봅시다. (script가 수정되었으니 여기에 첨부된 것을 받으세요)
  • build-ffmpeg-ios4.3.tar.gz


  • 위의 첨부된 파일을 받아 FFMPEG 디렉토리에 풉니다.
  • gabriel의 소스에서 svn의 revision을 고정했고 target 마다 별도의 svn source를 다운하지 않도록 변경되었고 configure의 option이 수정되었습니다. --enable-postproc 이 제거되었고 --enable-gpl 을 off 시켰습니다. gpl option을 켜면 LGPL license가 아닌 GPL license가 됩니다. 모든 소스를 공개해야 되죠. 마찬가지의 이유로 LGPL의 경우 libx264나 libxvid를 사용할 수 없게 됩니다.
  • svn에서 checkout하는 부분은 git으로 clone하도록 수정되었습니다. 더이상 ffmpeg에서 svn로 source를 공유하지 않습니다. 또한 ffmpeg의 configure option이 변경되었기 때문에 --extra-ldflags="-arch arm7" 뒤에 -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system 이 추가되었습니다. 그리고 document 생성에 문제가 있어 --disable-doc 이 추가되었습니다.
  • 바로 build script를 돌리면 지금(2011-04-24)의 ffmpeg은 버그가 있어서 컴파일되지 않습니다.
    Undefined symbols for architecture armv7:
      "memset", referenced from:
          _ff_ac3_bit_alloc_calc_bap_armv6 in libavcodec.a(ac3dsp_armv6.o)
         (maybe you meant:__memset_chk, _memset )
      "ff_vp8_dct_cat_prob", referenced from:
          .Literal_2 in libavcodec.a(vp8_armv6.o)
         (maybe you meant: __ff_vp8_dct_cat_prob)
    ld: symbol(s) not found for architecture armv7
    이런 메시지가 나오면서 link에서 문제가 발생합니다.
    ffmpeg-source/libavcodec/ac3dsp_armv6.S 의 82 line에서
    b memset 을 b X(memset) 으로
    ffmpeg-source/libavcodec/vp8_armv6.S 의 183 line에서
    movrel r4, ff_vp8_dct_cat_prob 를 movrel r4, X(ff_vp8_dct_cat_prob) 로
    수정하셔야 합니다.
  • 이제 순서대로 build-armv6, build-armv7, build-i386 스크립트를 실행합니다. ffmpeg 사이트에서 소스를 checkout해 온 후 configure, make를 순서대로 수행하게 됩니다.
  • 모든 target의 library가 compile되면 ffmpeg-armv6/dist, ffmpeg-armv7/dist, ffmpeg-i386/dist에 include, lib 디렉토리가 만들어지고 해더와 라이브러리가 생성됩니다.
  • combine-libs를 실행해서 모든 target의 library를 합칩니다. ffmpeg-uarch에 최종 헤더와 라이브러리가 만들어집니다. libavcore.a는 더이상 존재하지 않습니다. combine-libs에서도 제거되어야 합니다.

AVPlayer compile하기
  • Xcode로 AVPlayer project를 엽니다.
  • Targets 에서 AVPlayer,AVPlayerHD의 Build Settings을 선택합니다.
  • Search Paths 항목의 Header Search Paths 란의 내용을 수정합니다. $(SRCROOT)/FFMPEG/ffmpeg-uarch/include, $(SRCROOT)/FFMPEG/ffmpeg-armv7/dist/include 이런식으로 수정하고 Recursive를 체크하면 됩니다.
  • Search Paths 항목의 Library Search Paths 란의 내용을 수정합니다. $(SRCROOT)/FFMPEG/ffmpeg-uarch/lib, $(SRCROOT)/FFMPEG/ffmpeg-armv7/dist/lib 식으로 수정하고 Recursive를 체크하면 됩니다.
  • AVPlayer/LIBS/FFMPEG 밑의 libavcodec.a, libavcore.a, libavdevice.a, libavfilter.a, libavformat.a, libavutil.a, libswscale.a의 Utilities 창을 열고 경로를 수정합니다. AVPlayer/FFMPEG/ffmpeg-uarch/lib 밑에 있는 library를 지정하면 됩니다. libavcore.a는 이제 존재하지 않습니다. library에서 제거하세요.
  • 프로젝트의 라이브러리 설정은 모두 수정되었습니다. 이제 build 버튼만 누르면 됩니다. 단, 주의하실 점은 Simulator로는 build가 되지 않습니다. libAVPlayerLib.a에 AVPlayer의 중요한 코드들이 모두 숨어있는데, 이 라이브러리가 i386으로 compile 되어 있지 않습니다. arm용으로만 compile되어 있기 때문에 Device로만 bulid 가능합니다.
Posted by luuvish
요즘 iPhone/iPad 에서 무인코딩으로 동영상을 볼 수 있는 앱으로 잘 나가는 AV Player를 iOS SDK로 compile해 볼 수 있습니다. FFmpeg license 문제로 컴파일할 수 있는 코드가 공개되어 있습니다. 물론 중요한 부분은 library로 묶여있지만 앱의 전체적인 모습과 GUI 구성, FFmpeg library를 어떻게 컴파일해서 합쳤는지 좋은 참고자료가 될 듯 합니다.


준비물

FFmpeg library만들기
  • AVPlayer-XCode.zip을 작업할 폴더에 풉니다.
  • __MACOSX 폴더는 지우세요.
  • AVPlayer 안에 FFMPEG 디렉토리로 이동합니다.
  • gas-preprocessor.pl을 /usr/local/bin으로 복사합니다.
  • build-armv7으로 armv7용 library만 만드는 것도 가능하지만 combine-libs를 보면 뭔가 이상하죠? 사실 이 스크립드의 원본은 gabriel의 ffmpeg ios compile script입니다. 제대로 armv6, armv7, i386 library를 만들어서 universal library를 만들어 봅시다.
  • build-ffmpeg-ios.tar.gz

  • 위의 첨부된 파일을 받아 FFMPEG 디렉토리에 풉니다.
  • gabriel의 소스에서 svn의 revision을 고정했고 target 마다 별도의 svn source를 다운하지 않도록 변경되었고 configure의 option이 수정되었습니다. --enable-postproc 이 제거되었고 --enable-gpl 을 off 시켰습니다. gpl option을 켜면 LGPL license가 아닌 GPL license가 됩니다. 모든 소스를 공개해야 되죠. 마찬가지의 이유로 LGPL의 경우 libx264나 libxvid를 사용할 수 없게 됩니다.
  • 이제 순서대로 build-armv6, build-armv7, build-i386 스크립트를 실행합니다. ffmpeg 사이트에서 소스를 checkout해 온 후 configure, make를 순서대로 수행하게 됩니다.
  • 모든 target의 library가 compile되면 ffmpeg-armv6/dist, ffmpeg-armv7/dist, ffmpeg-i386/dist에 include, lib 디렉토리가 만들어지고 해더와 라이브러리가 생성됩니다.
  • combine-libs를 실행해서 모든 target의 library를 합칩니다. ffmpeg-uarch에 최종 헤더와 라이브러리가 만들어집니다.

AVPlayer compile하기
  • Xcode로 AVPlayer project를 엽니다.
  • Targets 에서 AVPlayer/AVPlayerHD의 Info 창을 엽니다.
  • Search Paths 항목의 Header Search Paths 란의 내용을 수정합니다. $(SRCROOT)/FFMPEG/ffmpeg-uarch/include, $(SRCROOT)/FFMPEG/ffmpeg-armv7/dist/include 이런식으로 수정하고 Recursive를 체크하면 됩니다.
  • Search Paths 항목의 Library Search Paths 란의 내용을 수정합니다. $(SRCROOT)/FFMPEG/ffmpeg-uarch/lib, $(SRCROOT)/FFMPEG/ffmpeg-armv7/dist/lib 식으로 수정하고 Recursive를 체크하면 됩니다.
  • AVPlayer/LIBS/FFMPEG 밑의 libavcodec.a, libavcore.a, libavdevice.a, libavfilter.a, libavformat.a, libavutil.a, libswscale.a의 Info 창을 열고 경로를 수정합니다. AVPlayer/FFMPEG/ffmpeg-uarch/lib 밑에 있는 library를 지정하면 됩니다.
  • 프로젝트의 라이브러리 설정은 모두 수정되었습니다. 이제 build 버튼만 누르면 됩니다. 단, 주의하실 점은 Simulator로는 build가 되지 않습니다. libAVPlayerLib.a에 AVPlayer의 중요한 코드들이 모두 숨어있는데, 이 라이브러리가 i386으로 compile 되어 있지 않습니다. arm용으로만 compile되어 있기 때문에 Device로만 bulid 가능합니다.
Posted by luuvish