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