日期:2014-05-17  浏览次数:21192 次

FlowPlayer的破解及Windows平台下的编译1
2009-06-09 下午 02:41
FlowPlayer是非常著名的Flash播放器,和另一个JW Player齐名,使用GPL 3协议进行开源,按照3个授权发布(Free,Commercial,Multi-Domain),第一个是免费版,后两个授权是要钱的,价格参见这里。
免费版的限制主要是启动时会有FlowPlayer的Logo在左下角,过几秒自动淡出消失;还有就是全屏后右上角有个很大的FlowPlayer的Logo,不会消失;以及不能用于商业用途。
可怜我是普通学生,自然没钱买(最便宜的也要95刀啊),自然只能破解掉这个,刚好FlowPlayer是开源的,直接修改代码,编译就可以了。
但注意我第一篇文章的第一句话,这一切操作都要在Windows下进行,而网上能找到的编译指南都是基于Ubuntu或者其他Linux分发版本的。于是我不得不撰写此文进行指导……

首先要明确一点,FlowPlayer不是Adobe Flash做的。它的开发工具是基于大量开源的第三方工具以及Adobe自己的Flex SDK。因此,我们要编译FlowPlayer,就需要安装这些东西。
这里只讨论最小编译环境,鉴于FlowPlayer的Plugin编译需要大量第三方包的支持,而这些与本文的目的(破解)没有任何关系,恕不赘述。
FlowPlayer编译也需要Java环境(安装JRE),编译工具使用Apache-Ant,还需要Flex SDK(在Adobe的页面的右边可以获取到免费的SDK下载),在FlowPlayer的下载页面可以下载到FlowPlayer的源代码,当然你也可以自己SVN获取最新的代码。
这些东西下载下来应该都是压缩包的形式。我使用的是Apache-Ant 1.7.1,Flex SDK 3.3,FlowPlayer 3.1.1。全部解压出来。
设置系统变量:添加Apache-Ant中的Bin目录到Path变量中,设置ANT_HOME为你Apache-Ant的解压目录。
打开源代码中的build.properties文件,修改flex3dir的变量指向为Flex SDK的解压目录。(把等号后面的内容修改即可)。mxmlc_bin,compc_bin,asdoc_bin这三个变量的最后补充上.exe后缀(原文用于*nix系统,所以没有后缀),如果你要修改播放帧率的话,下面的framerate也可以修改。我为了配合影片编码,修改为25。
在源代码所在目录运行cmd,输入ant,看看能不能执行,不出意外的话应该会提示几个error,然后编译失败。没关系,这是因为官方的FlowPlayer源代码不是为Windows平台设计的,部分地方不兼容所致。

下面开始修改代码让其能在Windows平台下编译通过。
修改build.xml文件:<property name="version-status" value="" />中的value值设置为0。Windows中不允许变量为空,但Linux中允许,这是第一个兼容性错误。这样修改后会影响最后生成文件的文件名(最后多了个-0),但这不是很重要对吧。
修改src\actionscript-commercial\org\flowplayer\config目录下的VersionInfo.as文件,这里controlsVersion():String和audioVersion():String无法返回正常的值,手动把return后面的变量修改为字符串,内容可以在build.xml中找到对应的,当然你乱填也可以,不过还是建议按规范填写。
这样修改后,再次编译应该就能在build文件夹中产生正确的swf文件了。

这只是完成了编译环境的配置,下面进行破解。
破解有两个思路:一个是手动把显示Logo的代码屏蔽掉,这是我一开始的想法,后来发现工程量太大。
另一个就是让程序认为自己是商业版,这是我后来采用的方法。
打开src\actionscript-commercial\org\flowplayer\view目录下的LicenseKey.as文件,可以看到有一个CONFIG::commercialVersion,还有一个CONFIG::freeVersion。这就是判断是免费版还是商业版的方法了。把CONFIG::freeVersion的代码替换到CONFIG::commercialVersion上就可以了。
这样就把验证代码给屏蔽了。
然后要让编译程序编译为商业版的swf文件才行。鄙人对ant使用方法不是很熟悉,是通过修改build.xml文件实现的。
先把原来的<target name="compile">所有内容删除,再把文件中<target name="compile-commercial">修改为<target name="compile">,这样编译出来的就是商业版的swf文件了。无Logo~

最后再叙述一下FLowPlayer的使用,官方的在这里貌似有出了问题。如果只有一个flowplayer-3.1.1.swf文件,则在使用的时候会提示error #10099无法播放,原因在于官方误把flowplayer.controls-3.1.1.swf当作可选组件。其实这个文件是播放器的控制条,怎么能可选呢?补充上这个文件后就一切正常了。