Building FFplay for Windows
Using MinGW and MSYS ∗
Qin Chen
Advisor: Prof. Dapeng Oliver Wu
Dept. of Electrical & Computer Engineering, University of Florida,
Gainesville, FL 32611, USA
1 Introduction
FFplay is a simple and portable media player using the FFmpeg and SDL libraries. We modifies
it and uses it as the video decoder of our wireless video transmission testbed.
FFplay is developed under Linux but it is possible to build for Windows. This document
presents the tools and procedures for cross compiling FFplay under Windows. It is based on the
online tutorial “Building ffmpeg for Windows with MSYS and MinGW” with our own updates.
The original tutorial can be found from:
http://www.gooli.org/blog/building-ffmpeg-for-windows-with-msys-and-mingw/
2 Tools
We use MinGW and MSYS as the cross compiling platform. In this section, we list all the tools
and software we will use.
2.1 MinGW and MSYS
MinGW stands for Minimalist GNU for Windows. It is a native Windows port of the GNU
Compiler Collection (GCC), with freely distributable import libraries and header files for building
native Windows applications.
MSYS is a Minimal SYStem providing a POSIX compatible Bourne shell environment, with
a small collection of UNIX command line tools. It is primarily developed as a means to execute
the configure scripts and Makefiles used to build Open Source software.
MinGW and MSYS can be downloaded from:
http://sourceforge.net/project/showfiles.php?group_id=2435
∗ Version 1.0, last updated on March 9, 2009. Email: eric.qin.chen@ufl.edu
1
2.2 SDL Runtime Library
SDL stands for Simple DirectMedia Layer. It is a cross-platform multimedia library designed
to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and
2D video framebuffer. FFplay requires SDL library and here we need the Win32 runtime library
“SDL.dll”. The library can be found from:
http://www.libsdl.org/download-1.2.php
2.3 FFmpeg
Download our video encoding/decoding software based on FFmpeg.
2.4 Updates
Before start building, we need some updates for MinGW and MSYS. These updates resolve bugs
and compatibility issues in older versions. Below is the list of necessary updates.
2.4.1 coreutils
Download coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 from following address:
http://downloads.sourceforge.net/mingw/
coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2
2.4.2 w32api
Get MinGW API for MS-Windows w32api-3.13 from following address:
http://sourceforge.net/project/showfiles.php?group_id=2435&
package_id=11550
Download w32api-3.13-mingw32-dev.tar.gz which has been compiled for i386.
2.4.3 make
Get make-3.81 (or newer version) from:
http://sourceforge.net/project/showfiles.php?group_id=2435&
package_id=24963
Download make-3.81-MSYS-1.0.11-2.tar.bz2 which has been compiled for i386.
2.4.4 bash
Since FFplay’s configure script doesn’t work with bash 2.0.4 that comes with MSYS. We need
bash with a newer version. bash-3.1-MSYS-1.0.11-1.tar.bz2 can be downloaded from:
http://sourceforge.net/project/showfiles.php?group_id=2435&
package_id=24963
2
2.4.5 SDL Development Library
To cross compile FFplay, we need SDL development library to be installed. The library can
obtained from:
http://www.libsdl.org/download-1.2.php
Download the SDL source codes SDL-1.2.13.tar.gz.
3 Install and Build
Now we are ready to install the tools and updates.
1. Install MinGW (choose “MinGW base tools” and “MinGW make”) into c:\mingw
2. Install MSYS into c:\msys\1.0
3. After MSYS installation, it will run a post install script. It will ask you some questions
which you should answer as following:
• Do you wish to continue with the post install? [yn ] —> y
• Do you have MinGW installed? [yn ] —> y
• Where is your MinGW installation? —> C:/mingw
4. Extract coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2. This file contains four directories:
bin, info, lib, and man. Copy all files within these four directories to corresponding direc-
tories under C:\MinGW to overwrite old files.
5. Extract w32api-3.13-mingw32-dev.tar.gz. This file contains two directories: include and lib.
Copy all files within these two directories to corresponding directories under C:\MinGW
to overwrite old files.
6. Extract make-3.81-MSYS-1.0.11-2.tar.bz2. This file contains three directories: bin and
share. Copy all files within these two directories to corresponding directories under C:\MinGW
to overwrite old files. And copy “make.exe” to C:\msys\1.0\bin.
7. Extract bash-3.1-MSYS-1.0.11-1.tar.bz2. It contains three directories: bin, info, and man.
Copy all files within these three directories to corresponding directories under C:\MinGW
to overwrite old files. And copy “bash.exe” to C:\msys\1.0\bin.
8. Extract SDL-1.2.13.tar.gz. Under MSYS shell, go to directory SDL-1.2.13 and run follow-
ing commands to install SDL:
• ./configure
• make
• make install
9. FFmpeg (our trimmed version)
• Create a file called “myconfig” in C:\work\ffmpeg and copy the following into it:
3
#!/bin/sh
./configure --extra-cflags="-mno-cygwin -mms-bitfields"
--extra-ldflags="-Wl,-add-stdcall-alias" --enable-memalign-hack
--target-os=mingw32 --disable-shared --enable-static --disable-mmx
--disable-mmx2 --disable-ffmpeg
--enable-swscale --enable-gpl
• Under MSYS shell, go to directory c/work/ffmpeg and run following commands to
build FFplay:
(a) ./myconfigure
(b) make
Before running make, read the configuration output and make sure that the SDL check
is “yes”. This means you have correctly installed SDL libraries. Otherwise FFplay
won’t be built.
If everything goes right, now you should be able to get ffplay.exe that runs under Windows.
4 To Use FFplay
To run FFplay, collect ffplay.exe and SDL.dll and put them in one directory. Now you are ready
to go! You will be able to play local H.264 bitstreams, as well as receiving UDP packets. Table
1 and 2 list frequently used options and hot keys of ffplay.
Option Usage
-h show help
-f force format
-s set frame size (WxH or abbreviation)
-dest port specify destination port number
-fs force full screen
-x width force displayed width
-y height force displayed height
Table 1: ffplay frequently used options.
Hot keys Usage
q, ESC quit
f toggle full screen
p, SPC pause
Table 2: ffplay frequently used hot keys.
4
4.1 Play Local File
Open Windows cmd.exe and go to the directory that contains ffplay.exe and SDL.dll. Assume
that you have a H.264 bitstream called foreman cif.264 in the same directory. Run following
command to play the H.264 file:
ffplay.exe foreman_qcif.264
While playing you can press “f” to toggle full screen display. Press “q” or “ESC” to quit ffplay.
You can also specify the display window size through command line options. Figure 1 shows the
screen shot of ffplay under Windows XP.
Figure 1: Screenshot of ffplay under Windows.
4.2 Receive Packets Using Socket
To receive UDP packets, you need specify the socket port through command line option. Assume
port number 12345 is used, use following command:
ffplay.exe -dest_port 12345 -f h264
With the knowledge of your IP address and port number, the transmitter can then send encoded
H.264 packets to you. ffplay will be able to pick up and decode the packets, and to display video
in real time.