Final Media Player Source Code

Final Media Player itself is not open source software.

The player uses the LGPL version of FFmpeg and related libraries as its playback engine. The entire development environment setup and build procedure is explained here.

You ONLY need these files if you want to build your own media player! If you just want to play movies, download Final Media Player and install it. It is ready to use as-is.


Development Environment setup

You will need MinGW to build FFmpeg on Windows. Run these installers in the listed order and use the installation paths suggested by the installers:


Main environment

Run MinGW-5.1.6.exe - Minimal GNU for Windows.
Run MSYS-1.0.11.exe - Minimal SYStem.
Run msysDTK-1.0.1.exe - MSYS Developer Tool Kit.
Extract coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 to C:\msys\1.0. DO NOT replace existing files. This is primarily to get pr.exe


Upgrade GCC

Extract gcc-core-4.5.0-1-mingw32-bin.tar.lzma to C:\MinGW
Extract gcc-c++-4.5.0-1-mingw32-bin.tar.lzma to C:\MinGW
Extract libgcc-4.5.0-1-mingw32-dll-1.tar.lzma to C:\MinGW
Extract libstdc++-4.5.0-1-mingw32-dll-6.tar.lzma to C:\MinGW
Extract libgmp-5.0.1-1-mingw32-dll-10.tar.lzma to C:\MinGW
Extract libmpc-0.8.1-1-mingw32-dll-2.tar.lzma to C:\MinGW
Extract libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma to C:\MinGW


Install GDB

Extract gdb-7.1-2-mingw32-bin.tar.gz to C:\msys\1.0
Extract libexpat-2.0.1-1-mingw32-dll-1.tar.gz to C:\msys\1.0


Install Yasm

Save yasm-1.1.0-win32.exe as yasm.exe in C:\msys\1.0\bin


Patch system include files

Yes, unfortunately it is needed to patch 3 system include files in order to build the newest FFmpeg.
tempnam.diff, strcasecmp.diff and strcasecmp.diff.


Building FFmpeg and related libraries

After you have installed MinGW and updated it as described above, you are ready to build FFmpeg and related libraries. Start a shell by double-clicking the MSYS icon on your desktop and follow the instructions below.


Create directories

mkdir /ffmpeg
mkdir /ffmpeg/libraries
mkdir /ffmpeg/Binaries_LGPL
mkdir /ffmpeg/olibs/include
mkdir /ffmpeg/olibs/lib
mkdir /ffmpeg/olibs/man
mkdir /ffmpeg/olibs/man/man3
		


Build libgsm

Extract libgsm_1.0.13.orig.tar.gz to /ffmpeg/libraries (License: Proprietary, Home page)

cd /ffmpeg/libraries/gsm-1.0-pl13
make
cp lib/* /ffmpeg/olibs/lib
mkdir /ffmpeg/olibs/include/gsm
cp inc/gsm.h /ffmpeg/olibs/include/gsm/
  	


Build lame

Extract lame-3.98.4.tar.gz to /ffmpeg/libraries (License: LGPL v2, Home page)

cd /ffmpeg/libraries/lame-3.98.4/
./configure --prefix=/ffmpeg/olibs --enable-static --disable-shared
make
make install
  	


Build opencore-amr

Extract opencore-amr-0.1.2.tar.gz to /ffmpeg/libraries (License: Apache, Home page)

cd /ffmpeg/libraries/opencore-amr-0.1.2
./configure --prefix=/ffmpeg/olibs --enable-static --disable-shared
make
make install
  	


Build libogg

Extract libogg-1.2.0.tar.gz to /ffmpeg/libraries (License: Public Domain, Home page)

cd /ffmpeg/libraries/libogg-1.2.0
./configure --prefix=/ffmpeg/olibs --enable-static --disable-shared
make
make install
  	


Build libvorbis

Extract libvorbis-1.3.1.tar.gz to /ffmpeg/libraries (License: Public Domain, Home page)

cd /ffmpeg/libraries/libvorbis-1.3.1
./configure --prefix=/ffmpeg/olibs --enable-static --disable-shared
make
make install
  	


Build libSDL

Extract SDL-1.2.13.zip to /ffmpeg/libraries (License: LGPL v2.1, Home page)
Extract directx-devel.tar.gz to /ffmpeg/libraries/SDL-1.2.13 (Home page)

Patch SDL_stretch.c:

    in function SDL_SoftStretch() of file SDL_stretch.c
    /* using asm to stretch will cause exception under Windows when DEP enabled
       disable using asm will work even with DEP */
    /*	SDL_bool use_asm = SDL_TRUE; */
    SDL_bool use_asm = SDL_FALSE;			
		
cd /ffmpeg/libraries/SDL-1.2.13
./configure --prefix=/ffmpeg/olibs --enable-static --enable-shared --enable-joystick=no --enable-cdrom=no
make
make install
strip --strip-debug /ffmpeg/olibs/bin/SDL.dll
  	


Build libtheora

Extract libtheora-1.1.1.tar.bz2 to /ffmpeg/libraries (License: Public Domain, Home page)

cd /ffmpeg/libraries/libtheora-1.1.1
./configure --prefix=/ffmpeg/olibs --enable-static --disable-shared --disable-oggtest --disable-vorbistest
 --with-ogg=/ffmpeg/olibs --with-vorbis=/ffmpeg/olibs --with-sdl-prefix=/ffmpeg/olibs
make
make install
  	


Build LGPL FFmpeg

export PATH=$PATH:/ffmpeg/olibs/bin
mkdir /ffmpeg/ffmpeg_lgpl
		

Extract ffmpeg-r24068-swscale-r31628.tar.bz2 to /ffmpeg/ffmpeg_lgpl (License: LGPL v2.1, Home page)


cd /ffmpeg/ffmpeg_lgpl/ffmpeg-r24068-swscale-r31628
./configure --prefix=/ffmpeg/Binaries_LGPL --disable-debug --disable-static --enable-shared 
--enable-version3 --enable-avfilter --enable-memalign-hack --enable-avisynth --enable-libgsm
--enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora
--enable-libvorbis --extra-cflags=-I/ffmpeg/olibs/include --extra-ldflags=-L/ffmpeg/olibs/lib
make
make install
  	


To decompress the compressed files above, you will need a tool like BitZipper.