FFmpeg 소스 빌드

Code 2012. 8. 29. 06:17

//============
* ffmpeg 소스 빌드- v0.11.1  - 120828

* MinGW , Msys 설치
    - Msys ("Minimal SYStem") : CygWin 의 최소 버전
    - MinGW ("Minimalist GNU for Windows") : 컴파일 환경

http://sourceforge.net/projects/mingw/files/
 Download mingw-get-inst-20120426.exe (662.7 kB)
    -mingw 설치 패키지가  msys를 포함한다.
   
    - msys 설정
/etc/fstab 생성확인 d:/mingw    /mingw
    fstab에서 추가 한 것은 mingw를 제외하고는 ls로 보이지는 않는다. 동작은 한다.
    /usr은 보이지 않지만 존재한다. 루트와 같은 내용이다.
/usr/local  -> 실제 경로 d:\minGW\msys\1.0\local

없다면 폴더 생성 fstab에 추가 설정 필요 없음

   
* ffmpeg 컴파일
- 소스 받기
    http://www.ffmpeg.org/download.html 의 최하단
        FFmpeg 0.11.1 "Happiness"

    - windows 용 빌드-  http://ffmpeg.zeranoe.com/builds/


    - 소스 폴더를 마운트 : d:\mingw\msys\1.0\etc\fstab 수정
D:\_CCTV\FFmpeg\build /build
    - 소스를 D:\_CCTV\FFmpeg\build 에 복사

- 바탕화면의 MinGW Shell 를 실행( d:\MinGW\msys\1.0\msys.bat )

cd /build/ffmpeg-0.11.1

- 빌드 옵션 설정
./con1.sh 작성
#!/bin/sh

./configure --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --enable-shared --disable-static --disable-outdev=sdl --disable-w32threads  --enable-gpl --enable-version3 --enable-memalign-hack --enable-runtime-cpudetect --enable-avisynth --enable-postproc --enable-swscale  --enable-avfilter --enable-ffplay --enable-ffserver  --enable-zlib      --enable-libx264


# 참고
--enable-bzlib --enable-libmp3lame  --enable-libvorbis  --enable-libxvid --enable-libopencore-amrnb --enable-libfreetype --enable-libgsm   --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex     --enable-libtheora      --enable-libvpx        --enable-libxavs      --enable-librtmp --enable-libopencv

디버깅 버전 --enable-debug

    --enable-frei0r    --enable-libopencore-amrnb    --enable-libopencore-amrwb   
    --enable-libfreetype    --enable-libgsm    --enable-libmp3lame
    --enable-libopenjpeg    --enable-librtmp    --enable-libschroedinger    --enable-libspeex    --enable-libtheora
        --enable-libvo-aacenc        --enable-libvo-amrwbenc    --enable-libvorbis    --enable-libvpx
    --enable-libxavs    --enable-libxvid   
   
//
 --enable-w32threads : opencv 에서 활용하기 위해 필요- 성능문제로 설치하지 않는다.
    http://greenday96.blogspot.com/2011/11/ffmpeg-building-ffmpeg-with-high.html 참고
    - enable-w32threads를 쓰면 성능이 떨어짐
    - pthread로 대체해야 함
        -  http://sourceware.org/pthreads-win32/ 에서 pthreadVC2.dll, pthreadVC2.lib 을 다운받아
            pthreadVC2.lib 을 링크로 걸어주면 링크에러가 해결되고 vlc 와 거의 동급의 성능을 낼 수 있었다.
       
        - Pthreads-w32 release 2.8.0 (2006-12-22)


ffmpeg "--enable-libopencv" "opencv not found"
    - 경로 설정해야 함 - 차후

//==============================================
* 모듈 설치

- minGW 모듈 설치
    - 설치 설명 : http://www.multigesture.net/articles/how-to-upgrade-your-mingw-with-commonly-used-libraries/
    - 소스와 빌드 제공 : http://www.gtk.org/download/win32.php   
        - GLib, pkg-config

- yasm 설치   
    http://yasm.tortall.net/Download.html
        - Yasm 1.2.0  - October 31, 2011
    에서 win32.exe를 받아서 yasm-1.2.0-win32.exe -> yasm.exe 이름 변경 복사
    mingw/bin 에 yasm.exe로 복사
    - 차후 vs2010용 사용 시도해볼만

- libx264  x264
    http://www.videolan.org/developers/x264.html
    ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ - 최신 일자를 받는다.
        x264-snapshot-20120827-2245.tar.bz2

    ./configure --enable-shared
   

    --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib

--enable-debug 디버깅
--enable-win32thread  --enable-pic
    - 옵션 참고
        --disable-avs            disable avisynth support (windows only)
        --disable-swscale        disable swscale support
        --disable-lavf           disable libavformat support
        --disable-ffms           disable ffmpegsource support
        --disable-gpac           disable gpac support

    make
    make install
    -> 컴파일과 설치가 제대로 됬는데 에러 - libx264 not found
        /usr/local/include 에 있는 파일이 있는 데 없다고 함
    ffmpeg의 ./configure 옵션에 --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib 추가해서 해결


//==============================================================================
- pkg-config
    http://www.freedesktop.org/wiki/Software/pkg-config
        - http://pkgconfig.freedesktop.org/releases/
            pkg-config-0.27.1.tar.gz    24-Aug-2012 12:57     1.8M     
            pkg-config-0.26.tar.gz    15-May-2011 05:35     387K
            pkg-config-0.25.tar.gz    28-May-2010 09:12     966K     
            - 0.25이상의 버전은 GLib 가 필요
                - 그러면 추가로 필요한 모듈 : GLib-2.30.2 , PCRE-8.30 , libffi-3.0.10 , Python-2.7.2 ... 등등

    - 간단방법
        - http://www.gtk.org/download/win32.php       
            - pkg-config     0.26 - pkg-config_0.26-1_win32.zip 다운로드
            - pkg-config.exe 를 D:\MinGW\msys\1.0\local\bin 에 복사

    - pkg-config-0.26은 에러가 난다
        - ERROR!! : glib-2.0 not found GLIB_CFLAGS GLIB_LIBS
        -> 패키지 관련 유틸이므로 0.25를 사용해도 된다.

    pkg-config-0.25은 ./configure 성공
    make에서 glib.h가 없다고 나옴
    - http://www.gtk.org/download/win32.php       
        glib-dev_2.28.1-1_win32 버전 (DEV !!)을 압축 풀어서
            D:\MinGW\msys\1.0\local 경로에 bin, include, lib 폴더 복사



//

- SDL 설치
    - ffplay.exe를 위해 필요
     다운 : http://www.libsdl.org/release/
        - SDL version 1.2.15 - SDL-1.2.15.tar.gz 다운

    ./configure –prefix=/mingw
    make
    make install


- Zlib 설치
    - 의존성 가진 모듈이 많아서 설치 해야 함
    
    - 복사 설치
        - http://sourceforge.net/projects/mingw/files/MinGW/Extension/zlib/
            - libz-1.2.7-1-mingw32-dev.tar.lzma , libz-1.2.7-1-mingw32-dll-1.tar.lzma 다운 받아 압축을 푼후
            - D:\MinGW\msys\1.0\local 경로에 bin, include, lib 폴더 복사

    - 컴파일 설치
 다운 : http://sourceforge.net/projects/libpng/files/zlib/
 컴파일설치방법 : http://code.google.com/p/imms/wiki/BuildingOnWindows
$make -f win32/Makefile.gcc
 win32/Makefile.gcc 파일 수정    
    #경로추가
BINARY_PATH=/mingw/bin
INCLUDE_PATH=/mingw/include
LIBRARY_PATH=/mingw/lib

$make install -f win32/Makefile.gcc



//==============================================================================
* 파일 복사
    - SDL : SDL-1.2.15-win32.zip 안에 있는 SDL.dll 을 복사
        - 주의! D:\MinGW\bin 에 있는 것을 복사하면 안됨
    - x264 : D:\MinGW\msys\1.0\local\bin\libx264-125.dll


    - FFmpeg :

복사 배치파일

cpsd-11.bat

headercopy-11.bat




//==============================================================================

!!! -> 결국 ffmpeg 빌드 성공
    - 하지만 win32 환경에서는  빌드된거 가져오면 될것 같지만
        http://ffmpeg.zeranoe.com/builds/

        - config.h 파일을 얻기 위해 빌드를 해야 한다.

//===========================================================
* 적용 프로그램 컴파일 에러
    - 참조 : http://code.opencv.org/issues/1605

//
'avcodec_init': identifier not found -> OK
    -     //avcodec_init();//avcodec_register() 함수에 포함됨
    //av_register_all();//한번만 실행됨, avcodec_register_all 포함
    //ffmpeg 0.11
    avcodec_register_all();
#if CONFIG_AVDEVICE
    avdevice_register_all();
#endif
    //avfilter_register_all();//필터 사용 안함
    av_register_all();


//
'av_open_input_file': identifier not found -> 사용안하는 함수 -> 주석처리
    - replace av_open_input_* with avformat_open_input
    - int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap)
        -> int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
    - av_set_parameters avformat_open_input

//==========================================
OpenWriter

//
'av_set_parameters': identifier not found -> 사용안함
    Codes involving av_set_parameters commented out, reason: no longer used replace  "av_write_header" with "avformat_write_header"
    deprecated pass the options to avformat_write_header directly.
    - avformat_write_header() 함수에 내장
   
//
'dump_format': identifier not found -> OK
    - void dump_format(AVFormatContext *ic, int index, const char *url, int is_output);
        ->void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output);
//
'av_write_header': identifier not found -> OK
    - int av_write_header(AVFormatContext *s);
    -> int avformat_write_header(AVFormatContext *s, AVDictionary **options)
    - "av_write_header"  "avformat_write_header"

//
'URLContext' : undeclared identifier -> OK
    extern "C"{
    //URLContext
    //#include "libavformat/avio.h" //ver 0.10
    #include "libavformat/url.h"    //ver 0.11
    }


//
'URL_RDONLY' 'URL_WRONLY': undeclared identifier -> OK
    - replace URL_WRONLY with AVIO_FLAG_WRITE

//==========================================

//
'url_fclose': identifier not found -> OK, 테스트 남음
    - replace url_fclose/url_fopen with avio_close/avio_open
    - url_fclose(AVIOContext *s);
        ->int avio_close(AVIOContext *s);



//==========================================
// avformat_write_header
http://ffmpeg.org/doxygen/trunk/group__lavf__encoding.html#g78d4e734fecb1d2385536e6dd5b7b9f5
av_set_parameters  dump_format av_write_header avformat_write_header



반응형

'Code' 카테고리의 다른 글

Visual Studio 2010 사용 관련  (2) 2012.11.17
문자 코드  (0) 2012.11.11
WinDbg 와 VirtualPC를 이용한 커널 디버깅 방법  (0) 2012.08.21
Ajax  (0) 2012.08.19
_ERROR Log  (0) 2012.08.19
Posted by codens