//============
* 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 :
복사 배치파일
//==============================================================================
!!! -> 결국 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 |