三、Flash Media Server3.5中应用ActionScript3.0

此文是Flash Media Server3.5初学者系列教程的第三篇。主要讲述了如何通过使用ActionScript3.0实现对来自vod 文件夹以及应用程序的H.264视频的流式处理。
vod文件夹内的视频进行流处理
首先,我将向你演示如何使用ActionScript流处理来自vod文件夹的H.264视频
1.下载本文所用文件。那个MP4文件是我工作的大学的一位影视创作的学生制作的.下载地址:http://download.macromedia.com/pub/developer/beginner_as3_fms3.zip
2.解压文件后,复制Vultures.mp4文件到剪贴板
3.定位到C:\Program Files\Adobe\Flash Media Server 3.5\applications.下面会有一个vod文件夹,打开它
4.打开文件夹,粘贴vultures.mp4文件到此文件夹。
5.关闭打开窗口。
并没有什么新的知识点。如果你一直紧紧跟随着此教程的学习,你就会明白vod文件是被看作一个发布点。到目前为止,我们所要做的仅仅是将FLVPlayback组件的内容路径设置为C:\Program Files\Adobe\Flash Media Server 3.5\applications.以及播放视频。
在此文中,我们将不再使用FLVPlayback组件,转而采用舞台上的视频组件接收vod文件夹中的视频。具体步骤如下:
1.   打开已下载的范例文件夹内的H264_StreamVOD.fla文件。如果你习惯使用Flash CS4,你将会在FlashCS4文件夹下找到此FLA文件。
2.   打开文件之后,你就会发现我已经为你创建好了界面。
3.   视频播放器中有一个名为myVideo的视频对象。你所需要做的仅仅是用ActionScript3.0将这个项目贯穿起来。选择actions图层的第一帧,按下F9打开动作面板。
    注意:视频对象的尺寸和宽高比应和要播放的FLV或MP4文件匹配。舞台上视频对象的默认大小是160*120.这种4:3的宽高比对同样比的FLV文件才适用。如果将高清内容应用通常的16:9的宽高比,那么将会造成错误的调整视频大小以致出现扭曲的现象。
4.   点击脚本面板,输入以下内容:

var nc:NetConnection = new NetConnection();
nc.connect("rtmp://localhost/vod");

var ns:NetStream = new NetStream(nc);
第一行的代码创建了NetConnection对象,第二行告诉Flash这个NetConnection对象指向的是FLash Media Server3.5中的vod文件夹。如果你一直采用视频对象实现文件的渐进式下载的话,你就会发现connec字符是FMS3.5服务器上的vod文件夹路径而不是 一个空字符。在这个例子中,你是采用的是FMS3.5开发版在本地工作。如果你 有一个商业账号,localhost就会被一个实际的RTMP地址(一些列数字)所代替,它可能是也可能不是一个指向vod文件夹的路径,一切之取决于你的互联网服务提供商的独特要求。
在连接建立和NetStream已确定之后,是时候该做些家务管理了,从而可以确保成功的连接到服务器上以及在流之前增加被缓冲的视频量。步骤如下:
1. 按Enter键两次,输入以下代码:
nc.onStatus = function(ncObj:Object) {
trace(ncObj.code);
if (ncObj.code == "NetConnection.Connect.Success") {
ns.setBufferTime(2);

此代码通过检测是否成功的连接到FMS3.5的状态事件来启动。主要通过捕获当SWF连接到FMS3.5是发送到
Adobe Flash Player的("NetConnection.Connect.Success")字符来完成。当成功连接好以后,trace语句
将会打开输出面板并显示图1所示的代码。

图1.输出面板中的连接代码
如果成功连接好了,NetStream类的setBufferTime()方法会把两秒的视频内容进入缓冲区。默认的缓冲值是0.1秒;设置一个多大的缓冲值由你决定。
2. 按Enter键换行,输入剩下的代码:

myVideo.attachVideo(ns);
ns.play("mp4:Vultures");
}
};

第一行将舞台上的myVideo视频对象和NetStream连接起来。第二行使用NetStream的play()方法播放视频。
注意到字符中必需包含媒体类型mp4和冒号这一点是十分重要的。同样,因为你使用的是FMS3.5,因此
添加视频内容的扩展名则不是必需的。

注意:如果使用的是FLV文件,play字符串将会是"Vultures".对于FLV文件并不需要加入媒体类型。
3. 保存并测试影片。由于2秒钟的内容会加入到到缓冲区所以会有一些轻微的延迟。当缓冲完毕之后,你
就会访问土耳其秃鹰幼子的巢穴,如图2所示。

图2.可爱的小动物,不是吗?

创建一个流视频应用程序

截止目前为止,在这些教程中,你一直是操纵着一个自动驾驶仪,让FMS3.5自动的帮你完成将vod文件夹内
视频流装载到FLVPlayback组件中或者是舞台上的视频对象中。有时候vod文件夹会变成碍脚石。vod文件夹
也是Flash Media Interactive Server版的一大特征。如果你正使用Flash Media Interactive Server,你
需要知道如何创建一个能够播放来自服务器的视频的应用程序。

事实上,并不是多么神秘的用法,但如果你是FMS3.5的初学者就可以能有一点点难以理解。首先,你的发布
点不再是vod文件夹,而是你的应用程序文件夹。这个文件夹位于FMS3.5的applications之下,名字任意。

另一个重大区别是实例的使用。这和ActioinScript没有任何关系。一个实例就是一个你必须创建的具体的
_definst_文件夹,用来存放视频和音频文件。

另外,在应用程序文件夹内通常会有一个.as文件包含一些相关的比较简单的服务器端代码。让我们来看一看
我在说什么:
1.在已下载的文件夹内有一个名叫Exercise的文件夹。打开它,在它里面有一个BabyVultures文件夹。这就
是你就会 用到的应用程序。
2.打开此文件夹你会看到一个streams文件夹和一个main.asc文件(见图3)。这个文件必须叫main.asc;它
包含了使系统工作的服务端代码。
注意:我必须要谢谢我的同事 Lisa Larson-Kelley因为这个main.asc是他的。

图3.一个FMS应用程序的基本文件结构

可以通过两种方式来创建.asc文件,一种是选择Flash启动画面面板中的ActionScript通信文件,另一种
是通过选择文件>新建>在新建文件对话框中选择ActionScript通信文件。

图4.Flash cs4启动界面中创建ActionScript通信文件

3.打开main.asc文件就会发现服务器端的代码是多么的简单:

application.onConnect = function(p_client)
{
this.acceptConnection(p_client);
}

所有的代码的意思就是在影片开始播放的时候,FMS3.5服务器准备接受连接请求。这是一个十分简单的
main.asc文件例子。当开始深入共享对象领域以及使用自定义组件时,代码就会变得非常复杂、包含上千行
代码。

4.关闭打开的Flash文档,打开streams文件夹。自爱这个文件夹下是_definst_文件夹。此文件用来存放
媒体文件。如果你打开_definst_文件夹就会发现一个Vultures.mp4文件副本。

现在既然 已经知道了这些事物的结构,是该付诸实践流处理视频的时候了:
1.打开applications文件夹,C:\Program Files\Adobe\Flash Media Server3.5\applications,从Exercise
文件夹下复制BabyVultures文件夹到applications文件夹下。这样就创建了一个名叫BabyVultures的程序,它
的路径就是 C:\Program Files\Adobe\Flash Media Server 3.5\applications\BabyVultures. 现在需要做的
就是让程序运行起来。
2.双击Exercise文件夹下的H264_StreamApp.fla文件,在Flash CS4中打开它。
3.点击actions图层第一帧,打开动作面板。
4.动作面板打开以后,单击脚本窗格输入如下代码:

var nc:NetConnection = new NetConnection();
nc.connect("rtmp://localhost/BabyVultures");

var ns:NetStream = new NetStream(nc);

与之前例子的重大区别是第二行的NetConnection字符。发布点已不再是以前所有例子中的vod文件夹,
转而变成了BabyVultures程序,

注意:如果你希望此文件增强安全性或添加数字版权管理,把rtmp替换成rtmpe就会自动加密流信息。
5.按Enter键两次输入剩下的代码:

nc.onStatus = function(ncObj:Object) {
trace(ncObj.code);
if (ncObj.code == "NetConnection.Connect.Success") {
ns.setBufferTime(2);
myVideo.attachVideo(ns);
ns.play("mp4:Vultures");
}
};

如果就此测试影片的话,视频会播放。Flash Media Server最伟大的一点就是它的智能性。当连接被建立好,
它就会自动寻找一个streams文件夹。当找到后就会想“哈哈,nc.play()方法中的视频原来在_definst_文件夹
里!”它就会立刻进入那个文件夹,找到视频后把它扔进流中。

图5.代码以及运行程序。

接下来做什么
现在你已经知道了如何通过在FMS服务器上创建的程序来播放视频,你可能想拓展自己你的知识。最好的
地方就是查看这些文章(目前仍然是关于FMS3的):
采用Flash Media Server的缩放和安全流媒体程序 (Lisa Larson-Kelly)
Flash Player和Flash Media Server的新的缓冲策略 (Fabio Sonnati)

接下来的教程会向你展示如何在Flash Media Server3.5中加密你的网页视频流以及建立SWF证书。
posted @ 2009-05-15 16:15  Andy  阅读(1443)  评论(0编辑  收藏  举报