Adobe
产品
创意套装
Photoshop
Acrobat 系列产品
Flash 平台
在线营销套装
数字企业平台
数字出版套装
更多产品
解决方案学习帮助下载公司
商店
在线商店
产品价格
批量许可
查找经销商
搜索
 
信息 登录
欢迎,我的支持
我的帐户
注销
为何登录?登录后可以管理您的帐户,访问试用版下载、产品扩展和社区区域等。
Adobe
产品 分类   搜索  
解决方案 公司
帮助 学习
登录 欢迎, 我的货物 我的支持
Qty:
Subtotal
Checkout
Adobe 开发者中心 / Flash Media Server 开发者中心 /

使用用于按需点播视频和 MP3 播放的文件对象

作者 Robert Sandie

Robert Sandie
  • www.robertsandie.com

Content

  • 设置您的环境
  • 设置 Flash Media Server
  • 查看服务器端 ActionScript
  • 查看客户端设置

已修改

12 December 2005

页面工具

在 Facebook 上共享
在 Twitter 上共享
在 LinkedIn 上共享
书签
打印

Tags

要求

必备知识

熟悉将 Flash Media Server 应用程序结合在一起的基础知识。如果您还不熟悉, 建议您阅读:

  • 提供 Flash Video 的最佳范例概观, 来自 Macromedia
  • Best Practices for Encoding Video with VP6, 由 William Caulfield 撰写
  • Flashcomguru.com 博客, 由 Stefan Richter 撰写

了解 ActionScript 2.0 类结构或基本的面向对象编程。如果还不了解, 建议您阅读:

  • Flash ActionScript 2.0 学习指南
  • Peldi's Little Blog, 由 Giacomo "Peldi" Guilizzoni 撰写

用户级别

高级

必需产品

  • Flash Professional (Download trial)
  • Flash Media Server (Download trial)

范例文件

  • on_demand_player.zip (11199 KB)

Flash Media Server 2 提供了传统流式媒体能力和灵活开发环境的独特组合, 用于创建并向观众交付媒体体验。这些组合包括传统的媒体, 如按需点播视频, 实时 Web 事件广播, MP3 流以及丰富媒体通信应用程序, 如视频博客、视频消息、多媒体聊天环境。

Flash Media Server 2 的一个新功能是文件对象功能, 它支持对服务器上已定义的沙箱进行实时读/写文件访问, 无需使用 Flash Remoting 即可支持内容管理系统和数据库应用程序。这是一个您可以扩展以和文件对象应用程序一起使用的简单示例。

在本文中, 您将学习相当简单的应用程序, 该应用程序能够您用使用 Flash Professional 8 构建的预定义组件按要求显示 FLV 和 MP3。该应用程序从您服务器上的特定位置自动获取 FLV 和 MP3, 但也可以扩展用于其他用途。例如, 要使用 JPEG 为相册自定义此应用程序, 您只需重新定义过滤器以使其调用 JPEG。

此应用程序示范了服务器端上的新“文件对象”属性, 它与客户端上的 DataGrid、FLVPlayback 和 MediaPlayback 协同工作。它显示了 XML 驱动的播放列表的一个替代方法。如果您想了解有关 XML FLV 列表的详细信息, 请查看 Lisa Larson 的文章, 为流式视频创建动态播放列表。

设置您的环境

要全部执行此代码, 您需要 on_demand_player.zip, 它是本文随附的示例文件下载。此处是您应该对 ZIP 压缩档的内容执行的操作:

  1. 将 FileObj 和 MyCollection 文件夹放在 Flash Media Server 应用程序目录中 (默认情况下, 该目录为 Flash Media Server 2\applications\)。
  2. 将 OnDemandPlayer 文件夹放在您的开发机器上的任何地方。
  3. 放置您要流入 MyCollection/streams/_definst_/ 文件夹中的 MP3 和 FLV。

很容易更改您的默认应用程序文件夹。打开文本编辑器中的 conf/fms.ini, 并更改变量 VHOST.APPSDIR。

Flash Media Server 2 有两个控制逻辑、FileObj 和 MyCollection 的应用程序 (请参见图 1)。当举例说明 OnDemandPlayer.swf 时, 它会访问 FileObj, 将内容返回到 DataGrid。当用户单击 DataGrid 中的对象时, 它会调用 MyCollection 中的视频。

OnDemandPlayer.swf 和 Flash Media Server 2 之间的连接
图 1. OnDemandPlayer.swf 和 Flash Media Server 2 之间的连接

设置 Flash Media Server

要使此应用程序正常工作, 您需要配置“文件访问”和“流访问”。

文件访问

该 File Object 类允许访问服务器文件系统中的沙箱。为了防止任何误用, Flash Media Server 允许在为应用程序实例运行的虚拟主机指定的沙箱中访问文件。

要定义服务器端沙箱, 请进入 FileObj 文件夹中的应用程序 .xml 文件。定义您希望服务器查找的存储 FLV 和 MP3 的位置:

<FileObject> <VirtualDirectory>/approot; C:\Program Files\Macromedia\Flash Media Server 2\applications\MyCollection\streams\_definst_\ </VirtualDirectory> </FileObject>

您刚刚使安全文件能够访问这一定义的沙箱。您可以通过连续添加虚拟目录设置多个文件对象目录。

流访问

还需要设置 Vhost.xml, 您可以在 Flash Media Server 2 文件夹的 conf/_defaultRoot_/_defaultVhost_/ 子文件夹中找到它, 因为当从 Vhost 实例中调用“/approot”时, 您必须告知服务器它应该在指定的目录中查找。您需要定义放置流的位置 (应该与您早期为 FileObject 定义的设置相同):

<VirtualDirectory> <Streams>/approot; C:\Program Files\Macromedia\Flash Media Server 2\applications\MyCollection\streams\_definst_\ </Streams> </Virtual Directory>

查看服务器端 ActionScript

有两个在 Flash Media Server 上运行的应用程序:

  • FileObj 支持指向您的流沙箱的文件访问和过滤器函数。
  • MyCollection 支持 FLVPlayback 组件函数。

二者都使用相同的默认服务器端 ActionScript 文件 main.asc 运行。

开发任何 Flash Media Server 应用程序时, 以服务器端 ActionScript 开始总是最方便的。这样做能够您使用跟踪语句调试和模拟客户端操作。这不仅缩短了开发时间, 而且避免了在以后出现令人头疼的问题。

您可能注意到了 FileObj 文件夹的 main.asc 中的其他函数。注意, 有超出该应用程序所需的更多服务器端 ActionScript。这就是我用来在熟悉的框架或 API 中处理所有文件访问命令的内容。我希望你能发现此代码非常有用, 并对其进行重新计划, 以用于将来的文件访问函数。

下面, 我们看一下该文件中的几个主要函数。

文件类的构造函数

this.myFile = new File(name);

此构造命令创建了文件类的一个实例, 作为对象 myFile。变量和名称可以是文件,也可以是目录。在此演示中, 您将把别名目录传递到此, 以收集有关它的信息 默认情况下, 为 approot 。

文件类的 File.List

var dirList = this.myFile.list(filter);

这是客户端上的 DataGrid 从其中获取信息的列表函数。该列表方法为目录中的每个文件返回一个具有一个元素的数组。您可以用过滤器函数进一步对此进行过滤:

function filter(name) { if ( name.lastIndexOf( ".flv") != -1 || name.lastIndexOf(".mp3") != -1){ return true; } return false; }

例如, 如果您想据此构建并只显示 JPEG 图像, 就可以使用该过滤器和列表命令来控制将什么传输给您的客户端。

此处是 main.asc 文件中其他函数的简短概要, 以备您使用文件对象重新计划它们从而用于其他应用程序的需要。要查找这些函数的具体细节信息, 请阅读 Flash Media Server LiveDocs, 它提供了有关其中每个功能的详细信息。

此处是其他文件对象函数的简短概要:

  1. newClient.mkdir 创建 dirName 定义的目录
  2. newClient.remove 删除给定的文件对象
  3. newClient.rename 重命名给定的函数
  4. newClient.copy 将对象复制到给定的变量
  5. newClient.closeFile 关闭对文件对象的访问

FLV_Playback Server-Side ActionScript

在 Flash Professional 8 中用 FLVPlayback 组件进行流式处理时, 经常发生的错误之一是忘记将 main.asc 文件添加到流式 Flash Media Server 视频目录中。我已作为此包的一部分提供了该功能, 因此您不会遇到该问题。

查看客户端设置

此客户端设置相当简单, 因为它是使用基本的 OOP 原理用预存在的组件构建的。该客户端框架由位于 OnDemandPlayer 文件夹中的以下文件组成:

  • OnDemandPlayer.fla
  • OnDemandPlayer.as

FLA 组件

FLA 由三个基本控件组成:

  • FLVPlayback: 用于流式 FLV Flash Professional 8 的新功能
  • MediaPlayback: MP3 控制器
  • DataGrid: 用于将 FLV 和 MP3 与底层架构连接在一起
  • OnDemandPlayer: 引入的一个电影剪辑, 它指向第一帧上的 ActionScript 检查库

连接这些客户端组件相当简单。我们看一下几个关键点。

ActionScript 2.0 和 MovieClip 类

对于可伸缩应用程序, 使用 OOP 原理的一个常见最佳实践是作为类附加电影剪辑 请参见图 2 。这是组织 ActionScript 类并将其附加到舞台的出色方法。Breeze 公司的架构师 Peldi将此描述为最佳实践。因此, 如果您想知道如何将 OnDemandPlayer.as 附加到 OnDemandPlayer.fla, 请查阅库。

将 ActionScript 链接到电影
图 2.将 ActionScript 链接到电影

这与使用 #include 文件相当, 但更容易管理, 因为只需从该库附加电影剪辑即可:

attachMovie("OnDemandPlayer","mc",0);

与服务器连接

通过基本的 makeConnection 函数设置文件访问与服务器的握手:

public function makeConnection():Void { nc = new NetConnection(); nc.connect("rtmp://"+serverName+"/"+appName); nc.owner = this; nc.onStatus = function(info) { if (info.code == "NetConnection.Connect.Success") { owner.dir(); } }; }

发布您的文件夹目录

这会连接到 Flash Media Server 文件夹名并发送该名称, 您可通过此名称获得 FLV 和 MP3:

nc.call("createFileObj", null, foldername);

获得流长度

这与 Flash Media Server 连接, 以获得 FLV 和 MP3 的长度:

var streamlength = owner.nc.call("getStreamLength", null, stream_name);

FLVPlayback 组件具有内置的流长度。要在 MediaPlayback 中设置 MP3 的长度并在 DataGrid 中显示该长度, 则必须从 FileObj main.asc 文件中获取消息。

获得文件对象的列表

在客户端上, 您必须收集流名称以及数组中与文件对象有关的其他信息。这是用 dirResult 函数完成的:

private function dirResult(folderName, owner):Void { this.onResult = function(retVal) { for (var i = 0; i<retVal.length; i++) { var flv_name = (retVal[i].name).substr((retVal[i].name).lastIndexOf("/")+1); var index = flv_name.lastIndexOf("."); var stream_name = flv_name.substring(index + 1, flv_name.length) + ":" + owner.folderName + "/" + flv_name.substring(0, index); var streamlength = owner.nc.call("getStreamLength", null, stream_name); owner.myDP_array.addItem({Name:flv_name, Length:retVal[i].streamlength, CreationTime:retVal[i].creationTime, LastModified:retVal[i].lastModified, Size:retVal[i].length}); } };

注意对象 retVal 不只包含流名称。它还包含 creationTime、lastModified 和长度 文件大小 。

这只是少量详细信息, 您可以使用服务端上的 List 命令收集它们。有关文件对象的完整列表, 请查看 Flash Media Server LiveDocs 中的文件类的属性概要。

下一步工作

使用 Flash Media Server 中的文件访问和文件对象功能是将内容显示为 XML 驱动的数据列表的简单方法。本文中给出的示例只是一个简单的用例, 其目的仅是显示您服务器上的媒体资产。对于其他应用程序, 您可能希望将 XML 的扩展性和组织、易用性与文件访问相结合, 作为用于 Flash Media Server 点播应用程序的最佳方法。借助该应用程序, 您可以轻松地将整个 Flash 视频和 MP3 媒体集锦拖到您的服务器上, 以流化您的集锦。

在学习过程中, 如果您遇到有关 Flash Media Server 开发的问题, 请检查 Chattyfig 列表。这是 Flash Media Server 开发人员的重要列表, 往往包含大量开发讨论。作为开发人员, 在遇到很难解决的问题时, 我都会在这一宝贵的资源中寻求帮助。然而, 要注意您遇到的问题, 如果问题简单, 您可以在 Google 上搜索, 找到问题的答案。

我希望这有助于您了解构建到 Flash Media Server 中的新的文件访问功能。希望您在未来使用 Flash Media Server 时能收获很多。

 

Tutorials & Samples

Tutorials

  • OSMF video player for AIR for TV using Flash Professional
  • OSMF video player for AIR for TV using Flash Builder
  • Capture, encode, and stream live video over HTTP to Flash and iOS

Samples

  • Best practices for real-time collaboration using Flash Media Server
  • Understanding live DVR – Part 2: Using DVRCast with Flash Media Live Encoder 3
  • Understanding live DVR – Part 1: Implementing a live DVR player

Flash Media Server Forum

More
02/07/2012 ERROR: Restarting the recording after 2 days is not allowed, MaxRestartGap
02/10/2012 Buffering process bar not working with FMS streaming
02/09/2012 May I ask how FMS against DDOS attacks
02/09/2012 How can I know FMS version? (Development, Streaming, Interactive)

Flash Media Server Cookbook

More
02/09/2012 Using Camera with a MediaContainer instead of VideoDisplay
10/11/2011 Install Facebook Fanpage using a Flash template
06/02/2011 Converting video into Flash compatible format
06/02/2011 What's New in Adobe Media Encoder CS5.5?

产品

  • Creative Suite
  • Photoshop 系列产品
  • Acrobat 系列
  • Flash Platform
  • Digital Marketing Suite
  • Digital Enterprise Suite
  • Digital Publishing Suite
  • 移动应用程序

解决方案

  • 客户体验管理
  • 内容创作
  • 数字营销

行业

  • 教育
  • 金融服务业
  • 政府部门

帮助

  • 产品帮助中心
  • 订货和退货
  • 下载和安装
  • 我的 Adobe

学习

  • Adobe 开发人员连接
  • Adobe TV
  • 培训和认证
  • 论坛
  • 设计中心

购买方式

  • 在线商店
  • 批量许可
  • 查找经销商

下载

  • Adobe Reader
  • Adobe Flash Player
  • Adobe AIR
  • Adobe Shockwave Player

公司

  • 新闻编辑室
  • 合作伙伴计划
  • 公司社会责任
  • 工作机会
  • 投资者关系
  • 事件
  • 法律
  • 联系 Adobe
选择您的地区 中国(更改)
选择您的地区 关闭

North America

Europe, Middle East and Africa

Asia Pacific

  • Canada - English
  • Canada - Français
  • Latinoamérica
  • México
  • United States

South America

  • Brasil
  • Africa - English
  • Belgium - English
  • Belgique - Français
  • België - Nederlands
  • България
  • Česká republika
  • Danmark
  • Eastern Europe - English
  • Eesti
  • España
  • France
  • Deutschland
  • Hrvatska
  • Ireland
  • Israel - English
  • Italia
  • Latvija
  • Lietuva
  • Luxembourg - Deutsch
  • Luxembourg - English
  • Luxembourg - Français
  • Magyarország
  • Middle East and North Africa - English
  • Moyen-Orient et Afrique du Nord - Français
  • Nederland
  • Norge
  • Österreich - Deutsch
  • Polska
  • Portugal
  • România
  • Россия
  • Schweiz - Deutsch
  • Suisse - Français
  • Svizzera - Italiano
  • Slovenija
  • Slovensko
  • Srbija
  • Suomi
  • Sverige
  • Türkiye
  • Україна
  • United Kingdom
  • Australia
  • 中国
  • 中國香港特別行政區
  • Hong Kong S.A.R. of China
  • India - English
  • 日本
  • 한국
  • New Zealand
  • Pacific - English
  • 台灣

Southeast Asia

  • Includes Indonesia, Malaysia, Philippines, Singapore, Thailand, and Vietnam - English

Copyright © 2012 Adobe Systems Incorporated。保留所有权利。

使用本网站表明您同意使用条款和在线隐私政策(2009 年 7 月 14 日更新)。

京 ICP 备 10217899 号 京公网安备 110105010404