ASP.NET WEB服務和Flash打造MP3播放器
發表于:2007-06-30來源:作者:點擊數:
標簽:
昨天裝了Flash MX 2004 Pro,看了下介紹,確實增加了不少新的特性,加了不少數據組件,后來感覺ASP.NET 開發 web服務這么簡單,于是突發奇想:我何不用c#和flash做一個播放器呀。下面介紹一下簡單的原理。 用c#寫一個web服務,把一個指定目錄的.mp3文件都羅
昨天裝了Flash MX 2004 Pro,看了下介紹,確實增加了不少新的特性,加了不少數據組件,后來感覺ASP.NET
開發web服務這么簡單,于是突發奇想:我何不用c#和flash做一個播放器呀。下面介紹一下簡單的原理。
用c#寫一個web服務,把一個指定目錄的.mp3文件都羅列出來(主要用System.IO里的一些成員),并添加到一個ArrayList里面,最后把這個ArrayList以Web服務的形式向外發布出去。然后用Flash MX 2004新建一個Flash文檔,用WebServiceConnector組件獲取剛剛發布的Web服務,然后把返回的結果綁定到Flash的List組件上,最后呢,在List組件上加一個行為,讓它雙擊的時候播放雙擊的mp3文件。
一、 開發web服務
具體代碼如下,很簡單,不再多說,web服務開發我們都很熟悉了,別說這么簡單的一個例子了。這里是在站點根目錄下新建一個mp3文件夾,然后往里面放一些MP3文件,最后可以預覽
測試這個web服務,預覽的地址具體跟你建立的虛擬目錄路徑有關,我的如下。
http://onlytiancai/bak/flashmp3/mp3services.asmx
<%@ Webservice Language="C#" class="mp3Service" %>
using System;
using System.Collections;
using System.Web.Services;
using System.IO;
public class mp3Service : System.Web.Services.WebService
{
public mp3Service()
{
}
[WebMethod]
public ArrayList GetMp3()
{
ArrayList mp3List =new ArrayList();
string mp3path = Server.MapPath("mp3");
try
{
DirectoryInfo di = new DirectoryInfo(mp3path);
FileInfo[] fi = di.GetFiles();
foreach (FileInfo fiTemp in fi)
{
if(fiTemp.Extension.ToLower() == ".mp3"||fiTemp.Extension.ToLower() == ".wma")
{
mp3List.Add(fiTemp.Name);
}
}
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
return mp3List;
}
}
二、 開發Flash客戶端
打開Flash新建一個Flash文檔,然后按Ctrl+Shift+F10打開web服務面板,點擊左邊的添加web服務圖標,把第一步咱們開發的web服務地址添加上,如下。
添加成功后,web服務面板如下圖。
從組件面板了拖一個list組件放到場景中去,并在屬性面板里把它命名為mp3list,右鍵點擊mp3list組件,選擇【任意變形】,拖放到適當的大小。再拖放一個Button組件放在mp3list下面,取名叫submit,在組件檢查器里把submit按鈕的label屬性設置為“獲取音樂列表”。然后調整影片大小為250*400大小,最后效果如下。
打開web服務面板,右鍵點擊GetMp3()方法,選擇添加方法調用,然后就會在場景里面自動添加一個web服務實例,選中它,在屬性里命名為mp3serivice。保持mp3serivice選中狀態,打開【組件檢查器】面板,切換到綁定標簽,點擊面板左上角的加號圖標,選中results:Array,點擊確定。然后選中綁定標簽里的results,雙擊下面的bound to,在【綁定到】對話框里選擇mp3list組件,點擊確定。最后如下圖
選中submit按鈕,按Shift+F3按鈕,調出【行為面板】,點擊面板左上角的加號圖標,選擇【數據】=》【觸發數據源】,在彈出的【觸發數據源】對話框里選擇mp3serivice,點擊確定按鈕。
這時候會自動在submit的動作面板里添加如下代碼。
on (click) {
// Trigger Data Source Behavior
// Macromedia 2003
this._parent.mp3serivice.trigger();
}
選中mp3list組件,在行為面板里添加行為,依次選擇【聲音】=》【加載mp3流文件】,在彈出的對話框里的【輸入要加載的.mp3文件的URL】文本框里輸入http://onlytiancai/bak/flashmp3/mp3,然后下面的實例名稱里隨便輸入一個例子叫mp3,最后確定,如圖。
保持mp3list選中,打開【動作面板】我們要稍微修改一下生成的代碼,把最后一句的_global.Behaviors.Sound.mp3.loadSound("http://onlytiancai/bak/flashmp3/mp3",true);修改成_global.Behaviors.Sound.mp3.loadSound("http://onlytiancai/bak/flashmp3/mp3/"+this.selectedItem,true);最后mp3list組件的動作代碼如下。
on (change) {
//Load Streaming mp3 behavior
if(_global.Behaviors == null)_global.Behaviors = {};
if(_global.Behaviors.Sound == null)_global.Behaviors.Sound = {};
if(typeof this.createEmptyMovieClip == ’undefined’){
this._parent.createEmptyMovieClip(’BS_mp3’,new Date().getTime()-(Math.floor((new Date().getTime()) /10000)*10000) );
_global.Behaviors.Sound.mp3 = new Sound(this._parent.BS_mp3);
} else {
this.createEmptyMovieClip(’_mp3_’,new Date().getTime()-(Math.floor((new Date().getTime()) /10000)*10000) );
_global.Behaviors.Sound.mp3 = new Sound(this.BS_mp3);
}
_global.Behaviors.Sound.mp3.loadSound("http://onlytiancai/bak/flashmp3/mp3/"+this.selectedItem,true);
}
好了,Ctrl+Enter,測試一下你做的flash mp3播放器吧。怎么樣,測試成功的話Ctrl+Alt+Shift+S導出影片,這就成了。我在mp3目錄里放了幾首歌兒,測試了一下,雙擊歌曲的名稱就能播放歌曲了,以后把想要聽的歌兒放到那個目錄里就行了,如圖。
改進:
這是一個簡單的演示,flash mx 2004里還有一些媒體播放控制的組件,如果配合這些組件改進一下這個播放器就可以控制mp3的音量,播放進度,還可以讓它支持更多的聲音格式等,還有一點兒就是,我們開發的web服務也很簡單,你可以擴展一下,增加一些搜索,收藏歌曲等功能,可以以次開發一個網站,用a
clearcase/" target="_blank" >ccess做后臺
數據庫,用戶注冊登陸后可以把收藏的歌曲放入到自己的私人數據庫,以后調出來就能聽了。還有就是你可以把音樂單獨弄成
windows media server以流媒體的形式發布,這樣就可以讓你的應用程序有更強的
性能和可伸縮性,因為你可以單獨在另一臺
服務器上提供流媒體服務,對吧。
小結:
其實我感覺ASP.NET是最高效的服務段技術,而flash是表現力最強的客戶端表現技術,我
下載了Flash Remoting裝上了,一看是英文的我就不想測試了。利用它們的優點來開發出的應用程序在用戶體驗上有很大的改進,所以它們之間簡直就是絕配。雖然微軟的Smart Client技術也可以有效增強用戶體驗,但是以flash為代表的RIA技術表現也非常的不俗,至少可以和Ajax相媲美吧。
原文轉自:http://www.kjueaiud.com