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

댓글을 달아 주세요

  1. ipad2 2011.08.09 03:44  댓글주소  수정/삭제  댓글쓰기

    친절한 해설과 정보 감사 드립니다
    덕분에 인코딩과 설치까지 되긴 되었습니다
    그런데 프로그램에 영상이나 음악을 저장한후 Media Explorer 을 구동하기만 하면 다운되어 버리네요
    .zip 화일을 복사해서 넣으면 정상적으로 작동을 하는데 영상,음악 파일만 넣으면 다운되어 버리네요
    소스공개시 일부러 막아 놓은 것인가요
    왜 그런지 이유가 궁금하네요
    모든 기능이 잘 작동되시는지 궁금하네요

  2. 허당 2011.09.14 17:21  댓글주소  수정/삭제  댓글쓰기

    정보 감사합니다~ 삽질 하다가 이제 제대로 동작이 되네요 ㅎㅎ
    yasm 설치 안한 것과.. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ 경로가..
    저는 iOS 별로 따로 폴더를 두고 설치를 하여 그 부분에서 잘못됐었네요

  3. 박주형 2011.11.10 19:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 탈옥폰 유저입니다.
    탈옥을 하면 cydia란 어플을 통해서 온갖 바이너리 파일들을 받을 수 잇는데 최근에 ffmpeg을 받앗읍니다. 근데 2009년 컴파일 되엇고 ARMv7용으로 안나왓더라구요. 개발자한테 메일보내보앗더니 더이상 맥이 없다네요.

    그래서, avplayer안으로만 심는거 말구 초보자들도 쉽게 따라할수 잇는 ffmpeg armv7컴파일 강좌를 부탁할려구요......
    아니면 바이너리를 컴파일하셔서 제 메일(arter97@naver.com)으로 꼭 보내주세요 ㅠㅠ 꼭 필요해서요 ㅠㅠ
    감사합니다 ㅎㅎ

  4. ffmpeg컴파일 2011.11.21 10:59  댓글주소  수정/삭제  댓글쓰기

    •이제 순서대로 build-armv6, build-armv7 스크립트를 실행합니다. (sh build-armv6; sh build-armv7)
    각각의 target에 대해 configure, make를 순서대로 수행하게 됩니다.
    모든 target의 library가 compile되면 ffmpeg-armv6/dist, ffmpeg-armv7/dist 에 include, lib 디렉토리가 만들어지고 해더와 라이브러리가 생성됩니다.

    이전 작업까지는 잘 따라하였습니다

    근데 이작업을 하려고 하는데 에러가 나는데요 어떻게 해야하나요?

    warrning 2개
    Error handling externals definition fpo 'ffmpeg-armv6/libswscale'
    URL 'svn://svm.ffmpeg.org/mplayer.trynk.libswscale'at evision 34354 doesn,t exist

    가 뜨네요

    그리고
    /Deveplper/Platforms/iPhonesOS.platrform.Develpoer/usr/bin/gcc-4.2 is unable to creat an executalbe file. C comipler test failed

    라고 떠서 fmpeg-armv6/dist, ffmpeg-armv7/dist 에 include, lib 디렉토리가 만들어지고 해더와 라이브러리가 생성되지 않습니다.

    어떻게 처리를 해야 할까요? ㅠㅠ 부탁드립니다

  5. Eugene 2012.08.31 14:52  댓글주소  수정/삭제  댓글쓰기

    상세한 설명 덕분에 컴파일 성공하고 갑니다~

    감사합니다!!

  6. ㅠㅠ 2013.03.11 08:31  댓글주소  수정/삭제  댓글쓰기

    안녕하세요..

    아이폰 공부하는 유저인데...

    현재 AVPlayer가 좀 바뀌어서 그 이후로 소스공개가 안되는것같더라구요...

    혹시 받아놓으신 소스 공유가 가능할런지요? ㅠㅠㅋ

    huge123@naver.com 으로 공유 부탁드리겠습니다.

    컴파일해보고 싶은데 소스가 없네요 ㅠㅋ

    • BlogIcon luuvish 2013.03.12 13:12 신고  댓글주소  수정/삭제

      eplayworks.com의 support/avplayer/license 페이지에서 다운받으실 수 있습니다.

      http://eplayworks.com/section/support/licenseAP.php?lang=en
      위 페이지의 AVPlayer-XCode download 를 클릭하면 됩니다.

      http://avstreamer.eplayworks.com/download/download_avplayer.php

  7. 한스 2013.05.09 17:58  댓글주소  수정/삭제  댓글쓰기

    강좌 잘 참고 하여 컴파일중에 있습니다
    source:AVPlayer164.zip과
    script:build-ffmpeg-ios4.3.tar.gz을 이용하여 컴파일하고 있습니다

    강좌를 참고 하여 script를 수정후,
    armv6 과 armv7을 컴파일 했습니다만
    armv6는
    configuration 하면서, gcc is unable to create an executeable file 에러와,

    armv7은 컴파일을 하다가,
    af_volume.o error:invalid operand in inline asm: 'adds $1, ${2:R}, ~~~
    에서 에러가 발행합니다

    두 스크립트를 확인해봤으나 armv6,7 부분만 다를뿐, 모두 같은데 현상이 달라
    고전중에 있습니다

    조언을 좀 부탁드리겠습니다

  8. 안녕하세요.. 2013.09.02 16:22  댓글주소  수정/삭제  댓글쓰기

    안녕하세요..
    http://avstreamer.eplayworks.com/download/download_avplayer.php
    이 링크로 소스를 받아보니 이제 소스부분이 거의 없군요..
    어떻게 ffmpeg는 빌드 하였는데.. AppDelegate가 없어서..
    오류가 나는군요..
    Undefined symbols for architecture i386:
    "_OBJC_CLASS_$_AppDelegate", referenced from:
    objc-class-ref in main.o
    "_OBJC_CLASS_$_FolderUtils", referenced from:
    objc-class-ref in list.o

    실례되지 않는다면 이전 버전의 소스를 부탁드려도 될까요?
    ftfuture@naver.com
    좋은 글 감사합니다.

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

댓글을 달아 주세요

  1. BlogIcon 유령c 2011.05.20 09:53  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 FFMpeg 컴파일에 성공했습니다!!
    저는 ysam이 설치 되지 않았어서 살짝 고생했었는데 포스팅에 추가해주셔도 좋을것 같습니다.

    http://www.tortall.net/projects/yasm/wiki/Download

    좋은하루 되세요 ^^

  2. 캐이캐이 2011.07.30 17:27  댓글주소  수정/삭제  댓글쓰기

    ERROR: .endm without .macro at /usr/local/bin/gas-preprocessor.pl line 80, <ASMFILE> line 36.
    make: *** [libavcodec/arm/ac3dsp_arm.o] Error 29

    컴파일 하는 중에 이런 에러가 뜨면 어떻게 해야하나요?

  3. ipad 2011.08.05 17:32  댓글주소  수정/삭제  댓글쓰기

    build-ffmpeg-ios4.3.tar.gz 화일중 build-armv6, build-armv7, 은 정상적으로 됩니다만 build-i386 을 실행시키면
    에러가 납니다 이유가 무엇인지 조언 부탁드립니다.


    ../$SOURCE_DIR/configure --cc="$IOSSDK_GCC" --as="$SCRIPT_DIR/gas-preprocessor.pl $IOSSDK_GCC" --sysroot="$IOSSDKDIR" --extra-cflags="-mdynamic-no-pic" --prefix="dist" $CONFIGURE_OPTIONS
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin10-gcc-4.2.1 is unable to create an executable file.
    If /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin10-gcc-4.2.1 is a cross-compiler, use the --enable-cross-compile option.
    Only do this if you know what cross compiling means.
    C compiler test failed.

    If you think configure made a mistake, make sure you are using the latest
    version from Git. If the latest version fails, report the problem to the
    ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
    Rerun configure with logging enabled (do not use --disable-logging), and
    include the log this produces with your report.

    • BlogIcon luuvish 2011.08.05 23:15 신고  댓글주소  수정/삭제

      저의 경우 SDK 버전이 맞지 않을 때나 $CONFIGURE_OPTIONS이 ffmpeg에서 처리 못하는 경우에 위의 메시지를 본 적이 있습니다. armv6이나 armv7이 컴파일된 것으로 보아 gcc나 SDK의 버전 문제일 것 같네요.

    • ipad 2011.08.09 00:33  댓글주소  수정/삭제

      귀한 정보와 조언에 감사를 드립니다
      죄송하지만 이전 블러그에서 빌드하신 이전 AVPlayer-Objects.zip 버전파일이 있으시면 좀 보내주실수 있으신지요
      2011/04/24 이전 버전이나 2010/12/27 이전 버전이면 더 좋을것 같습니다
      iphonedalin@gmail.com 입니다
      염치없이 부탁드립니다

  4. 아이폰 2011.08.05 17:33  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사를 드립니다
    xcode 4.1 에서 설치하는데 계속 에러가 납니다
    죄송하지만 xcode 4.1에 설치하는 법 좀 알려주세요
    AVPlayer-Objects.zip 도 업그레이드가 된것 같네요
    부탁드려요

  5. BlogIcon parkboo 2011.08.19 15:36  댓글주소  수정/삭제  댓글쓰기

    저는 아래처럼 빌드했습니다.

    1. http://www.eplayworks.com/p/lgplinformation.html 에서 소스 받기
    2. gas-preprocessor.pl 설치
    3. yasm 설치 (Mac Port로 하면 쉬움)
    4. libs/FFMpeg 에서 아래 실행.
    ./configure --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 --as="$SCRIPT_DIR/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2" --prefix="dist" --enable-cross-compile --target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags="-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk" --extra-ldflags="-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk" --enable-pic --disable-asm
    (disable-asm 옵션을 추가 안하면 빌드시 에러 발생)
    5. make && make install
    6. xcode에서 libz, libbz 추가


XBMC가 AppleTV2와 iPhone/iPad로 porting 되었습니다.

오픈소스 프로젝트이므로 자유롭게 다운받아 Xcode로 컴파일해서 돌려 볼 수 있습니다.
다만 몇가지 제약으로 인해 탈옥된 디바이스에만 올릴 수 있습니다.

탈옥을 했다는 전제하에 아래의 내용을 따라가시면 됩니다.
탈옥한 디바이스에는 AppSync가 설치되어 있어야 합니다.



CodeSign을 속이기 위한 설정

(http://www.alexwhittemore.com/?p=398 참조)
$ cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk
$ sudo cp SDKSettings.plist SDKSettings.plist.orig
$ sudo vi SDKSettings.plist
<key>CODE_SIGNING_REQUIRED</key> 을 찾아 그 아래줄의
<string>YES</string> 을 <string>NO</string> 로 수정
<key>ENTITLEMENTS_REQUIRED</key> 을 찾아 그 아래줄의
<string>YES</string> 을 <string>NO</string> 로 수정

$ cd /Developer/Platforms/iPhoneOS.platform/
$ sudo cp Info.plist Info.plist.orig
$ sudo vi Info.plist
<key>CODE_SIGN_CONTEXT_CLASS</key> 을 찾아 그 아래줄의
<string>XCiPhoneOSCodeSignContext</string> 을 <string>XCCodeSignContext</string> 로 수정
CODE_SIGN_CONTEXT_CLASS 가 한번 더 나오므로 위와 같이 한번 더 수정

$ cd ~/Desktop
$ vi script

아래의 내용을 카피해서 script file을 만듭니다.
#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
printf "\xc3\x26\x00\x00" >> working
/bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
/bin/mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

$ chmod 777 script
$ ./script

$ mkdir /Developer/iphoneentitlements401
$ cd /Developer/iphoneentitlements401
$ curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
$ mv gen_entitlements.txt gen_entitlements.py
$ chmod 777 gen_entitlements.py



키체인 만들기

$ open /Applications/Utilities/Keychain\ Access.app/

키체인 프로그램이 열리면
Keychain Access (키체인 접근) 메뉴의 Certificate Assistant (인증 지원) 에서
Create a Certificate (인증서 생성) 를 선택

'Name (이름)' : 'iPhone Developer'
'Identity Type (신원 유형)' : 'Self Signed Root (자체 서명 루트)'
'Certificate Type (인증서 유형)' : 'Code Signing (코드 서명)'

위와 같이 iPhone Developer 라는 이름의 코드 서명을 만듭니다.
인증서가 만들어지면 정보입수에서 신뢰를 항상 신뢰로 설정합니다.



XBMC 컴파일하기

XBMC의 iOS branches source를 받아옵니다.
$ git clone https://github.com/xbmc/atv2.git xbmc

일부 툴들이 설치되어 있지 않을 수 있습니다. fink나 port로 설치해야 합니다.
$ sudo fink install autoconf help2man
$ cd xbmc
$ sudo mkdir -p /usr/local/bin
$ sudo cp tools/osx/ios-depends/gas-preprocessor/gas-preprocessor.pl /usr/local/bin/

컴파일을 시작합니다. 상당한 시간이 걸립니다.
$ make -C tools/osx/ios-depends
$ make -C tools/osx/ios-depends/xbmc
$ make xcode_depends

두가지 타겟중 필요한 것을 생성합니다.
$ xcodebuild -project XBMC-IOS.xcodeproj -target XBMC -configuration Release build ONLY_ACTIVE_ARCH=YES ARCHS=armv7 VALID_ARCHS=armv7 IPHONEOS_DEPLOYMENT_TARGET=4.1 SDKROOT=iphoneos4.2
$ xcodebuild -project XBMC-ATV2.xcodeproj -target XBMC -configuration Release build ONLY_ACTIVE_ARCH=YES ARCHS=armv7 VALID_ARCHS=armv7 IPHONEOS_DEPLOYMENT_TARGET=4.1 SDKROOT=iphoneos4.2
Posted by luuvish
TAG ffmpeg, ios, xbmc

댓글을 달아 주세요

VLC는 한번에 제대로 컴파일된 적이 없네요. iOS 버전은 최근에 작업중인지 그나마 덜 고생하고 컴파일 성공했습니다. 프로젝트들이 얽혀있어 분석이 쉽진 않겠네요.

$ tar jxvf VLC-1.1.0-iOS.tar.bz2
$ ln -s VLC-1.1.0-iOS vlc
$ cd vlc/extras/package/ios
  • build_for_iOS.sh 을 열어서 SDK 버전을 수정합니다. 현재 최신버전은 4.2.sdk입니다. IOS_SDK_ROOT="${DEVROOT}/SDKs/iPhone${PLATFORM}3.2.sdk"
  • build_for_iOS.sh 를 실행해서 컴파일해 보면 중간에 에러가 나면서 멈춥니다. patch file의 버전문제인데 ../../contrib/src-arm-apple-darwin10-ios/src/Patches/live-inet_ntop.patch의 161-185 라인을 참고해서 ../../contrib/src-arm-apple-darwin10-ios/src/live/liveMedia/RTSPServer.cpp을 직접 수정하면 됩니다. our_inet_ntoa()의 두번째 인자로 buf를 추가하기만 하면됩니다.
  • 이제 build_for_iOS.sh를 실행해서 컴파일합니다. 완료되면 vlc/install-ios-OS에 해더와 라이브러리가 생성됩니다.
  • MobileVLCKit의 static plugins를 build합니다.
$ cd vlc/projects/macosx/framework
$ xcodebuild -project MobileVLCKit.xcodeproj -target "Aggregate static plugins" -configuration "Release"
  • MobileVLCKit의 MobileVLCKit의 SDK 버전을 최신버전으로 수정하고 build합니다.
$ open MobileVLCKit.xcodeproj
fix Targets/MobileVLCKit - Get Info / Build
Configuration : All Configurations
Architectures / Base SDK : Latest iOS
$ xcodebuild -project MobileVLCKit.xcodeproj -target "MobileVLCKit" -configuration "Release"



MediaLibraryKit compile하기
  • 작업디렉토리(VLC-1.1.0-iOS와 같은 위치)에 MediaLibraryKit 디렉토리를 만들고 압축을 풉니다.
$ mkdir MediaLibraryKit && cd MediaLibraryKit
$ unzip MediaLibraryKit-1.1.0.zip
  • External 디렉토리로 들어가 MobileVLCKit의 링크를 만듭니다.
$ ln -s ../../vlc/projects/macosx/framework/build/Release-iphoneos MobileVLCKit
  • MediaLibraryKit의 SDK 버전을 최신버전으로 수정하고 build합니다.
$ open MobileMediaLibraryKit.xcodeproj
fix Targets/MobileMediaLibraryKit - Get Info / Build
Configuration : All Configurations
Architectures / Base SDK : Latest iOS
$ xcodebuild -project MobileMediaLibraryKit.xcodeproj -configuration "Release"



MobileVLC compile하기
  • 작업디렉토리(VLC-1.1.0-iOS와 같은 위치)에서 MobileVLC의 압축을 풉니다.
$ tar zxvf MobileVLC-1.1.0.tar.gz
$ cd MobileVLC
  • External 밑에 있는 MediaLibraryKit와 MobileVLCKit의 링크가 제대로 되어있는지 확인합니다.
  • MobileVLC의 SDK 버전을 최신버전으로 수정하고 build합니다.
$ open MobileVLC.xcodeproj
fix Targets/MobileVLC - Get Info / Build
Configuration : All Configurations
Architectures / Architectures : Standard (armv6 armv7)
Architectures / Base SDK : Latest iOS
build with Device-Release configurations

Posted by luuvish
TAG ffmpeg, ios, vlc

댓글을 달아 주세요

  1. Depp 2011.03.18 11:55  댓글주소  수정/삭제  댓글쓰기

    막막했었는데 이 포스팅 덕분에 쉽게 끝낼수 있었습니다. 감사합니다.

  2. JOJO 2011.08.08 08:57  댓글주소  수정/삭제  댓글쓰기

    FFmpeg를 공부하면서 vlc를 이용하여 개발해보려고 몇일째 삽질하고 있는 중입니다.

    --> 이부분에서 막혔는데요.
    build_for_iOS.sh 를 실행해서 컴파일해 보면 중간에 에러가 나면서 멈춥니다. patch file의 버전문제인데 ../../contrib/src-arm-apple-darwin10-ios/src/Patches/live-inet_ntop.patch의 161-185 라인을 참고해서 ../../contrib/src-arm-apple-darwin10-ios/src/live/liveMedia/RTSPServer.cpp을 직접 수정하면 됩니다. our_inet_ntoa()의 두번째 인자로 buf를 추가하기만 하면됩니다.

    --> 에러 발생으로 더이상 진행하기가 어렵네요. 혹시 해결방법이 있을까요?
    ../groupsock/include/GroupsockHelper.hh: In member function ‘char* RTSPServer::rtspURLPrefix(int) const’:
    ../groupsock/include/GroupsockHelper.hh:119: error: too many arguments to function ‘char* our_inet_ntoa(in_addr)’
    RTSPServer.cpp:119: error: at this point in file
    ../groupsock/include/GroupsockHelper.hh:119: error: too many arguments to function ‘char* our_inet_ntoa(in_addr)’
    RTSPServer.cpp:122: error: at this point in file
    make[3]: *** [RTSPServer.o] Error 1
    make[2]: *** [all] Error 2
    make[1]: *** [.live] Error 2
    make: *** [using-src] Error 2

    답변 부탁드립니다.

  3. JOJO 2011.08.08 09:14  댓글주소  수정/삭제  댓글쓰기

    RTSPServer.cpp 수정부분

    -->변경전
    portNumBits portNumHostOrder = ntohs(fRTSPServerPort.num());
    if (portNumHostOrder == 554 /* the default port number */) {
    sprintf(urlBuffer, "rtsp://%s/", our_inet_ntoa(ourAddress.sin_addr));
    } else {
    sprintf(urlBuffer, "rtsp://%s:%hu/",
    our_inet_ntoa(ourAddress.sin_addr), portNumHostOrder);
    }

    #ifdef DEBUG
    envir() << "accept()ed connection from " << our_inet_ntoa(clientAddr.sin_addr) << "\n";


    --> 변경후
    portNumBits portNumHostOrder = ntohs(fRTSPServerPort.num());
    char buf[16];
    if (portNumHostOrder == 554 /* the default port number */) {
    sprintf(urlBuffer, "rtsp://%s/", our_inet_ntoa(ourAddress.sin_addr, buf));
    } else {
    sprintf(urlBuffer, "rtsp://%s:%hu/",
    our_inet_ntoa(ourAddress.sin_addr, buf), portNumHostOrder);
    }


    #ifdef DEBUG
    char buf[16];
    envir() << "accept()ed connection from " << our_inet_ntoa(clientAddr.sin_addr, buf) << "\n";

  4. park 2011.08.08 11:24  댓글주소  수정/삭제  댓글쓰기

    해당 부분을 수정 하였는데요...아래와 같이 에러가 발생 합니다.


    ../groupsock/include/GroupsockHelper.hh:119: error: too many arguments to function ‘char* our_inet_ntoa(in_addr)’
    RTSPServer.cpp:119: error: at this point in file
    ../groupsock/include/GroupsockHelper.hh:119: error: too many arguments to function ‘char* our_inet_ntoa(in_addr)’
    RTSPServer.cpp:122: error: at this point in file
    make[3]: *** [RTSPServer.o] Error 1
    make[2]: *** [all] Error 2
    make[1]: *** [.live] Error 2
    make: *** [using-src] Error 2




    our_inet_ntoa 에 인자를 하나밖에 주지 못한다고 나오는데요...어찌 해야 하는지요?

    답변 부탁드릴께요

    • BlogIcon luuvish 2011.08.08 18:16 신고  댓글주소  수정/삭제

      our_inet_ntoa()의 경우 char* 타입의 인자 하나만 받게 되어 있네요. buf를 두번째 인자로 넣지 말고 원래의 코드로 컴파일해보세요.

  5. JOJO 2011.08.08 21:10  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. vlc관련하여 열공중인 학생입니다.
    포스팅하신 내용대로 주욱 따라 내려가는데
    한참 진행하다 에러가 발생하는데 어디서
    어떻게 조치해야 될지 잘 몰라서 질문을 드리고자 합니다.

    VLC compile하기 에서 ./build_for_iOS.sh 한참하는중에
    하기와 같은 메세지를 남기면서 중지가 되네요.
    libfaad library는 있는것 같은데 찾지를 못하는건지
    잘 모르겠습니다.

    답변 기다리겠습니다.

    checking for ffmpeg/swscale.h... no
    checking faad.h usability... yes
    checking faad.h presence... yes
    checking for faad.h... yes
    checking for faacDecOpen in -lfaad... no
    checking for NeAACDecOpen in -lfaad... no
    configure: error: Cannot find libfaad library...

  6. 작업남317 2011.08.19 10:25  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. vlc이용해서 개발하려고 며칠째 계속 컴파일하고있는 중입니다.
    포스팅하신 내용대로 진행하고 마지막에

    --> MobileVLC의 SDK 버전을 최신버전으로 수정하고 build합니다.
    $ open MobileVLC.xcodeproj
    Architectures / Base SDK : Latest iOS
    build with Device-Release configurations

    --> 이부분을 xcode상에서 SDK설정(4.3)해주고 빌드했더니 에러가나는데 혹시 해결방법이 있을까요?

    Build MobileVLC of project MobileVLC with configuration Debug

    Ld build/Debug-iphonesimulator/VLC.app/VLC normal i386
    cd /Users/User/Documents/VLC_SOURCE/test3/MobileVLC
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/Debug-iphonesimulator -L/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MobileVLCKit -L/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MediaLibraryKit -F/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/Debug-iphonesimulator -filelist /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/MobileVLC.build/Debug-iphonesimulator/MobileVLC.build/Objects-normal/i386/VLC.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -lMobileVLCKit -framework Foundation -framework UIKit -framework CoreGraphics -framework OpenGLES -framework AudioToolbox -framework QuartzCore -liconv -lz -lsqlite3 -lstdc++.6 -lbz2 -lxml2 -framework CoreData -lMobileMediaLibraryKit -framework CoreText -framework MediaPlayer -o /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/Debug-iphonesimulator/VLC.app/VLC

    ld: warning: in /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MobileVLCKit/libMobileVLCKit.a, file was built for unsupported file format which is not the architecture being linked (i386)
    ld: warning: in /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MediaLibraryKit/libMobileMediaLibraryKit.a, missing required architecture i386 in file
    Undefined symbols:
    "_OBJC_CLASS_$_VLCMediaPlayer", referenced from:
    objc-class-ref-to-VLCMediaPlayer in MVLCMovieViewController.o
    "_OBJC_CLASS_$_MLMediaLibrary", referenced from:
    objc-class-ref-to-MLMediaLibrary in MobileVLCAppDelegate.o
    objc-class-ref-to-MLMediaLibrary in MVLCMovieListViewController.o
    "_OBJC_CLASS_$_VLCMedia", referenced from:
    objc-class-ref-to-VLCMedia in MVLCMovieViewController.o
    "_OBJC_CLASS_$_MLFile", referenced from:
    objc-class-ref-to-MLFile in MVLCMovieListViewController.o
    l_OBJC_$_CATEGORY_MLFile_$_HD in MLFile+HD.o
    objc-class-ref-to-MLFile in MLFile+HD.o
    "_OBJC_CLASS_$_VLCTime", referenced from:
    objc-class-ref-to-VLCTime in MVLCMovieGridViewCell.o
    objc-class-ref-to-VLCTime in MVLCMovieTableViewCell.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status

  7. 작업남317 2011.08.19 20:12  댓글주소  수정/삭제  댓글쓰기

    네~ 말씀해주신데로 device-release로 해보겠습니다, 감사합니다.

  8. 작업남317 2011.08.24 16:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~답변 감사했습니다.
    근데 또 에러가 나오네요^^;

    --> luuvish 님께서 답글 달아주신데로 device-release용으로 컴파일하기위해
    개발자등록 해서 디바이스연결하고 Xcode에서 빌드&런 클릭했는데
    이번에는 에러가 이렇게 나오는데 혹시 무엇을 고쳐보면 될까요~ 뭐든지 해보겠습니다~^^


    Build MobileVLC of project MobileVLC with configuration Release

    Ld build/MobileVLC.build/Release-iphoneos/MobileVLC.build/Objects-normal/armv6/VLC normal armv6
    cd /Users/User/Documents/VLC_SOURCE/test3/MobileVLC
    setenv IPHONEOS_DEPLOYMENT_TARGET 4.3
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/Release-iphoneos -L/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MobileVLCKit -L/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MediaLibraryKit -F/Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/Release-iphoneos -filelist /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/MobileVLC.build/Release-iphoneos/MobileVLC.build/Objects-normal/armv6/VLC.LinkFileList -dead_strip -miphoneos-version-min=4.3 -lMobileVLCKit -framework Foundation -framework UIKit -framework CoreGraphics -framework OpenGLES -framework AudioToolbox -framework QuartzCore -liconv -lz -lsqlite3 -lstdc++.6 -lbz2 -lxml2 -framework CoreData -lMobileMediaLibraryKit -framework CoreText -framework MediaPlayer -o /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/build/MobileVLC.build/Release-iphoneos/MobileVLC.build/Objects-normal/armv6/VLC

    ld: warning: ignoring file /Users/User/Documents/VLC_SOURCE/test3/MobileVLC/External/MobileVLCKit/libMobileVLCKit.a, file was built for archive which is not the architecture being linked (armv6)
    Undefined symbols for architecture armv6:
    "_VLCMediaTracksInformationAudioRate", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_VLCMediaTracksInformationTypeAudio", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_OBJC_CLASS_$_VLCMediaThumbnailer", referenced from:
    objc-class-ref in libMobileMediaLibraryKit.a(MLThumbnailerQueue.o)
    "_VLCMediaTracksInformationType", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_VLCMediaTracksInformationTypeVideo", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_VLCMediaTracksInformationVideoHeight", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_VLCMediaTracksInformationAudioChannelsNumber", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_OBJC_CLASS_$_VLCMediaPlayer", referenced from:
    objc-class-ref in MVLCMovieViewController.o
    "_OBJC_CLASS_$_VLCMedia", referenced from:
    objc-class-ref in MVLCMovieViewController.o
    objc-class-ref in libMobileMediaLibraryKit.a(MLThumbnailerQueue.o)
    objc-class-ref in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    "_OBJC_CLASS_$_VLCTime", referenced from:
    objc-class-ref in MVLCMovieGridViewCell.o
    objc-class-ref in MVLCMovieTableViewCell.o
    "_VLCMediaTracksInformationVideoWidth", referenced from:
    -[MLParsingOperation mediaDidFinishParsing:] in libMobileMediaLibraryKit.a(MLFileParserQueue.o)
    ld: symbol(s) not found for architecture armv6
    collect2: ld returned 1 exit status

  9. 작업남317 2011.08.24 17:20  댓글주소  수정/삭제  댓글쓰기

    *과정 중간에 다른 에러가 있었는데 혹여나 이것 때문일 수도 있어서 같이 덧붙여봅니다.

    -->(build_for_iOS.sh SDK버전을 수정한 후 실행 중간에 에러발생함)

    ........생략
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 is unable to create an executable file.
    C compiler test failed.

    If you think configure made a mistake, make sure you are using the latest
    version from SVN. If the latest version fails, report the problem to the
    ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
    Include the log file "config.log" produced by configure as this will help
    solving the problem.
    make[1]: *** [.ffmpeg] Error 1
    make: *** [using-src] Error 2

    --> http://forum.videolan.org/viewtopic.php?f=12&t=91155 의 내용을 참고하여 vlc/extras/contrib/bootstrap 파일을 수정하여 넘어갔습니다.

  10. 작업남317 2011.08.24 17:27  댓글주소  수정/삭제  댓글쓰기

    --> 몇 분 정도 계속 진행하다가 다시 에러 발생합니다.

    "/usr/bin/curl" -L -O http://live555.com/liveMedia/public/live555-latest.tar.gz
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 489k 100 489k 0 0 48602 0 0:00:10 0:00:10 --:--:-- 61831
    rm -rf live || true
    gunzip -c live555-latest.tar.gz | tar xf - --exclude='[*?:<>\|]'
    mv live555-latest live || true
    mv: rename live555-latest to live/live555-latest: No such file or directory
    touch live
    patch -p0 < Patches/live-uselocale.patch
    patching file live/liveMedia/include/Locale.hh
    patching file live/liveMedia/Locale.cpp
    patching file live/liveMedia/RTSPClient.cpp
    Hunk #1 succeeded at 469 (offset -550 lines).
    Hunk #2 succeeded at 483 (offset -550 lines).
    patching file live/liveMedia/RTSPClient.cpp
    Hunk #1 succeeded at 921 (offset -14 lines).
    patching file live/liveMedia/RTSPCommon.cpp
    Hunk #1 FAILED at 136.
    1 out of 1 hunk FAILED -- saving rejects to file live/liveMedia/RTSPCommon.cpp.rej
    make[1]: *** [live] Error 1
    make: *** [using-src] Error 2

    --> 수정하지 않고 다시 build_for_iOS.sh 를 실행시켜주어 이상이 없어 그대로 진행하였습니다.

  11. 작업남317 2011.08.24 17:49  댓글주소  수정/삭제  댓글쓰기

    --> 약 10여분 이상 지나면 아래와 같이 출력이 됩니다.

    Making install in doc
    make[3]: Nothing to be done for `install-exec-am'.
    test -z "/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/share/doc/vlc" || /Users/User/Documents/VLC_SOURCE/test7/vlc/autotools/install-sh -c -d "/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/share/doc/vlc"
    /usr/bin/install -c -m 644 /Users/User/Documents/VLC_SOURCE/test7/vlc/doc/bugreport-howto.txt /Users/User/Documents/VLC_SOURCE/test7/vlc/doc/fortunes.txt /Users/User/Documents/VLC_SOURCE/test7/vlc/doc/intf-vcd.txt '/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/share/doc/vlc'
    test -z "/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/share/man/man1" || /Users/User/Documents/VLC_SOURCE/test7/vlc/autotools/install-sh -c -d "/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/share/man/man1"
    /usr/bin/install -c -m 644 /Users/User/Documents/VLC_SOURCE/test7/vlc/doc/vlc.1 /Users/User/Documents/VLC_SOURCE/test7/vlc/doc/vlc-wrapper.1 /Users/User/Documents/VLC_SOURCE/test7/vlc/doc/vlc-config.1 '/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/share/man/man1'
    Making install in test
    make[3]: Nothing to be done for `install-exec-am'.
    make[3]: Nothing to be done for `install-data-am'.
    test -z "/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/bin" || /Users/User/Documents/VLC_SOURCE/test7/vlc/autotools/install-sh -c -d "/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/bin"
    /usr/bin/install -c cvlc rvlc '/Users/User/Documents/VLC_SOURCE/test7/vlc/install-ios-OS/bin'
    make[3]: Nothing to be done for `install-data-am'.
    ~/Documents/VLC_SOURCE/test7/vlc/extras/package/ios


    --> 이상이 있는건지 없는건지는 모르겠지만 일단 넘어갔습니다.

  12. 작업남317 2011.08.24 18:04  댓글주소  수정/삭제  댓글쓰기

    --> MobileVLCKit의 MobileVLCKit의 SDK 버전을 최신버전으로 수정하고 build합니다.
    $ xcodebuild -project MobileVLCKit.xcodeproj -target "MobileVLCKit" -configuration "Release"

    --> 이부분에서 조금 이상한 문구들이 있지만 빌드하면 BUILD SUCCEEDED 라고 나오고 넘어갔습니다.


    rk/../../../install-ios-OS/lib/vlc/plugins/video_filter/librotate_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/librss_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/librv32_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libscale_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libscene_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libsharpen_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libswscale_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libwall_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libwave_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_filter/libyuvp_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_output/libvmem_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_output/libvout_ios_plugin.a(dummy.o) has no symbols
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool: file: /Users/User/Documents/VLC_SOURCE/test7/VLC-1.1.0-iOS/projects/macosx/framework/../../../install-ios-OS/lib/vlc/plugins/video_output/libyuv_plugin.a(dummy.o) has no symbols

  13. 작업남317 2011.08.25 15:28  댓글주소  수정/삭제  댓글쓰기

    휴~해결되었습니다.~ Aggregate static plugins 타겟으로하는 빌드 속성의 SDKROOT 를
    iphoneos4.3으로 바꿔주니 빌드가 되는듯 합니다.^^

  14. 작업남317 2011.08.29 17:35  댓글주소  수정/삭제  댓글쓰기

    네~ 덕분에 감사드립니다^^ 현재 소스를 살펴보고 있는 중입니다.
    그런데 혹시 최종적으로 나오는 MobileVLC 플레이어 소스에 들어있는 VLC라이브러리에는 일부만 포함이 된거 같아요. 그래서 빠진 라이브러리를 추가해보려고 하는데 어떻게 하면좋을까요~ 그리고 혹시 라이브러리 API문서같은것도 있나요? 아무리 구글링해도 나오질 않는다는 ^^;

  15. 작업남317 2011.08.31 16:35  댓글주소  수정/삭제  댓글쓰기

    구현하려는 부분이 아이폰 카메라로 라이브 스트리밍 하려고 하거든요.
    혹시 이부분에 대한게 빠져있어서 그럴까요~

    • BlogIcon luuvish 2011.08.31 20:44 신고  댓글주소  수정/삭제

      VLC을 어떻게 활용하시려는 건지요?
      H.264 (MP4)로 전송하시는 거라면 iOS의 AVAsset library로 충분할테구요 다른 포멧으로 인코딩하시는 거라면, VLC 자체는 decoding만 하니 ffmpeg을 보셔야 하구요.

  16. 작업남317 2011.09.01 09:51  댓글주소  수정/삭제  댓글쓰기

    ->VLC 자체는 decoding만 하니 ffmpeg을 보셔야 하구요.
    라고 말씀하신게 ffmpeg라이브러리를 따로 다운받아서 이용하라는 말씀이죠?

    윈도우용 VLC를 써보니까 PC의 웹캠을 스트리밍메뉴->DirectShow->프로토콜->코덱설정->스트림 으로 진행하면 실시간 카메라 화면을 스트림할 수 있더라구요. 그래서 아이폰의 카메라를 이용해서 아이폰카메라에서 실시간으로 보여지는 프리뷰화면을 제PC상에서 볼 수 있도록 구현해보려구요.
    그래서 VLC의 라이브러리를 이용하면 되지 않을까 해서 진행중이에요.

    VLC-1.1.0-iOS/projects/macosx/framework/Headers/Public/ 폴더에서
    헤더파일을 찾아보면 VLCStreamOutput.h VLCStreamSession.h 라는 이름으로 있는데 소스를 열어보면
    + (id)ipodStreamOutputWithFilePath: ( NSString *)filePath; 라는 함수가 있더라구요. 그래서 파일을 스트리밍해주는 것으로 생각되는데 아이폰 카메라 디바이스를 설정해주고 코덱등을 설정해주는 함수가 없는것 같다는 생각이 들어요~

  17. 작업남317 2011.09.01 09:58  댓글주소  수정/삭제  댓글쓰기

    영상은 h.264 음성은 ac3 나 aac 프로토콜은 mpeg2-ts로 가능할까요~

  18. BlogIcon luuvish 2011.09.01 23:34 신고  댓글주소  수정/삭제  댓글쓰기

    웹캠을 스트리밍할 수 있는지는 몰랐네요.
    ffmpeg으로는 디코딩만하는데 어디서 인코딩을 하려나 의아했습니다.

    말씀하신 해더와 펑션들은 MobileVLCKit에는 없고 VLCKit엔 있어요. iOS로 포팅하면서 빠진것 같네요.
    혹시나 해서 Mac OSX 용 VLC를 돌려보니 웹캠이 동작하더군요.

    맥과 아이폰의 카메라 구동 라이브러리가 얼마나 다른지는 봐야 알겠지만 맥용 VLC를 분석해 보고 MoblieVLC의 빠진 부분을 끼워넣는 것도 가능해 보입니다.

    근데, avc/aac 로 고정해서 스트리밍만 하는 거라면 굳이 vlc를 쓸 필요도 없어요. 애플에서 제공하는 AVAsset만으로도 충분해요.

  19. 작업남317 2011.09.02 13:23  댓글주소  수정/삭제  댓글쓰기

    넵~ AVAsset으로 구현하는 방법에 대해 좀더 알려주실수 있으실까요?

    그리고 답변 주셔서 감사합니다^^

  20. 작업남317 2011.09.02 16:14  댓글주소  수정/삭제  댓글쓰기

    계속 찾아봤는데 AVAsset 에 대해 아는바가 없어서 찾다보니 AVFoundation쪽인거 같다고 생각하고 찾아보았습니다.
    아래는 AVFoundation 기반 샘플 프로그램 주소입니다. 실시간 프레임을 얻을 수 있다고 합니다.
    http://shine10ee.blog.me/10108482406
    구글링을 해보니 ios 라이브러리에서 파일로는 인코딩이 가능하지만 h264로 인코딩된프레임은 얻을 수 없다는 정보를 보았습니다.
    (제가 영어를 제대로 읽었는지는 모르겠습니다.)
    그래서 그 프레임을 인코딩을 따로 해주어야하고 그것을 후에 스트리밍해주어야 한다는 정보인것 같았습니다.
    영상부분만 찾아보았는데 음성부분도 있다는것을... OTL
    그래서 말씀하신 AVAsset으로 부디 쉽게 해결되었으면 하는 희망이 있습니다. ~

요즘 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

댓글을 달아 주세요

  1. 유아독존 2011.02.12 07:46  댓글주소  수정/삭제  댓글쓰기

    자세한 설명 감사드립니다.

    그런데 그대로 따라하는 도중에 보니 계속 실패가 되더라고요 (FFMpeg를 스크립트를 이용해서 컴파일 하는 도중) 그래서 살펴보니 --enable-swscale (소프트웨어 스케일)이 켜져있는데 리비전 번호가 r25596 로 되어있는걸로 받다보니 libswscale 디렉토리에 있는 소스파일들을 못받아오고 에러가 납니다. 저 옵션을 끄던지 아니면 리비전번호를 최신꺼로 해야할듯 싶은데요. 그리고 최신꺼로 받아왔을때 위 압축파일에 포함되어있는 gas-preprocessor.pl을 이용해서 하니 컴파일 에러가 나더라고요. 그래서 AVPlayer에 포함된 gas-preprocessor.pl을 /usr/local/bin 에다가 복사하니 제대로 넘어가네요. 혹시 시간나시면 확인해주시면 정말 감사하겠습니다. 그럼 수고하세요. 꾸벅~

    Email: sabal90@hanmail.net

  2. BlogIcon luuvish 2011.02.14 13:55  댓글주소  수정/삭제  댓글쓰기

    네. libswscale 원본의 위치가 변경된 모양이에요. 최신 리비전으로 받아야 제대로 됩니다. 수정되어도 이전 리비전은 고정되어야 정상인데 libswscale은 external link라 문제가 된 모양이네요. 최신 버전은 armv6 에서 --disable-optimization 일 때 컴파일이 안되더군요.

  3. DJLee 2011.04.20 12:43  댓글주소  수정/삭제  댓글쓰기

    안녕하세요?
    질문이 있는데
    위의 그대로 했습니다만,,,
    빌드후 에러메시지가


    "_av_get_bits_per_sample_fmt", referenced from:


    _audioBitAdjust in libAVPlayerLib.a(AVDecoder.o)


    ld: symbol(s) not found

    다음과 같이 나오네요

    _av_get_bits_per_sample_fmt를 참조를 못하는 거같은데 ...
    혹시 해결 방법이 없는지 궁금합니다.

  4. BlogIcon luuvish 2011.04.20 15:20 신고  댓글주소  수정/삭제  댓글쓰기

    libavutil.a 이 제대로 link되었는지 확인해 보세요.
    Xcode의 library 설정에서 빠졌을 수도 있고 libavutil.a가 아예 컴파일이 안되어 있는지도 모릅니다.