劉智濃+張永利+童子方
摘要:WMV作為微軟主推的一種流媒體數字視頻文件壓縮格式,在模擬仿真、虛擬現實和CAI等多媒體技術領域得到廣泛的應用。實例設計表明,在Authorware中通過設置ActiveX控件Windows Media Player的屬性,響應控件事件或調用控件方法等方式,在保證視頻播放流暢性和程序運行穩(wěn)定性的同時,可實現WMV數字視頻的個性化播放控制。
關鍵詞:ActiveX控件;Authorware; WMV;數字視頻;Windows Media Player
中圖分類號:TP37 文獻標識碼:A 文章編號:1009-3044(2016)10-0216-04
Abstract:WMV, regarded as one of the Microsoft Corporation's recommended products, is a sort of file compression format in streaming media digital video. It's been widely using in simulation, virtual reality, CAI and other multimedia technology. Case design shows that in Authorware, with the controls of Windows Media Player based on ActiveX control, we can make the WMV digital video playing personalized become true as well make the video playing smoothly and the programs running steadily by setting control properties.
Key words: ActiveX control; Authorware; WMV; digital video; Windows Media Player
1 概述
在模擬仿真、虛擬現實和CAI等領域的多媒體技術應用中,為達到生動、形象和逼真的效果,會大量使用錄像、三維動畫等視頻文件,為保證系統(tǒng)運行的實時性和流暢性,需要根據系統(tǒng)開發(fā)平臺和應用環(huán)境,對視頻文件的壓縮格式進行選擇。筆者在基于Authorware軟件開發(fā)某飛機的虛擬教學訓練系統(tǒng)時,通過播放效果、文件容量大小和系統(tǒng)兼容性等方面的綜合比較和實驗,最后選擇了WMV格式作為系統(tǒng)視頻文件的壓縮格式,并基于ActiveX控件Windows Media Player(簡稱WMP)實現了WMV數字視頻文件的個性化播放控制。
2 WMV數字視頻的特點
WMV它的英文全稱為Windows Media Video,是微軟推出的一種采用獨立編碼方式并且可以直接在網上實時觀看的數字視頻文件的壓縮格式。它的主要優(yōu)點包括:支持本地或網絡回放、可擴充的媒體類型、多語言支持、流的優(yōu)先級化以及擴展性等等。特別是在同等視頻質量下,WMV格式的文件體積非常小,很適合在網上播放和傳輸。而且作為微軟主推的標準視頻格式,在windows平臺的應用無需外部插件的支持。雖然Authorware軟件數字電影圖標不支持WMV格式的視頻文件,但可以通過ActiveX控件WMP來實現WMV格式視頻文件的播放和控制。使用WMP控件播放WMV格式的視頻文件時,既可以使用控件內嵌的播放器來實現暫停、音量、快進等標準播放控制。也可以通過設置控件的屬性,響應控件事件或調用控件方法等方式,來實現個性化的播放控制,增強系統(tǒng)人機交互功能[1] [2]。
3 Windows Media Player控件在Authorware中的使用方法
ActiveX控件是一種可重用的軟件組件,是一種嵌入式共享程序數據的編程技術。Authorware是Macromedia公司推出的功能強大的多媒體創(chuàng)作工具,它為創(chuàng)作者提供了一個基于流程圖和設計圖標的開發(fā)環(huán)境,具備多媒體素材的集成能力和超強的交互控制能力。Authorware從4.0版本開始支持ActiveX控件技術,并提供ActiveX Xtra函數來實現ActiveX控件屬性的設置或獲取、控件方法的調用以及控件事件的捕獲等功能,在增強多媒體應用程序功能的同時,擴充了多媒體應用程序可以處理的數據種類[3]。
3.1插入控件
在Authorware中使用某種ActiveX控件之前,必須保證該ActiveX控件在系統(tǒng)中進行了注冊。在Authorware中通常使用兩種方法對ActiveX控件進行注冊。一種是動態(tài)注冊,需通過在ActiveX控件屬性對話框中輸入控件的URL和版本號,如果設置正確,當程序執(zhí)行到包含該ActiveX控件對象的【Sprite】設計圖標時,會自動下載并向系統(tǒng)注冊ActiveX控件。另一種是函數注冊,Authorware提供了一系列函數用于ActiveX控件的注冊,如ActiveXControlRegister("FILENAME")函數,注冊文件名為“FILENAME”的ActiveX控件,成功則返回一1,否則返回0。由于微軟自Windwos XP開始把Windows Media Player作為系統(tǒng)內置的媒體播放器,所以只要微機操作系統(tǒng)的版本高于Windwos XP,就已保證了WMP控件在系統(tǒng)中進行了注冊[4]。
以Authorware7.0為例,介紹插入WMP控件的步驟。首先在流程線上您想要插入控件圖標的位置處單擊,然后在系統(tǒng)菜單上,選擇“插入”→“控件”→“ActiveX”,在彈出的“Select ActiveX Control”對話框中,選擇Windows Media Player后,單擊“OK”按鈕,彈出“ActiveX Control Properties”(ActiveX控件屬性)對話框,如圖1所示,在對控件的各屬性值進行設置后,單擊“OK”按鈕,在流程線上出現一個ActiveX...圖標,即完成WMP控件的插入。
1.2 設置控件屬性
屬性是ActiveX控件的數據,它決定了ActiveX控件對象的特征。大多數屬性用于描述控件的外觀,如顏色、字體等。另外一些屬性則用于描述控件的狀態(tài),如有的控件具有Enable屬性,當將該屬性設置為False時,則該控件對象就被禁用。WMP控件常用的屬性如表1所示:
在Authorware中設置控件對象屬性辦法有兩種。一種是直接在控件屬性對話框中修改控件的屬性,另一種方法是通過函數調用來設置ActiveX控件的屬性,這種方法在編程時使用較多。函數格式如下:
GetSpriteProperty(@"SpriteIconTitle", #property) //讀取控件對象的屬性值
SetSpriteProperty(@"SpriteIconTitle",#property, value) //設置控件對象的屬性值
其中參數SpriteIconTitle為ActiveX控件圖標的名稱,property為該控件對象的某個屬性,value為該屬性的值。
3.3調用控件方法
方法是ActiveX控件對數據的操作。對于一個控件對象,可以通過調用該對象的方法來完成某些特定的功能,比如對控件對象的狀態(tài)進行修改等等。ActiveX控件屬性對話框中的【Methods】選項列出了控件的全部方法,以及該方法的參數和返回值。
在Authorware中對ActiveX控件方法的調用一般是在程序中通過函數來實現的。函數語法格式如下:
CallSprite(@"SpriteIconTitle",#method[,argument…])
其中參數SpriteIconTitle為ActiveX控件圖標的名稱,method[,argument…]為要執(zhí)行的ActiveX控件的方法及其參數,如果沒有參數,則argument可以省略。需要強調的一點是,從Authorware 6.0開始為增強了與ActiveX控件的通信手段,在控件屬性對話框中增加了CallString方法,該方法提供了一個使Authorware應用程序可以訪問ActiveX控件所有屬性與方法的手段。CallString方法以一個字符串作為參數,在該字符串中,方法或屬性以“.”連接,并可將一次調用的返回值作為參數傳遞給下一次的調用。
通過設置和調用WMP控件的CallString方法的[controls]屬性和[settings]屬性,可實現WMV格式視頻的播放控制。其中的controls屬性可實現播放、暫停、快進、上一曲等控制,settings屬性可設定播放次數、是否靜音、播放速度和音量等播放屬性。常用的屬性如表2所示[5]:
3.4響應控件事件
事件是可以被控件識別的操作,ActiveX控件不僅具有對事件做出反應的能力,還可以向外發(fā)送相應的消息。ActiveX控件由這項機制通知應用程序在ActiveX控件中發(fā)生的事件,比如屬性參數的改變,用戶按下鼠標左鍵等等。
在Authorware中是通過事件交互來實現控件事件的響應,即利用交互方式中事件響應方式來對控件對象發(fā)送的消息進行捕獲和處理。具體步驟如下:首先在流程線上放置一個交互圖標,在其右側放置一個群組圖標,將交互類型設置為"事件";然后在該事件的屬性對話框的“事件”選項中的“發(fā)送”窗口雙擊需相應的控件圖標(事件發(fā)送者),直到它前面出現"x";最后在“事”窗口的列表中找到相應的事件雙擊,直到它前面出現"x"即可。圖2為響應圖標名字為“視頻”的WMP控件的鼠標單擊(Click)事件的程序流程和事件交互屬性設置的示意圖。
這樣,當程序運行時,如果在“視頻”圖標的控件上單擊鼠標時,就會觸發(fā)控件的”Click”事件,“事件響應”交互圖標就會捕獲此事件,并進入”單擊事件”群組圖標執(zhí)行該事件的響應處理程序。
4 應用實例
本實例為某飛機虛擬訓練系統(tǒng),采用3DMAX制作了大量的三維動畫來表現虛擬仿真操作。雖然3DMAX輸出的avi格式的動畫文件,是Authorware軟件內部支持的標準視頻格式,可以使用“數字化電影”圖標進行播放控制。但是由于3DMAX建模數據量大,導致最后生成的動畫文件體積較大。為了減少系統(tǒng)資源的占用,我們使用視頻格式轉換軟件將avi格式的視頻文件轉換為WMV格式的視頻文件,在Authorware中通過WMP控件來實現播放控制,在保證運行效果的同時,大大減少了文件體積。
以該系統(tǒng)某一功能模塊的WMV視頻播放器設計為例:要求除實現視頻的播放、暫停、靜音等基本控制外,還要能通過在視頻窗口單擊來實現窗口播放和全屏播放的視頻播放模式切換,以及隨時終止播放返回本級菜單、返回主界面和退出系統(tǒng)等人機交互控制功能。本模塊程序流程如下圖所示:
4.1加載視頻文件
首先在流程線上插入WMP控件,插入控件時不需在ActiveX控件屬性對話框中設置控件的各屬性值,并將控件圖標的名稱改為“視頻”。然后在視頻圖標下面插入一個計算圖標,命名為“視頻加載”,該計算圖標的主要功能是加載視頻文件,并設置WMP控件的相關屬性,主要程序代碼如下。
SetSpriteProperty(@"視頻",#url,FileLocation^"\\wmv\\s-2.wmv")
--設置控件加載的視頻文件的地址和文件名。
SetSpriteProperty(@"視頻",#fullScreen,"False")
--設置控件以窗口方式運行。
SetSpriteProperty(@"視頻",#uimode,"none")
--禁用WMP控件的內置播放器。
SetSpriteProperty(@"視頻",#enableContextMenu,"False")
--禁用右鍵菜單。
CallSprite(@"視頻",#callstring,"controls.play")
--調用CallString方法,開始播放加載的視頻文件。
4.2 播放控制
如圖3所示,“播放控制”交互圖標的第一個分支為條件響應分支,其作用是用來判斷加載的視頻文件是否已播放完畢,播放完畢,則調用控件的close方法,關閉控件,退出交互。否則,繼續(xù)執(zhí)行交互,等待播放結束。判斷條件是通過調用控件CallString方法中的playState屬性值來設置的。該屬性的返回值表示播放的狀態(tài),如1、2、3、6、9和10分別表示當前的播放狀態(tài)為停止、暫停、播放、正在緩沖、正在連接和準備就緒。該條件分支的屬性設置如下圖所示:
條件表達式為:CallSprite(@"視頻",#callstring,"playState")=1。
第二個分支為事件響應分支,其作用是用來捕獲控件的click事件,當在播放的視頻上單擊鼠標左鍵時,則進入該分支,通過一個計算圖標調用控件CallString方法中的fullScreen屬性,實現全屏播放和窗口播放的切換,該事件響應的設置方法如圖2所示。該分支群組圖標內的計算圖標中的主要程序代碼如下:
If CallSprite(@"視頻",#callstring,"fullScreen") then
--判斷目前是否為全屏播放模式
CallSprite(@"視頻",#callstring,"fullScreen(0)")
--設置為窗口播放模式
else
CallSprite(@"視頻",#callstring,"fullScreen(-1)")
--設置為全屏播放模式
end if
第三個分支為熱區(qū)域響應分支,其作用是控制視頻文件的播放或暫停,分支內的群組圖標結構如下圖所示:
圖5 熱區(qū)域響應分支“播放/暫?!比航M圖標結構
分支內的“play/pause”計算圖標通過調用控件CallString方法中的controls.pause方法和controls.play方法,來實現播放和暫停的控制?!皥D標切換”交互圖標為條件交互,根據變量m_play的值,來控制播放界面上的“播放圖標”和“暫停圖標”的顯示。計算圖標內的程序代碼如下:
if CallSprite(@”視頻”,#callstring,”playState”)=3 then
--判斷當前播放的狀態(tài)是否為“播放”
CallSprite(@”視頻”,#callstring,”controls.pause”)
--設置當前的狀態(tài)為“暫停”
m_play:=1
else
CallSprite(@”視頻”,#callstring,”controls.play”)
--設置當前的狀態(tài)為“播放”
m_play:=0
end if
其他分支分別通過調用控件CallString方法中的settings.mute、controls.stop和settings.volume等屬性或方法,實現靜音、返回和音量調節(jié)等功能的控制,具體代碼略。
5 結論
Authorware作為一種基于流程圖和設計圖標的多媒體創(chuàng)作工具,具有簡單易用、編程靈活的特點,但其軟件功能相對比較簡單,為了滿足復雜程序創(chuàng)作的需要,可以通過調用ActiveX控件來直接使用基于VB、VC、Delphi等高級編程語言編制的具有特殊功能的程序模塊,在擴展多媒體應用程序功能的同時,也大大提高程序設計的效率。如本實例通過應用WMP控件實現在Authorware中播放WMV格式的視頻文件,不僅實現了全屏播放等Authorware數字電影圖標不能實現的功能,還將視頻文件的體積縮小為原avi格式的六分之一,在減少系統(tǒng)資源占用的同時,顯著地提高了視頻播放的流暢性和程序運行的穩(wěn)定性。
參考文獻:
[1] 姜宏. 網絡流媒體播放器的研究與設計[J]. 電腦知識與技術,2013(2).
[2] 夏蕾. Authorware 中常用的數字電影控制技巧[J]. 電子測試,2013(19).
[3] 李艷. 數字電影文件如何在Authorware中正常播放[J]. 現代電子技術,2010(4).
[4] 張應成. ActiveX控件在Authorware7.0中的應用[J]. 軟件導刊, 2008(5).
[5] 王仁云. 視頻編碼模式以及在Windows Media編解碼器的應用[J]. 現代教育技術,2008(13).
[6] 曹江田. 利用Authorware開發(fā)雷達多媒體教學訓練系統(tǒng)[J]. 電子世界,2014(1).
[7] 龔蔚峰. 在多媒體Authorware軟件中如何控制電影圖標[J]. 網絡安全技術與應用,2014(3).
[8] 李興德,俞海英,伍紅兵,等. 基于數字媒體技術的軍事模擬訓練軟件的設計與實現[J].計算機應用, 2012(S1).
[9] 袁海東著. Authorware6教程[M]. 北京:電子工業(yè)出版社,2002.
[10] 趙鳴,徐海榮,孫波. ActiveX控件實現多媒體課件的網絡化[J]. 現代電子技術,2006(4).