[摘]编译MPlayer

自己动手看电影和听音乐,是个人电脑的一大主流应用,通常,我们都会安装某某解码,某某影音这样已经打好了包的免费播放软件,或者直接用操作系统自带的多媒体播放软件windows mediaplayer来播放,但是,这些软件的更新通常都是很慢的,而且,大部分打包软件并没有针对您的电脑的CPU进行优化,碰到某些问题,尽管官方可能已经解决,但是您安装的软件可能还没有更新或者无法更新,这个时候,自己动手编译一个播放软件就成了 最好的解决方法.
目前,Windows平台的开源影音播放软件主要来自两个项目,一个是源自Linux平台的跨平台多媒体播放软件,Mplayer,它精练,高效,内核结构严谨,主要采用C语言编写,但是在WINDOWS平台下,影响力不大,我个人认为它最优秀的部分是对流播放的支持能力非常强[目前,大部分P2P在线播放软件的核心都是采用的Mplayer];另一个是Windows平台下的Mediaplayer classic,它完全采用Visualc++的MFC开发,能且只能支持WINDOWS平台,Windows下大部分打包的播放软件如完美解码,终极解码,XX影音等,其实核心都是它[大家可以到它的主页去看,还可以看到原作者关于这些软件侵权的感叹],它的优点在于支持者非常多,因为采用c++编写,而且只需要支持Windows平台,因此,最新的技术通常可以立即被采用,它的解码能力比Mplayer来的广泛,但是,要命的缺陷就是,原始版本从代码结构上看,实际上根本不能直接支持流播放,都是先下载后播放,只能当作一个本地播放软件使用.
相对来说,Media player classic比较容易上手,只要安装Micorsoft visualstudio,以及DirectX开发包等附加件,就可以用全图形化进行编译了,但是,Microsoft visual studio免费版[Express]是无法编译的,因为它用到了MFC库,而一套专业版本visual studio价格上万元,这就导致我们只能和它说拜拜了.Mplayer则完全采用了C语言编写,大部分代码都是符合POSIX要求的,虽然它原先是采用GCC为编译工具Linux平台开发的,但是很幸运,GCC目前有WINDOWS版本,并且开源的MingW开发了大量的Windows本地代码封装库,完全可以将MPlayer编译成Windows程序,最关键的是,这一切都是免费的,真正的免费.关于如何通过源代码在Windows平台上进行编译,您可以通过Google检索到一大片,但是,笔者可以负责的告诉你,大部分早就过时了,如果你采用这些示范去编译,大部分都无法编译通过的,现在的Mplayer的自动配置和优化功能非常强悍,而且已经将大部分需要使用的外部代码都已经包含在了源代码中,根本不再需要满世界找库了.MPlayer的官方网站是 http://www.mplayerhq.hu/,不过最初的作者因为版权纠纷已经退出开发,而是由一群其他志愿者在负责继续开发,也正因为如此,大量的第三方代码已经被直接整合到了源代码树中,今天的Mplayer的编译工作轻松到只要敲入Make指令就可以完成.
万事开头难,第一步是要获取源代码,要获取最新的代码,方法是安装一个代码获取软件[也是版本管理软件客户端],可以从 http://subversion.tigris.org/ 里下载,


自己动手注意,选择windowsbinaries里的SlikSVN,下载完成后执行安装,指定一个目录进行安装后,通过Windows开始菜单->运行,打开命令行环境,如下图,假如,你刚才安装的svn软件目录位置是:\Program Files\SlikSvn\bin,这里教你一个小窍门,如下图:



自己动手首先用Windows资源管理器找到所在目录,然后拷贝路径,可以粘贴到命令行中去,就可以立即切换到所在目录了,注意,你的电脑必须已经连接到Internet,否则代码获取等操作会失败,因为代码实际将从远程服务器上读取,执行一下管理指令,svnadmin create 目录名,设置一个项目根目录,当然也可以不执行,mplayernew可以修改为任何你想创建的具体路径,然后执行
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer,


自己动手然后按回车,接下来,泡杯茶,耐心等待吧,速度的快慢取决于你的网络速度,通常会需要半小时左右,注意,上面命令行结尾的mplayer可以改为任意名字,所有代码将保存在你指定名字的目录下.等了N久完成了源代码下载后,我们到下载的目录,点进去看看,如下图:


自己动手恭喜你,你已经下载到了透骨新鲜的最新版本MPlayer源代码快照,当然,这个版本可能包含各种BUG,只要有合适的编译工具,就可以执行编译了[以后只要到该目录下执行 svn update就可以同步更新了],通常,各个编译版本或者发行版本有自己的PATCH补丁包,这些补丁不一定被加入内核,您可以自己去下载,例如,我为 MPlayer ww编译版 提供了一个支持FtpAnywhere直接P2P-FTP播放的补丁,您可以在:
http://www.snowware.com/cn/resource.htm 获取stream_ftp.c的补丁文件,直接替换原来stream目录下的同名文件,就可以支持P2P-FTP播放了,MPlayer对非英文语言的支持不太好,典型的是中间有空格或者部分中文字符,会被截断,您可以直接打个补丁进去。
自己动手在源代码下载完成后,我们需要准备编译工具了,那就是大名鼎鼎的GNU gcc 的windows版本MingW(MinimalistGNU ForWindows:可自由使用和发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库),来模拟Linux/Unix环境 编译,注意,不可以使用Microsoft visual c++或者Borlandc++这样的Windows平台C++编译,没法编译,这里,笔者最开始也走了歪路,按官方网站的说明,下载了MsSys,Gcc,各类库等各种独立包,被搞的头都晕了,如下图:


自己动手等下载完成安装了一半才发现有人已经将这些工具打包发布了,因此,你很走运,可以直接下载集成的Mplayer专用编译环境,可以在这个网站下载到:http://oss.netfarm.it/mplayer-win32.php,另外,MPLayer的WW编译版也提供了编译环境包,不过太大,有40多M,因此,如果只是编译核心的话,我给出的这个已经足够了,如果你想使用最新的发布版本,那么直接到MingW下载页面下载最新包,然后覆盖这个集成编译环境里的对应目录和文件就可以,不过根据我的经验,至少到今天,2009年5月3日,这个集成编译包里的东西都是最新的,至少是通过我的测试可以稳定编译Mplayer的,因此你不需要下载别的了。千万注意,不要使用GCC4.4.X版本,虽然GCC名气很大,这个最新版本存在BUG,如果你更新到4.4.X,那么作者不保证你能顺利编译Mplayer代码,如果你不想多麻烦,那么直接将下载的文件解压到c盘根目录下,然后什么都不用修改,如果你解压到了其他目录,那么请打开里面的etc子目录下的fstab文件,将里面的路径改为实际安装路径,如下图:



自己动手,将原来的c:/mingw改为你的安装目录,我们这里将修改为I:\mingw,然后强烈建议您将mplayer的源代码直接拷贝到你刚才解压的目录下,否则,总是需要执行CD指令加完整目录的行为可不好玩,搞不好还会出现各种问题,如下图:

自己动手里面的mplayersrc是我下载的Mplayer源代码,现在双击蓝色的Console,就可以启动windows下的虚拟Bash环境,来模拟Unix/Linux shell了,如下图:




自己动手很象Windows下的标准命令行环境吧,其实很多指令也相同的,输入ls指令可以列表根目录下的目录文件,输入CD 目录,可以切换当前目录到指定目录,我们首先切换到源代码所在目录中去,如下图:


自己动手现在,我们已经成功切换到源代码所在目录了,红色框内是我输入的指令,下一步,就是要进行激动人心的编译工作了,但是,在编译前,我们首先要配置一下,放心,这个是自动化执行的,如果你想偷懒,可以直接输入 ./configure,不带任何参数,那么会自动检测你当前的CPU和操作系统,并根据你实际的情况进行配置,我就在这上面吃了苦头,没注意到我的WindowsXP被我打开了IPV6支持,结果编译生成的代码打开了IPV6开关,更要命的是,Mplayer调用的地址解析部分的代码写的非常糟糕,根本不会自动判断字符串地址是IPV4还是IVP6,而是根据编译开关来决定返回IPV4还是IPV6,结果是在进行流播放的时候总是出现无法播放,而用其他FTP软件下载却正常,检查了老半天才发现是编译的时候打开了IPV6开关,后来把IPV6开关给关了才正常播放,废话不多说了,Mplayer的编译选择项目有很多,直接记住这些编译开关是不现实的,有个非常好的方法是,你可以直接用写字板打开源代码根目录下的configure文件,所有当前可用的配置项目都在这里面,你想关闭或者开启某些项目,直接拷贝然后粘贴到命令行里就可以,如下图:


自己动手通常情况下,这些项目的默认选择都是自动根据你的电脑CPU和操作系统已经安装的扩展包自动进行判断并优化,例如,目前大多数的发行版本并没有打开SSSE3优化指令,但是,如果你的CPU支持SSSE3,那么就完全可以通过加上 --enable-ssse3来强制编译时为SSSE3指令进行优化,如果你想发布一个适合各种平台的版本,那么就需要--enable-runtime-cpudetection,默认是被关闭的,此外需要注意的是,我们是中文操作系统,所以应该强制编译为简体中文 --language=zh_CN,并强制关闭IPV6项目--disable-inet6 ,此外,为了避免加上一堆的动态库,应该允许静态连接,加上 --enable-static,好了,其他的就可以根据你自己的喜好进行调节了,此外注意的是,默认会同时编译Mencoder软件,这个是Mplayer的同胞兄弟,是用来进行编码的,如果你不想要,可以在这里加--disable-mencoder,其他项目,通常情况下,你可以忽略,因为它会自动判断并优化的,具体的编译指令如下:



自己动手注意,我这里是为了兼容PIII的原因,关闭了SSE2,并关闭了3DNOW指令,--enable-largefiles开关默认是自动检测,通常是允许的,但是这里强制一下,避免检测可能失败的问题, --prefix=mplayerbin,指定可执行文件保存在源代码目录下的mplayerbin子目录下,你可以自己修改,配置完成后,如下图:


直接输入 make,就可以执行编译了,现在,你可以泡上一杯茶,如果你的CPU是Intel 双核E2140或者以上,或者AMDX2系列CPU,通常情况下需要5-10分钟完成编译,如果你的CPU是老一代的,那么你现在可以去休息一下了,大概会需要30分钟左右,期间会有一大片一大片的警告信息,别管它,正常,N久之后,正常情况下就编译成功了,



自己动手执行一下 make install来模拟安装,



所有的一切都完成了,直接关闭Console环境或者输入 exit退出,进入源代码目录下的mplayerbin子目录下的bin目录,我们编译得到的东西就放在这里,



自己动手恭喜您,一个使用最新代码,针对您自己的电脑的mplayer核心程序就被成功编译出来了,但是这只是个核心程序,缺少一个漂亮的外壳,解决方法很简单,用同样的方法找一些Mplayer外壳,大部分都是开源的,就可以了。这里,我们直接尝试下在线流播放,如下图:



自己动手成功地进行了MP3的在线播放,同样,也可以在线播放FTP服务器上的电影,不过注意,MPlayer的URL解析部分同样存在问题,对某些非标准字符或者中间有空格的文件名或者目录中包含这样的字符,播放会失败,经过对源代码的分析,问题出在它的解析部分,由于它不兼容扩展URL格式,因此,需要手动修改FTP播放部分的代码,至于如何修改代码来解决,这不属于本问讨论的内容了,有兴趣可以直接联系作者本人。
好了,All is done now! 使用自己动手编译的播放软件,和使用别人打包好的播放软件,感觉是不是完全不一样?当我自己动手编译的MPlayer成功的进行了第一次MP3在线播放的时候,那种感觉远远超过了我自己动手DIY一台电脑后交流电通过的感觉,只能意会,而无法言传,想体验这种感觉吗?动手吧,Just do it!

下面是几张忘记加上去的图片

posted @ 2009-06-07 20:22  ciey  阅读(2116)  评论(0编辑  收藏  举报