mplayer是比较成熟的开源播放器框架了,但是开发文档却是稀少的很,这一点与微软的directshow没办法比。当然mplayer是同时支持linux、windows、macos的;相反directshow根本就不能跨平台。

不过我们这里只说移植,至于开发可以看看我的另一篇文章播放器插件实现系列——mplayer

各位可以先看看mplayer的跨平台移植说明:

http://www.mplayerhq.hu/DOCS/HTML/en/windows.html

在mplayer主页》document》English》Ports下

这里是关于mingw上的编译步骤

http://www.mplayerhq.hu/MPlayer/contrib/win32/MPlayer-MinGW-Howto.txt

看样子是要在windows机器上编译,一路下来有十几个步骤

这是官方建议的方式,我这里要介绍的是在linux平台交叉编译mplayer的win32版本。在linux平台我们有很多方便的工具可用,安装mingw只是一个命令的事情,比如在我的ubuntu上:

sudo apt-get install mingw32

然后:

./configure\
--target=i586-mingw32msvc\
--prefix=`pwd`/install\
--cc=i586-mingw32msvc-gcc\
--windres=i586-mingw32msvc-windres\
--ar=i586-mingw32msvc-ar\
--nm=i586-mingw32msvc-nm\
--ranlib=i586-mingw32msvc-ranlib\
--ar=i586-mingw32msvc-ar\
--as=i586-mingw32msvc-as\
--enable-static
make
makeinstall

搞定!

注意:

这里最关键的是--target参数,没有这个,你把--cc、--ar等全部写完了也没有用。之前没有仔细看./configure--help,没有注意到target,费了好多劲。

【补充说明】

最新版本MPlayer-1.1通过这种方式编译在h.264解码上有问题,需要换到较低版本MPlayer-1.0rc4版本,能解决这个问题。

具体细节我在另一篇文章中有说明:MPlayerWin32版本的H.264解码问题

【补充2013-08-09】

最近又重新用mingw编译了一下mplayer,发现有一个问题之前忘了记录,以致重新编译又折腾了半天时间。

首先,会出现下面的错误

./codec-cfg.exe etc/codecs.conf > codecs.conf.h
run-detectors: unable to find an interpreter for ./codec-cfg.exe

如果你尝试忽略该错误,继续make,那么将会出现另一个错误

codec-cfg.c: In function 'parse_codec_cfg':
codec-cfg.c:549: error: 'builtin_video_codecs' undeclared (first use in this function)
codec-cfg.c:549: error: (Each undeclared identifier is reported only once
codec-cfg.c:549: error: for each function it appears in.)
codec-cfg.c:550: error: 'builtin_audio_codecs' undeclared (first use in this function)
codec-cfg.c:582: error: 'CODEC_CFG_MIN' undeclared (first use in this function)

mplayer编译过程中通过先生成一个小工具codec-cfg,通过它生成codecs.conf.h,但是在交叉编译环境下,这个工具不能执行,所以需要将本地编译生成的codec-cfg覆盖codec-cfg.exe,比如执行下面的命令

cp ../MPlayer-1.0rc4-linux/codec-cfg codec-cfg.exe

然后继续make,就没问题了