前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇媒體播放范文,相信會為您的寫作帶來幫助,發現更多的寫作思路和靈感。
【關鍵詞】多媒體;API函數;VB;播放器
1.引言
多媒體技術是一種把文本(Text)、圖形(Graphics)、圖像(Images)、動畫(Animation)和聲音(Sound)等形式的信息結合在一起,并通過計算機進行綜合處理和控制,能支持完成一系列交互式操作的信息技術。多媒體技術的發展改變了計算機的使用領域,使計算機由辦公室、實驗室中的專用品變成了信息社會的普通工具,廣泛應用于工業生產管理、學校教育、公共信息咨詢、商業廣告、軍事指揮與訓練,甚至家庭生活與娛樂等領域。
多媒體播放器的設計是一門集計算機技術和數字多媒體技術于一體的綜合設計。隨著中國計算機技術、寬帶網絡技術的發展,越來越多的人開始重視多媒體播放器的發展與應用。
2.系統的規劃與研究
播放器的開發階段有設計、編碼和測試3個基本活動組成,其中,“設計階段”是獲取高質量、易維護系統的一個最重要環節。采用任一種軟件設計方法都將產生系統的總體結構設計、系統的數據設計和系統的過程設計,如圖1所示,描述了播放器開發過程的信息流程。
3.播放器的設計與實現
利用Visual Basic 中的Windows Media Player控件開發Windows下的多媒體應用程序是一種方便簡單的方法。
播放器的主界面,遵照界面簡潔、操作簡單、人性化的原則進行設計。主要包括播放控制主界面的設計、視頻顯示區域的設計即可視化界面的設計、播放列表界面的設計、相關信息顯示區域的設計等。
媒體播放器主要的功能是播放音頻文件和視頻文件兩種,音頻播放主要實現對目前常用的音頻文件進行播放,如:mp3、wav、mid、rmi、midi、au等等??梢酝瓿刹シ帕斜韺牒捅4?、文件打開和播放信息顯示等功能。
視頻播放主要實現對常用的視頻文件進行播放,如:avi、mpeg、rm、rmvb等等??梢詫崿F可視化窗口的全屏幕播放和原始大小播放、可視效果切換等功能。
另外,播放器在實現視頻全屏幕播放后,沒有用原有的控制對象標志,而是將它在屬性欄中隱藏了。其按鍵功能由播放控制面板命令按鈕來實現,控制按鈕上顯示功能漢字信息,在命令按鈕事件中,實質上是調用Windows Media Player控件中屬性的各項功能。圖2為播放器的功能模塊圖。
4.總結
該設計關鍵采用了VB 6.0環境中的Windows Media Player控件,可以播放Windows Media Player所支持的文件格式,包括音頻文件、視頻文件、動畫等,如不能播放視頻文件,需要安裝相應的解碼器,如Real Codec Pack等。與其它播放播放器相比,該播放器具有支持格式多樣、界面美觀、功能齊全、占用空間小的特點。與現有多媒體資源應用狀況緊密結合,既具有很強的直觀感,又不失一般性。
參考文獻
[1]彭波,孫一林.多媒體技術應用[M].北京:機械工業出版社,2006:1-21.
[2]趙子江.多媒體技術應用教程[M].北京:機械工業出版社,1957:1-18.206-207.
[3]陳明.多媒體技術與應用[M].北京:清華大學出版社,2004:5-10.
[4]洪錦魁.精通Visual Basic 6.0中文版[M].北京、廣州、上海:世界圖書出版社,2000.
[5]劉炳文.Visual Basic圖形與多媒體程序設計[M].北京:清華大學出版社,2002:5-28.
[6]魏江江,林少景.Visual Basic API編程百例通[M].北京:科學出版社,2001.
[7]譚浩強,薛淑斌,袁玫編著.Visual BASIC程序設計[M].北京:清華大學出版社,2000:256-266.
[8]高智勇.Visual BASIC 6.0實例教程[M].北京:航空工業出版社,2000.
[9]Michael Halvorson.Visual Basic6學習指南[M].北京:機械工業出版社,1999.
[10]劉炳文.精通Visual Basic 6.0中文版[M].北京:電子工業出版社,1999.
關鍵詞: 流媒體; JSP; Html5; Chrome瀏覽器; 視頻控制
中圖分類號:TP37 文獻標識碼:A 文章編號:1009-3044(2016)18-0191-03
Design and Implementation of Playing Streaming Media Based On JSP
YANG Zi-xiang,LIN Peng
(Tianjin Open University, Tianjin 300191, China)
Abstract: With the development of Internet, playing web video is more and more on web. However, if playing the video through the HTML5 or the Html tag, then dragging and dropping the video only after the completion of the video completely downloaded before using. Through research and analysis principles of streaming media server of Windows Media Services, and research Http package of Chrome browser, the paper successfully devised playing streaming media with JSP program. By publishing program on Tomcat, users can drag and drop the video during playback, successfully resolving the problem of the HTML5 or the Html tag with not drag.
Key words:Streaming Media; JSP; Html5; Chrome browser; Video Control
1 概述
隨著Internet的發展,網頁視頻播放的使用越來越多。因此,視頻播放的用戶體驗也越來越實用;視頻的播放、暫停、定點播放等操作的需求也就越來越大,而且也更符合用戶實際瀏覽視頻的要求。但是,目前如果直接通過HTML5的或者Html的標簽播放視頻的話,視頻的拖拽功能只有在視頻完全下載完成后才能使用。這就會加大服務器的壓力,因此越來越多的用戶開始使用流媒體。
所謂流媒體是指采用流式傳輸的方式在Internet播放的媒體格式。流媒體又叫流式媒體,它是指商家用一個視頻傳送服務器把節目當成數據包發出,傳送到網絡上。用戶通過解壓設備對這些數據進行解壓后,節目就會像發送前那樣顯示出來。流媒體的出現極大地方便了人們的工作和生活。目前,使用流媒體的話都會通過流媒體服務器(比如Windows Media Services等)來搭建流媒體平臺[1-4]。
JSP作為一種網頁開發語言,在網站的開發中使用者的比例很大;因此,使用JSP開發的網站對視頻播放的需求也會越來越多。但是,如果直接通過JSP后臺平臺結合HTML5的標簽進行視頻播放的話,就會出現網頁中視頻無法拖拽,從而不能實現定點播放等功能。所以,通過JSP語言實現視頻的流媒體播放對于JSP網站來說,不僅可以省去借助流媒體服務器的煩惱,而且可以實現在線視頻播放的隨意控制,從而滿足用戶的實際需求。
2 基于流媒體服務器的網頁播放探究
流媒體服務器的使用,解決了視頻播放過程中,直接訪問網絡視頻資源導致的視頻拖拽問題。因此,流媒體服務器的網頁視頻資源的訪問方式對于本文的設計來說,具有很大的價值。Windows Media Services作為一種流媒體服務器,是Windows Server服務器系統中使用頻率很高而且性能很好的流媒體服務器。本文通過Chrome瀏覽器訪問Windows Media Services中視頻資源的流程研究發現,在視頻拖拽的控制中,Chrome瀏覽器都會發送Http請求包;Windows Media Services接收到瀏覽器的請求后,再根據Http中包含的內容返回相應的視頻片段。具體的流程如圖1所示。
如圖1中流媒體視頻在Chrome瀏覽器和Windows Media Services流媒體服務器之間的交互可以看出,無論視頻的播放還是中間視頻播放控制,都是Chrome發送Http包進行控制;而Windows Media Services流媒體服務器則是負責對視頻片段的返回。因此,本文使用Chrome瀏覽器訪問對已經在Windows Media Services流媒體服務器中的視頻,通過Chrome瀏覽器中的Network網絡工具,對Http包進行抓取。圖2中顯示的是視頻點擊開始播放后,即視頻從頭開始播放,抓取的Http請求包的頭文件內容。圖3和圖4中顯示的則是視頻播放過程中點擊視頻任意位置后,抓取的Http請求包的頭文件內容。
3 基于JSP的在線流媒體播放的實現
在第二節中,本文通過Chrome的Http包的追蹤功能,截取了視頻在播放控制過程中不同播放位置請求的包。通過圖2、圖3和圖4的追蹤結果可以看到他們的Request Headers以及Response Headers中的部分頭文件字段是不同的,具體的信息比較如表1所示。
由表1中可以看到,三個圖中的Http包中只有Range、Content-Range字段是不同的,其他的字段的內容根本就沒有發生變化。其中,Range是Request Headers中的字段,Content-Range是Response Headers中的字段。在表1中還可以發現,Content-Range字段的內容和Range字段的內容有一定的關系;Content-Range內容中“-”前的數值和Range是一致的。同時,在表1中也可以發現,Content-Range字段和Content-Length字段有一定的關系;Content-Range內容中“/”后的數值和Content-Length是一致的。我們知道,Http包中的Content-Length的作用主要是記錄文件的長度,因此可以在服務器端通過程序求出文件的大小。
由于Http包中的Request Headers是由瀏覽器進行發出并封裝的,因此本文的程序無法控制包中的Request Headers內容。但是,Http包中的Response Headers是由服務器封裝后返回給瀏覽器的;因此,本文的程序設計將會根據Http包中的Request Headers字段內容,對Http包中的Response Headers字段進行封裝返回給服務器。根據以上的分析,本文通過JSP進行程序設計如下:
@RequestMapping(value = { "/videos/{path}" })
public String displayVideo(HttpServletRequest request,
HttpServletResponse response, @PathVariable String path) {
try {String filePath = videoDir + path + ".mp4";
File file = new File(filePath);
if (!file.exists()) {
response.sendError(404);
LOG.error("未找到文件" + file.getCanonicalPath());}
Long fileLength = file.length();
LOG.debug("文件找到了,大小為" + fileLength);
String range = request.getHeader("range");
if (range != null && !range.equals("")) {
LOG.debug("請求的名字是range,內容是" + range); }
Long startPos = 0l;
if (range != null && !range.equals("")) {
Pattern pattern = Pattern
.compile("^bytes\\=(\\d+)(?:\\-(\\d+)?)?$");
Matcher matcher = pattern.matcher(range);
LOG.debug(matcher.matches());
startPos = Long.parseLong(matcher.group(1), 10);
LOG.debug("成功截獲range,開始位置是" + startPos);
response.setStatus(206);
} else {
response.setStatus(200);
LOG.debug("從頭開始傳送");}
InputStream is = new FileInputStream(file);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
response.addHeader("Content-Range", "bytes " + startPos + "-"
+ (fileLength - 1) + "/" + fileLength);
response.addHeader("Content-Length", fileLength.toString());
response.setCharacterEncoding("UTF-8");
response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "bytes");
is.skip(startPos);
int length = is.read(buffer);
while (length > 0) {
os.write(buffer, 0, length);
length = is.read(buffer); }
os.flush();
os.close();
is.close();
} catch (Exception err) {
if (err.getClass()
.getName()
.equals("org.apache.catalina.connector.ClientAbortException")) {
LOG.debug("客戶掛斷了");
} else {
err.printStackTrace();}}
return null; }
在本文的程序設計中,瀏覽器的視頻請求URL路徑的后端是通過JSP中的Spring框架進行控制,在路徑中的/videos/{paths}即是視頻路徑存儲在磁盤的相對位置;在程序中,視頻的讀取并沒有經過中間的流媒體服務器,而是直接讀取在磁盤中的視頻文件。經過程序在Tomcat7上測試之后,視頻在播放的過程中,用戶可以根據需求隨意拖拽,解決了Html5中標簽不能播放的問題。具體的如圖5所示,圖中顯示的是程序后視頻隨意播放截取的Http包。經比較,與文中的圖3、圖4中間播放的Http包的內容是相似的,實現了流媒體播放的效果。
4 結論
本文通過分析Windows Media Services流媒體服務器中視頻拖拽播放控制過程中,Chrome瀏覽器發送的Http包的信息,得出了瀏覽器播放視頻時播放控制和Http包中Request Headers、Response Headers頭文件的關系。并且,本文通過JSP程序語言的設計,成功實現了流媒體服務器控制視頻播放的原理。本文設計的程序到Tomcat后,經過該程序訪問的視頻都可以在瀏覽器端隨意拖拽播放視頻,解決了Html5的標簽不能直接播放服務器磁盤中視頻的弊端,也省去了流媒體服務器視頻的任務。
參考文獻:
[1] 蔣太杰. Windows Media Services及其在遠程教育中的應用[J]. 指揮技術學院學報, 2001, 12(6): 81-85.
[2] 王雪婷, 于勇. Windows Media Services流媒體技術與實現[J]. 信息技術與信息化, 2006(1): 51-53+64.
1、在“初始化”圖標窗口中初始化所用變量,輸入如下:
startframe:=1
endframe:=1
2、“電影”圖標的設置。雙擊此圖標,出現的屬性窗口設置如下:
1) Concurrency選項設置為“Concurrent”,其作用是在運行電影圖標的同時運行下面的交互圖標,以激活控制按鈕。
2) Play選項設置為“Fixed Number of Times”,并在下面的輸入框中輸入1,作為播放的次數。
3) 在Start Frame中輸入變量“startrame”,在End Frame中輸入變量“endframe”。由于這兩個變量初值都是1,運行時電影會靜止在第一幀,播放則由下面的按鈕控制。
3、按鈕響應的設置。分別雙擊交互圖標右側的五個按鈕響應標志,在打開的屬性窗口中,選中“Perpetual”,Branch選項設為“Return”,并適當調整五個按鈕的位置和大小。
4、各種控制的實現。
1) 在“從頭播放”圖標中輸入:
startframe:=1
endframe:=MediaLength@"電影"
MediaPlay(IconID@"電影")
其中系統變量MediaLength作用是返回指定數字電影的長度。
2) 在“暫停播放”圖標中輸入:
MediaPause (IconID@"電影",True)
函數MediaPause 用來暫停一個媒體文件的播放。
3) 在“繼續播放”圖標中輸入:
startframe:=MediaPosition@"電影"
endframe:=MediaLength@"電影"
MediaPlay(IconID@"電影")
系統變量MediaPosition用來指示媒體文件播放到的當前位置。
4) 在“逐幀向后”圖標中輸入:
startframe:=MediaPosition@"電影"
endframe:= MediaPosition@"電影"+1
MediaPlay(IconID@"電影")
5) 在“逐幀向前”圖標中輸入:
startframe:=MediaPosition@"電影"
endframe:= MediaPosition@"電影"-1
關鍵詞:移動互聯網 iOS系統 流媒體 軟件設計
中圖分類號:TN919.8 文獻標識碼:A 文章編號:1007-9416(2012)12-0116-01
流媒體主要是指在互聯網中,對播放的媒體格式采用流式傳輸的方式進行傳播。移動流媒體技術的應用,實現了在移動設備上進行視頻播放的功能。隨著互聯網技術和智能手機的盛行,流媒體技術在智能手機中的運用,滿足了消費了移動互聯的需求,此時的智能手機在操作系統方面也呈現出多樣化的發展,其中iPhone OS系統成為最受歡迎的系統之一,其軟件數量的增長速度非常快。
1、iPhone OS系統平臺及開發工具
iPhone OS也稱之為iOS,是蘋果公司專門為iPhone所開發的一款操作系統,在蘋果系列產品中陸續套用,該系統最大的優勢在于人機操作及UI設計非常優秀,攜帶軟件種類比較豐富。
1.1 系統架構
iOS系統主要分為四個部分:核心操作系統層、核心服務層、媒體曾及可輕觸層。核心操作系統層位于系統架構的最底層,包括文件系統、電源管理、內存管理及一些操作系統個任務,能與硬件設備直接進行交互。核心服務層的作用是輔助訪問iPhone OS系統。媒體層的作用是通過它來實現各種媒體文件在應用程序中得以使用,可以進行視頻和音頻的錄制,繪制圖形及制作簡單的動畫等??奢p觸層位于最上層,為應用程序提供各種有用框架,大部分和用戶界面相關,實質上就是對設備上的觸摸交互操作進行控制。
1.2 開發工具
在進行iOS系統開發中,蘋果公司主要采用iPhone SDK開發工具包,在標準C++編程語言基礎上,通過該軟件翻譯為Objective-C語言,這種語言是蘋果標準語言,然后編譯為iPhone軟件格式。蘋果公司為開發人員還提供集成開發環境Xcode,主要用于iPhone應用程序,該開發工具屬于一條龍式的應用程序,可以用作構建應用、代碼編輯及程序調試等,是一種快捷的方式,該工具也可以進行輔助開發影城程序、數據庫、工具、嵌入包及驅動程序等。此外,iOS開發工具中,最重要的一個工具就是iPhone模擬器,是一種重要的測試應用程序工具。
2、流媒體播放器軟件設計
從iPhone,iPad等移動設備的實際應用中,蘋果公司對實現流媒體技術開發了HTTP Live Streaming協議。在該協議中,音頻、視頻文件均有服務器提供給客戶端。所以,該軟件系統的結構主要分為服務器端與客戶端。
2.1 系統服務器端設計
該協議技術的服務器組成包含兩個部分:編碼器與流分割器。其主要能使對輸入的視頻或者音頻媒體內容進行編碼,封裝為適合的內容格式進行傳送。編碼器的主要作用是對輸入的視頻、音頻文件采用H.264標準進行編碼,然后采用MPEG-2輸出,流分割器軟件將文件分割為等間隔的片段,保存成.ts文件。分割器完成后,都會生成一個新媒體文件,通過索引文件進行地質的跟蹤與查找,可以通過對分割文件進行加密處理。
2.2 系統客戶端設計
通過iPhone OS平臺設計,視頻模塊通過流媒體播放器對網站中的資源進行播放。通過流媒體播放器,用戶能夠之間觀看到網站中的視頻,還可以進行分享。其中,視頻模塊主要包含以下頁面:
(1)熱門視頻播放列表。直接在主頁面上點擊“視頻”,系統就會進入到熱門視頻播放列表,表示當前網站最熱門的視頻,列表將視頻的主要信息呈現出來,橙色字體為視頻標題。點擊任意一行即可進入視頻介紹頁面。點擊“返回”即可退回主頁面。點擊右上角“刷新”,可以對當前頁面進行刷新。
(2)同類視頻播放列表。視頻列表對所有的視頻全部通過分類列出,選中任意類別即可進入到該類視頻播放列表,與熱門視頻播放列表相同,每一行都對視頻主要信息進行羅列,進入視頻播放頁面及返回上一列表的方法都是相同的。不同的是這部分增設了分頁功能,如果視頻數量過多,無法在一頁顯示,則可以點擊列表最后一行的“更多”進行查看。
(3)視頻簡介頁面。不管是在熱門視頻列表或者是分類視頻列表中選中任意一個視頻以后,即可進入到簡介頁面,橙色字體是視頻的標題,黑色字體為視頻內容簡介。點擊右下角“播放”就可以觀賞視頻。如果通過簡介對該視頻沒有興趣,可以返回上一層,重新選擇,如果喜歡該視頻,并且想與朋友一起分享,可以點擊“分享”,將視頻鏈接到微博中。
(4)視頻播放界面。點擊“播放”就可以對視頻進行觀看,也就進入到了視頻播放界面。如果對正在播放的畫面進行點擊,就可以對播放運行的狀態進行控制,包含暫停、播放、快進、快退等,通過右上角的“完成”實現對視頻播放的控制,此外,還可以實現全屏播放。
(5)視頻分享界面。進行視頻分享的時候,點擊”分享”即可進行分享界面??梢赃x擇所要分享到的地址,通過授權然后登陸地址以后進行分享,視頻就可以分享到該鏈接地址。不管是要分享到何處,所要采取的操作原理都是一樣的,如果不想分享,直接點擊取消就可以返回到視頻簡介頁面。
3、結語
隨著網路技術的飛速發展,移動通信行業真正的步入了移動信息的時代,智能手機的普及,使應用軟件呈現出多樣化的發展趨勢。流媒體播放器軟件屬于諸多應用程序中的一種,盡管與PC產業還有一定的差距,但其發展速度驚人,必定會在不久的將來迎頭趕上。
參考文獻
[1]施佳子.iPhone平臺移動流媒體播放器的實現與優化[J]. 華中科技大學,2009(1).
[2]葉汝軍,丁建峰.虛擬存儲技術在流媒體管理系統中的應用[J].黑龍江科技信息,2008(25).
關鍵詞:ActiveX;外部函數;菜單;按鈕;滑塊;播放器
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)11-20329-03
1 前言
Authorware作為一種主要面向非程序員的優秀的交互式多媒體創作工具,為了滿足一些高級設計人員進行復雜程序創作的需要,Authorware從4.0版本開始提供了對ActiveX控件和外部函數的支持,由于有許多軟件廠商支持ActiveX技術,所以大多數功能都能找到相應的ActiveX控件。在Authorware中,通過調用ActiveX控件來直接使用現成的程序模塊,可省掉許多繁瑣的編程,而且幾乎可以完成任何工作。
目前,媒體播放器越來越追求個性化,為了滿足個性化的需求,我們可以借助圖形圖像處理軟件使播放界面個性化,在Authorware 7.0中利用控件以及外部函數能設計出播放各種媒體的個性化播放器。在設計視頻播放控制時,要注意播放、暫停、繼續、停止、快進、后退等操作的激活條件,進度滑塊及音量滑塊能及時地響應交互。在Authorware 7.0中設計的媒體播放器運行界面如圖1所示。
2 ActiveX控件的應用
ActiveX控件通常以動態鏈接庫的形式存在,其設計思想是將一個程序嵌入到另一個程序中,這樣就可使它能夠隨意地應用到各種場合。ActiveX控件的數據輸入和函數功能執行都必須通過容器,因此ActiveX控件和容器之間必須有一些特定的接口協議。ActiveX控件必須具備屬性(property)、方法(method)和事件(event),通過屬性的名稱、方法的名稱及參數,容器可以存取和改變ActiveX控件的屬性參數。通過事件,比如屬性參數的改變、用戶按下鼠標左鍵等,ActiveX控件通知容器進行響應相關操作。
2.1 ActiveX控件的安裝
在開發Authorware的應用程序時,如果利用了ActiveX控件,在打包時要注意兩點:(1)在用戶的應用程序中需附帶上所需的支持文件,即在應用程序的“Xtras”目錄里附帶上Activex.x32,因為只有這樣應用程序才能夠正常地執行,否則程序中的ActiveX控件是無法使用的。但是需要注意的是打包程序無須附帶上Actxpriv.x32,否則會造成不可預料的后果,因為它主要負責設計時利用ActiveX控件的界面。(2)要將所需的ActiveX控件相關文件(*.OCX或*.DLL)復制到硬盤相應的文件夾中(Windows NT以后的操作系統是%systemroot%\system32),本播放器應用程序在設計時需要復制MSDXM.OCX、COMDLG32.OCX、FM20.DLL、FM20CHS.DLL四個文件,然后將其在Windows系統中注冊。
2.2 ActiveX控件的注冊
設計Authorware應用程序時,如果要使用Authorware沒有提供的控件,使用前要先在Windows中進行手動注冊。如果我們的程序中使用了控件且要交給用戶使用,在程序中應先檢測用戶機中是否注冊了該控件,若沒有就要進行自動安裝、自動注冊。本播放器使用時需要檢測Microsoft Forms 2.0 ScrollBar、Microsoft Common Dialog Control和Windows Media Player三個控件,以便確定是否要安裝、注冊。
注冊的方法有兩種:
(1)手動注冊
方法:先將所需的ActiveX控件相關文件(如MSDXM.OCX、COMDLG32.OCX、FM20.DLL、FM20CHS.DLL)復制到硬盤相應的文件夾中(Windows NT以后的操作系統是%systemroot%\system32)。然后手動注冊,即單擊Windows的“開始”菜單,選擇“運行”命令,在打開的對話框中輸入以下命令: regsvr32.exe,如regsvr32.exe MSDXM.OCX。
regsvr32.exe是Windows自帶的ActiveX注冊工具,可以在Windows的系統目錄中找到。
(2)自動注冊
方法:利用Authorware 中的Xtra ActiveX 里的函數來進行注冊。對ActiveX控件注冊的格式如下: ActiveXControlRegister("")。
本播放器應用程序使用了三個控件,圖2是媒體播放器設計窗口。
圖標FileDialog負責打開文件,用的是Microsoft Common Dialog Control控件;圖標VolumeBar負責音量調節,圖標PositionBar負責進度處理,兩者用的是同一種控件Microsoft Forms 2.0 ScrollBar;圖標MediaPlay負責媒體播放,用的是Windows Media Player控件。在計算圖標Register中設置程序進行自動檢測、安裝和注冊,程序如下:
――獲取三個控件的classID
classIDScrollBar:="{DFD181E0-5E2F-11CE-A449-00AA004A803D}"
classIDDialog:="{F9043C85-F6F2-101A-A3C9-08002B2F49FB}"
classIDMediaplay:="{22D6F312-B0F6-11D0-94AB-0080C74C7E95}"
――獲取系統文件夾
WindowsPath:=getosdirectory()
――判斷當前系統是否支持控件注冊
if ActiveXInstalled()=-1 then
――判斷Microsoft Forms 2.0 ScrollBar滾動條控件是否已安裝
if ActiveXControlQuery(classIDScrollBar)=0 then
――拷貝FM20.DLL和FM20CHS.DLL兩個文件到系統目錄
CopyFile(FileLocation^"FM20.DLL",WindowsPath^"\\system32\\FM20.DLL")
CopyFile(FileLocation^"FM20CHS.DLL",WindowsPath^"\\system32\\FM20CHS.DLL")
――注冊Microsoft Forms 2.0 ScrollBar滾動條控件
ActiveXControlRegister(WindowsPath^"\\system32\\FM20.DLL")
end if
――判斷、注冊Microsoft Common Dialog Control,version 6.0通用對話框控件
if ActiveXControlQuery(classIDDialog)=0 then
CopyFile(FileLocation^"COMDLG32.OCX",WindowsPath^"\\system32\\COMDLG32.OCX")
ActiveXControlRegister(WindowsPath^"\\system32\\COMDLG32.OCX")
end if
――判斷、注冊Windows Media Player 6.4控件
if ActiveXControlQuery(classIDMediaplay)=0 then
CopyFile(FileLocation^"MSDXM.OCX",WindowsPath^"\\system32\\MSDXM.OCX")
ActiveXControlRegister(WindowsPath^"\\system32\\MSDXM.OCX")
end if
end if
3 彈出式菜單
現在許多播放器都有彈出式菜單功能,如在圖1中的MENU按鈕上單擊時會出現有“打開文件”、“全屏播放”和“退出”三個子菜單項的菜單,且單擊某個子菜單項時執行相應操作。其設計原理是創建菜單、激活菜單、響應子菜單項。
3.1 創建菜單
計算圖標BuildMenu中的程序負責創建菜單,mCreatePopupMenu()、mAppendMenu( Menu, Flags , MenuID , MenuText )、mMenuHookOn( WindowHandle )函數都置于外部函數budmenu.u32中,使用時需載入到Authorware中,程序如下:
――選擇的菜單項的ID的初值
LastMenuID := -1
――添加一個filename主菜單項
filemenu := mCreatePopupMenu()
mAppendMenu( filemenu , 0 , 10 , "打開文件")
mAppendMenu( filemenu , 0 , 11, "全屏播放")
mAppendMenu(filemenu,2048,0,"")
mAppendMenu( filemenu , 0 , 12 , "退出")
――設置與Authorware通信的消息鉤子
mMenuHookOn( WindowHandle )
3.2 激活菜單
為了確保交互靈活,按鈕響應MenuActivation的響應需設為永久、返回,該響應包含的兩個計算圖標FileMenuTrack和ReturnLastMenuID的順序不可顛倒。
(1)計算圖標FileMenuTrack的程序為:
――激活菜單
mTrackPopupMenu(filemenu,0,ResponseLeft@“MenuActivation”+WindowLeft,ResponseTop@“MenuActivation”+ResponseHeight@“MenuActivation”+WindowTop,0,WindowHandle,0 )
(2)計算圖標ReturnLastMenuID的程序為:
――獲取最后選擇的菜單項的ID
LastMenuID := mGetLastMenuID()
Checked@"MenuActivation" := FALSE
3.3 響應子菜單項
根據獲取的最后選擇的子菜單項的ID 值來執行相應的響應為永久、返回的條件響應:LastMenuID=10 、LastMenuID=11和LastMenuID=12,從而實現文件打開、全屏播放和退出。
(1)計算圖標LastMenuID=10的程序為:
――打開文件
SetSpriteProperty(@"FileDialog", #dialogtitle, "請選擇一個視頻文件:")
SetSpriteProperty(@"FileDialog", #BaseURL, FileLocation)
SetSpriteProperty(@"FileDialog", #filter, "視頻文件|*.mpg;*.avi;*.mpeg;*.dat;*.asf")
CallSprite(@"FileDialog", #showopen)
getFile:=GetSpriteProperty(@"FileDialog", #FileName)
SetSpriteProperty(@"MediaPlay", #FileName,getFile)
SetSpriteProperty(@"MediaPlay",#displaysize,4)
CallSprite(@"MediaPlay",#play)
LastMenuID:=-1
(2)計算圖標LastMenuID=11的程序為:
――設置為全屏播放
SetSpriteProperty(@"MediaPlay",#displaysize,3)
LastMenuID:=-1
3)計算圖標LastMenuID=12的程序為:
――退出
mMenuHookOff()
mDestroyMenu(filemenu)
Quit()
4 按鈕控制
4.1 按鈕激活條件
在設計按鈕控制時,要合理設置播放(從頭開始)、暫停、繼續、停止(回到開頭)、快進、后退等按鈕的激活條件,文件沒打開所有按鈕應不可用,播放時繼續按鈕應處于隱藏狀態,暫停時停止按鈕不可用但繼續按鈕激活,停止時暫停按鈕不可用且繼續按鈕隱藏,視頻正常播放結束時暫停、停止、快進不可用且繼續隱藏。
4.2 程序設置
為了實現上述要求,在設計時每一個按鈕交互都要從兩方面考慮:激活條件和程序內容。
play:激活條件為playfile"",計算圖標內容為:
SetSpriteProperty(@"MediaPlay", #CurrentPosition,1)
CallSprite(@"MediaPlay", #Play)
pause:激活條件為(playstate=2)&(CurrentPosition
CallSprite(@"MediaPlay", #Pause)
resume:激活條件為(playstate=1)&(CurrentPosition
CallSprite(@"MediaPlay", #Play)
stop:激活條件為(playstate=2)&(CurrentPosition
SetSpriteProperty(@"MediaPlay", #CurrentPosition,1)
CallSprite(@"MediaPlay", #stop)
fastforward:激活條件為CurrentPosition
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=GetSpriteProperty(@"MediaPlay", #CurrentPosition)
if CurrentPosition
NewPosition:=CurrentPosition+15
else
NewPosition:=Duration
end if
SetSpriteProperty(@"MediaPlay", #CurrentPosition,NewPosition)
CallSprite(@"MediaPlay", #play)
fastreverse:激活條件為CurrentPosition>1,計算圖標內容為:
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=GetSpriteProperty(@"MediaPlay", #CurrentPosition)
if CurrentPosition>15 then
NewPosition:=CurrentPosition-15
else
NewPosition:=0
end if
SetSpriteProperty(@"MediaPlay", #CurrentPosition,NewPosition)
CallSprite(@"MediaPlay", #Play)
5 滑塊控制進度及音量
5.1 滑塊作用
拖動水平滑塊,調整文件播放進度,且滑塊在水平滾動條上的位置與文件當前進度的百分比一致。拖動垂直滑塊,調整音量大小,且滑塊在垂直滾動條上的位置與系統音量大小的百分比一致。
5.2 事件響應設置
在兩個事件響應BarSetMaster和BarSetPosition中,響應都設為永久、返回,事件響應BarSetMaster的事件設為發送“圖標VolumeBar”的事件“Change”, 事件響應BarSetPosition的事件設為發送“圖標PositionBar”的事件“Change”。
(1)計算圖標BarSetMaster內容為:
volume:=GetSpriteProperty(@"VolumeBar",#value)
baSetVolume("master",100-volume)
(2)計算圖標BarSetPosition內容為:
position:=GetSpriteProperty(@"PositionBar",#value)
Duration:=GetSpriteProperty(@"MediaPlay", #Duration)
CurrentPosition:=position/100*Duration
SetSpriteProperty(@"MediaPlay", #CurrentPosition,CurrentPosition)
CallSprite(@"MediaPlay", #Play)
PauseFlag:=1
6 結束語
在Authorware中如果能夠合理地運用ActiveX控件和外部函數,個性化媒體播放器可以設計的非常完善,各種功能都能實現,即使是滑塊動態地顯示當前進度、播放狀態等也能較好地解決。
參考文獻:
[1] 畢廣吉.Authorware多媒體開發程序設計與典型實例[M].北京:人民郵電出版社,2004.