此文是结构松散的初学者教程系列第四篇。主要阐述了如何更好的应用Flash Media Server3.5的新安全特性。首先我将告诉你如何加密视频,使用户无法拦截网络上的流信息。然后我将解释如何添加SWF证书,从而使得用户无法反编译以及重新使用你的SWF文件。
他们不把它叫做“野生,野生的网页”的原因是它的情况并不少见。例如,当你发布影片到你的网站上,几分钟之后它就会出现在别的地方。事实上,如果有正当理由困扰着网络视频的使用的话,那就是不安全性。
让我说清楚本文的目的。在这里我将采用的方法并不是像保护一个州的首脑一样将视频包裹在一个安全的警戒区。相反,我将会使它可以被自由的使用,但想偷就不是那么容易了。
我将用类比的方法来阐述内容。最近我需要为我的笔记本电脑配置一个鼠标。在如此简单的购物中使我感到震惊的是鼠标的包装:它被包装在一个坚硬的塑料壳里面,想要打开它必须要用到链锯。这样包装的目的就是防止偷窃。想要打开它需要非常长的时间而且机会是很好的。如果你试图打开包偷走鼠标的话,会有一名监视你的保安人员走过来询问你究竟要做什么。
采用渐进方式下载视频,也就是使用HTTP连接将FLV文件下载到Adobe Flash Player中等同于将鼠标用USB线悬挂在架子上。绝对是不安全的,而且比较容易被偷。原因是FLV文件被下载到了浏览器的缓存中。将此FLV文件从缓存中复制到桌面是不费吹灰之力的。
如果仅仅是通过手机向祖父传递儿子的视频或相片的时候,安全不那么重要。换句话说,如果你花钱购买了内容或者是投资了内容的生产,那么保护你的投资对你来说就变得意义重大了。这也就是Flash Media Server产生的原因。
当通过FMS流传输视频的时候,没有任何东西进入浏览器的缓存。Flash Player担当起了将比特流转换成网页中放器中FLVPlayback组件能播放的视频。通过FMS流传输视频为视频的安全做出了重大升级。就像是零售商将鼠标锁在了橱窗里,或将鼠标转移到上锁的陈列盒里。
注意:阅读Flash VIdeo Learning Guide的“Delivery options for Flash Video"章节获取更多的网络传输视频方法,同时观看视频技术中心的“Delivering video on the web”视频了解渐进式下载FLV文件和流传输之间的区别。
Flash Media Server3.5内置了两种特性帮助你将鼠标放回到架子上而且不会被偷走:加密和SWF证书。此文告诉你如果应用这些特性到一个流视频中。
加密或静区
你不是很讨厌当你在和别人谈话的时候,别人趴在墙上偷听吗?在互联网上这是非常普遍的,很多第三方开发的程序已经被用来监听服务器和客户端的信息。当它们捕获到一个感兴趣的数据流后直接就会抓住它,而不先进行询问。
FLash Media Server内置了加密特性,最令人喜欢的一点就是:为了使用它你并不需要获得量子物理学的博士学位,而仅仅需要的是多按下键盘上的一个键。
具体步骤如下:
1.下载将会用到的文件http://download.macromedia.com/pub/developer/beginner_security_fms3.zip。解压后,拖动Vulures.flv和Vultures.mp4两个文件到vod文件夹下的media文件夹里。路径是C:\Program Files\Adobe\Flash Media Server 3.5\applications\vod\media.
2.打开一个新的Flash Cs4 文件。拖动一个FLVPlayback副本到舞台上。
3.在组建检查器的参数选项卡中,双击source参数打开内容路径对话框(见图1)。
4.输入如下路径:rtmpe://localhost/vod/Vultures
5.点击Ok,当Flash将元数据加载到FLV文件中后对话框会关闭。
6.保存并测试影片。
图1:通过在rtmp路径中添加字母e实现Flv文件加密
播放视频的FLV文件是一个加密的文件。通过添加字母e到路径上,你就告诉了FMS3.5对vod文件夹中的FLV文件添加实时的加密。在服务器到客户端Flash播放器的传输过程中文件都是加密了的,而Flash Player并不需要任何钥匙就可以实现文件的解密。
只有当你打开FMS3.5 管理控制台后才会被提示流是经过加密处理的。如果你单击View Applications然后单击Client选项卡,你就会看到在协议栏里流出服务器的视频流所采用的协议是RTMPE。(见图2)
图2.管理控制台指示协议栏的加密FLV流。
SWF文件的防盗校对
如果你接触网络有一段时间了,你就会明白捕获一个SWF文件是多么容易的一件事。事实上,关于这个操作的一个非常普遍的讨论时“嘿,我已经得到了 一个SWF文件,问题是我该如何反编译它从而获得源文件呢?”我不想深入讨论有关的道德问题,因为在特定情况下这样操作是十分必要的。但总体而言,反编译SWF文件是不可接受的。
这就提出了一个相当有意思的问题:“我已经花费了大量的时间和金钱开发SWF文件。我该如何防止它被其他人反编译呢?”如果你采用Flash Media Server3.5话,那将会是一件极其容易的事情。
具体步骤:
1.创建一个新的Flash Cs4文档。
2.舞台上添加一个FLVPlayback组件,并将其源参数设置为rtmpe://localhost/vod/mp4:Vultures
3.在皮肤属性,选择SkinUnderPlaySeekFullscreen.swf.
4.添加一个新图层,在此图层的舞台顶部加入一些文件或者画一个简单的图形。文字或图形在这个练习中是十分重要的。
5.继续,测试影片。一切工作正常,文本位于视频之上(见图3)。
图3:视频正常播放
注意:正如我以前指出的那样,当指向的是vod文件夹中的mp3和mp4文件时需要在媒体类型后追加冒号和文件名,没有扩展名。如果文件无法正常工作,认真检查无比确保冒号和文件名中间没有插入空格。
保护文件不被偷走和反编译是Flash Media Server3.5的一个极其漂亮的特性。关于这一特性,默认情况下是不被激活的,你要启动它需要改变一些设置。
首先改变驱动该特性的XML文件。如果你不太适应直接改变application文件,那么事先先把文件复制到桌面,这样如果你犯了错误的话,还可以用原来的文件替换掉。
6.保存文件并定位到C:\Program Files\Adobe\Flash Media Server3.5\conf\_defaultRoot_\_defaultVHost_,打开此文件夹里的Applications.xml文件。
注意:我会用Dreamweaver来打开这个XML文件,至于采用什么应用程序完全取决于个人爱好。
7.向下滚动到726行,如果没有行标,那么用SWf作为关键字进行搜索就可以找到了。
8.现在把<SWFVerification enable="false">中的false改成true,见图4.
图4.更改设置为true,打开SWF证书。
先不要保存文件,这个过程还有一个你需要知道的方面。
你不能仅仅打开SWFVerification就高兴的希望它能工作。你同时还需要放置一个SWF文件副本到某特定的位置。如果向下滚动XML文档就会注意到这样一个标签<SWFFolder></SWFFolder>。如果你已经阅读了在此标签之前的注释文字的话(见图5),你就会明白需要创建一个文件夹(推荐使用SWFs名字),同时将即将创建的SWF文件放置到这个文件夹下。将会发生的是服务器会首先去包含此SWF文件的文件夹以及证实其是否正确。
图5.通过将SWF文件放置到一个特定的文件夹锁定它。
9.如果继续向下滚动到XML文件的下一部分,就会发现可以设置采用的Flash播放器的版本。不要随便修改这里。唯一可用的版本是Flash Player 9.0.115及更高版本。这里的设置是为了使其能够适应未来的播放器更高的版本。
10.滚动到<Cache>标签区域。你就会看到SWF文件会存活--TTL标签意味着Time To Live--1440分钟在缓存中也就是24小时。如果你认为过长或过于偏执,你可以更改数值。事实上,改成5的话就意味着只会在内存中保留5分钟。(见图6)。
图 6.SWF只在缓存中保存5分钟
11.保存文件并退出编辑此文件的程序。
在更改了服务器配置之后,你将要做的是重新启动FMS3.5server。
具体步骤如下:
1.启动Flash Media Server管理控制台,打开后,单击Manage Servers按钮。
2.在servers面板的底部有5个按钮。中间的那个像圆形箭头的按钮(见图7)就是要找的按钮。用来重启服务器或主机。单击后,将会提示你是否要重启服务器。单击Restart后,SWF Verification就被打开了。
图7.单击中间按钮重启服务器
3.返回到Flash Cs4中,发布Vultures影片。在浏览器中打开HTMl文件,视频不会播放。事实上,你应该看到的是酒吧,但你现在看到的是SWF文件不能被确认而服务器拒绝了此流。
图8.SWF文件不能被证实时看到的(你没有做错人和事)。
4.现在为了使一切正常工作,需要做的是复制粘贴此项目中的SWF文件到Application.xml中你启动SWFVerfication时所指向的文件夹中。定位到C:\Program Files\Adobe\Flash Media Server 3.5\applications\vod创建一个名为SWFs的文件夹。
5.回到包含已发布HTML文件的那个文件夹中,打开HTMl文件,视频开始播放了!
6.为了更真切的认识到这一特性是如何加固房屋的,返回到Flash 项目中,移动图层2里的对象到舞台的另一位置,见图9.你所做的正式模拟一个盗贼偷盗你的SWF文件,反编译它,以及玩弄它。
图9.屋内的盗贼
7.使用相同的名字发布次文件,打开HTML文件。你就会看到图10 所示的内容。事实上,FMS3.5已看到了当前的SWF文件,指向了SWFs文件夹,然后询问“此文件夹中的SWF文件是当前正播放的SWF文件吗?”响亮的回答“不是”。结果就是否定了这次连接请求。
图10.由于两个文件不匹配且不能被证实所以否定了流
最后,一下是一些需要知道的详细信息:
1.如果设置了 <SWFVerification enabled="true">,那么就打开了这一特性,所有本地创建的SWF 文件都需要被证实。如果你不认为自己会用到这一特性,那么在学习完此教程之后就将值设置为false.
2.如果任由verification特性打开,确保所有使用FMS3.5的SWF文件都被复制到了SWFs文件夹。如果不这样做的话,什么都不会工作--我猜Adobe的技术支持热线必定会接到许多盛怒的电话。
在本篇文章里我已经告诉你了如何在本地工作。如果这两个特性对你来说直观重要,那么为了将盗贼挡在门外你需要和你的网络服务提供商或FVSS讨论这些特性。
接下来
此文告诉你了一些保护你的内容的方法。其中之一相对简单---RTMPE加密视频流,另一种是采用fms3.5的SWFVerification新特性。如果你比较关注这一话题,以下是其他相关的内容:
1.Lisa Larson-Kelley在 Scaling and securing streaming media applications with Flash Media Server文中围绕这一主题进行了更深入的阐述。
2.如果你真的需要工业实力保护,你可能想了解Flash Media 版权管理服务器,请阅读Laurel Reitman's overview.
下一篇文章涵盖了使用FLVPlayback组件和ActionScript3.0实现音频的基本流处理。