網頁中WMP視頻控制之使用指南
——播放方法和屬性
除播放、暫停、停止外,媒體播放器還可用下面的屬性:
掃描(Scanning)——與錄影機的快進快倒功能類似;
搜尋(Seeking)——直接移到剪輯中標記的特定上演時間;
——播放
媒體播放器提供了兩種技術來指定要播放的媒體名稱(剪輯),你可以設定 FileName 屬性,或調用 Open 方法。 如果 AutoStart 屬性的值是 true 的話,當 FileName 屬性被設定成該電影剪輯的 URL 後,該電影剪輯將開始播放;否則電影剪輯不會開始播放, 除非你調用 Play 方法。 Open 方法開始播放是非同步,它不象 Play 方法要等到其他的進程結束後才開始播放。
媒體播放器提供了下面的類似錄影機的屬性和方法來控制流程媒體的播放:
Play、Stop、Pause 方法,來開始、停止、暫停流媒體。
PlayCount 屬性,設定檔案播放的次數。
AutoRewind 屬性,確定當停止播放時是否返回到電影剪輯的開始部分。
——音頻控制
媒體播放器提供了下面的屬性來管理音頻:
Balance 屬性,確定左右音箱的聲音平衡;
Volume 屬性,用來加大或降低音量;
Mute 屬性,用來關閉或開啟聲音;
※你可以將 ShowAudioControls 屬性設為 true 來在控制欄添加處理聲音的控制項。
——掃描
媒體播放器提供了下面的屬性用以掃描:
FastForward 方法,快進;
FastReverse 方法,快倒;
Rate屬性,改變播放速率;
※要想使電影剪輯能被掃描,必須將 CanScan 和 AllowScan 屬性設為 true。
——搜尋
用於搜尋的屬性有:
MarkerCount 屬性,指剪輯中標記的總數量;
CurrentMaker、GetMarkerName、GetMarkerTime 方法,用於返回標記資訊;
MarkerHit 事件,當遇到標記時觸發;
CurrentPosition 屬性,當前位置(用秒度量),可用來將播放頭移到剪輯中指定的點;
PositionChange 事件,當設定 CurrentPosition 屬性時觸發;
※要想搜尋到任意的時間,必須將 CanSeek 屬性設為 true,要想搜尋到標記點,必須將 CanSeekToMarkers 屬性設為 true。
——媒體播放器的外觀介面
在網頁中,你可以通過相關屬性來控制媒體播放器的哪些部分出現,哪些部分不出現。
媒體播放器包括如下元素:
Video Display Panel:視頻顯示面板;
Video Border:視頻邊框;
Closed Captioning Display Panel;字幕顯示面板;
Track Bar;搜尋欄;
Control Bar with Audio and Position Controls:帶有聲音和位置控制的控制欄;
Go To Bar:轉到欄;
Display Panel:顯示面板;
Status Bar:狀態列;
下面的屬性用來決定顯示哪一個元素:
ShowControls 屬性:是否顯示控制欄(包括播放控制項及可選的聲音和位置控制項);
ShowAudioControls 屬性:是否在控制欄顯示聲音控制項(靜音按鍵和音量滑塊);
ShowPositionControls 屬性:是否在控制欄顯示位置控制項(包括向後跳進、快退、快進、向前跳進、預覽播放清單中的每個剪輯);
ShowTracker 屬性:是否顯示搜尋欄;
ShowDisplay 屬性:是否顯示顯示面板(用來提供節目與剪輯的資訊);
ShowCaptioning 屬性:是否顯示字幕顯示面板;
ShowGotoBar 屬性:是否顯示轉到欄;
ShowStatusBar 屬性:是否顯示狀態列;
——播放清單
媒體播放器提供下面的方法來訪問播放清單中的剪輯:
Next 方法,跳到節目(播放清單)中的下一個剪輯;
Previous 方法,跳回到節目中的上一個剪輯;
媒體播放器的一個特性是能夠預覽節目中的每一個剪輯,使用如下屬性:
PreviewMode 屬性,決定媒體播放器當前是否處於預覽模式;
CanPreview 屬性,決定媒體播放器能否處於預覽模式;
在windows 媒體元檔案中,可以為每一個剪輯指定預覽時間——PREVIEWDURATION,如果沒有指定,那麼預設的預覽時間是10秒鐘。
你也可以用Windows 媒體元檔案來添加 watermarks 與 banners,元檔案也支援插入廣告時的無間隙流切換。
——節目資訊
使用 GetMediaInfoString 方法可以返回相關剪輯或節目的如下資訊:
檔案名稱:File name
標題:Title
描述:Description
作者:Author
著作權:Copyright
層級:Rating
URLs:logo icon、watermark、banner的地址
剪輯資訊可以放在媒體檔案中,也可以放在Windows 媒體元檔案中,或者兩者都放。如果在元檔案中指定了剪輯資訊,那麼用 GetMediaInfoString 方法返回的就是元檔案中的資訊,而不會返回剪輯中包含的資訊。
在元檔案中,附加資訊可以放置在每一個剪輯或節目的 PARAM標籤中。你可以為每個剪輯添加任意多個 PARAM 標籤,用來儲存自訂的資訊或連結到相關網站。在 PARAM 標籤中的資訊可以通過 GetMediaParameter 方法來訪問。
下面的屬性返回有關大小和時間的資訊:
ImageSourceHeight、ImageSourceWidth:返回映像視窗的顯示尺寸;
Duration 屬性,返回剪輯的長度(秒), 要檢測這個屬性是否包含有效數值,請檢查IsDurationValid 屬性。(對於廣播的視頻,其長度是不可預知的)。
——字幕
你可以用 .smi 檔案來為你的節目添加字幕。媒體播放器支援下面的屬性來處理字幕:
SAMIFileName 屬性,指定 .smi 檔案的名字;
SAMILang 屬性,指定字幕的語言(如果沒有指定則使用第一種語言);
SAMIStyle 屬性,指定字幕的文字大小和樣式;
ShowCaptioning 屬性,決定是否顯示字幕顯示面板;
——指令碼命令
伴隨音頻、視頻流,你可以在流媒體檔案中加入指令碼命令。指令碼命令是多媒體流中與特定時間同步的多對Unicode串。第一個串標識待發命令的類型,第二個串指定要執行的命令。
當流播放至與指令碼相關的時間時,控制項會向網頁發送一個 ScriptCommand事件,然後由事件處理進程來響應這個事件。指令碼命令字串會作為指令碼命令事件的參數傳遞給事件處理器。
媒體播放器會自動處理下面類型的內嵌指令碼命令:
1)URL型命令:當媒體播放器控制項收到一個URL型的命令時,指定的URL會被裝載到使用者的預設瀏覽器。如果媒體播放器嵌在一個分幀的HTML檔案中,URL頁可以裝載到由指令碼命令指定的幀內。如果指令碼命令沒有指定一個幀,將由 DefaultFrame 屬性決定將 URL 頁裝入哪一幀。
你可以通過設定 InvokeURLs 屬性來決定是否自動處理 URL 型的指令碼命令。如果這個屬性的值為 false ,媒體播放器控制項將忽視 URL型命令。但是指令碼命令事件仍會觸發,這就允許你有選擇地處理 URL 型命令。
URL 型命令指定的是 URL 的相對位址。基地址是由 BaseURL屬性指定的。媒體播放器控制項傳送的指令碼命令事件的命令參數是連結好的地址。
2)FILENAME型命令:當媒體播放器控制項收到一個FILENAME型的命令時,它將 FileName屬性設定為指令碼命令提供的檔案,之後媒體播放器會開啟這個檔案開始播放。 媒體播放器控制項總是自動處理 FILENAME 型命令,不象 URL 型命令,它們不能被禁止。
3)TEXT型命令:當媒體播放器控制項收到一個 TEXT型的命令時,它會將命令的內容顯示在控制項的字幕視窗。內容可以是純文字的,也可以是 HTML。
4)EVENT型命令:當媒體播放器控制項收到一個 EVENT型的命令時,它會在媒體元檔案中搜尋 EVENT 元素的 NAME 屬性。如果 NAME 屬性與指令碼命令中的第二個字串匹配,媒體播放器控制項就執行包含在 EVENT 元素中的條目。
5)OPENEVENT型命令:當媒體播放器控制項收到一個 OPENEVENT型的命令時,它會在媒體元檔案中檢查 EVENT 元素,並開啟匹配的標題,但不播放,直到收到來自 EVENT型命令的同名真實事件。
——捕捉鍵盤和滑鼠事件
EnableContextMenu 與 ClickToPlay 屬性為使用者提供了在映像視窗進行操作的方法。
如果 EnableContextMenu 屬性為 true ,在映像視窗右擊滑鼠可以開啟關聯菜單,如果將ClickToPlay 屬性設為 true ,使用者可以單擊映像視窗進行播放與暫停切換。
要接收滑鼠移動和單擊事件,請將 SendMouseMoveEvents 和 SendMouseClickEvents 屬性設為 true 。滑鼠事件有:
MouseDown,當使用者按下滑鼠時產生;
MouseUp,當使用者釋放滑鼠時產生;
MouseMove,當使用者移動滑鼠時產生;
Click,當使用者在媒體播放器上單擊滑鼠按鍵時產生;
DbClick,當使用者在媒體播放器上雙擊滑鼠按鍵時產生;
要接收鍵盤事件,請將 SendKeyboardEvents 屬性設為 true 。鍵盤事件有:
KeyDown,當使用者按下一個鍵時產生;
KeyUp,當使用者釋放一個鍵時產生;
KeyPress,當使用者按下並釋放一個鍵時產生;
——監測流狀態與網路連結
流狀態屬性包括:
PlayState:播放狀態;
OpenState:開啟狀態;
Bandwidth:頻寬;
支援的事件有:
OpenStateChange:開啟狀態改變(僅當SendOpenStateChangeEvents屬性為true時觸發)
PlayStateChange:播放狀態改變(僅當SendPlayStateChangeEvents屬性為true時觸發)
EndOfStream:流結束時觸發;
NewStream:開啟新流時觸發;
網路接收屬性包括:
ReceptionQuality:接收品質;
ReceivedPackets:已經收到的包;
LostPackets:丟失的包;
監測緩衝的屬性有:
BufferingTime:緩衝時間;
BufferingCount:緩衝次數;
BufferingProgress:緩衝進程;
Buffering:緩衝事件;
——錯誤處理
媒體播放器提供了內建的錯誤處理功能——在對話方塊或狀態列顯示錯誤資訊。 另外,你可以自己添加錯誤處理程式。如果 SendErrorEvents 屬性設定為 true,將不會顯示錯誤框,而是發送錯誤事件;如果 SendErrorEvents 屬性設定為 false,將顯示錯誤框,而是發送錯誤事件。
媒體播放器支援下面的錯誤處理事件:
Error 事件,指有危險性錯誤發生;
Warning 事件,指發生了非危險性的錯誤;
當你的應用程式接收到一個錯誤事件,你可以檢測下面的屬性來確定具體的錯誤資訊:
HasError:檢測目前的媒體播放器是否有錯誤;
ErrorCode:提供與該類型錯誤相關的代碼值;
ErrorDescription:提供錯誤的描述資訊;
ErrorCorrection:指定媒體播放器對該類型的錯誤進行校正;
——播放CD
媒體播放器將 CD 看作(在每個音軌的開頭具有標記的)單一音頻流。 要在網頁中使用CD,你需要將 FileName 屬性設為 CDAUDI,必須帶有冒號,如下所示:
<HTML>
<HEAD><TITLE>CD Audio Playback Example</TITLE></HEAD>
<BODY>
<OBJECT ID="MediaPlayer"
CLASSID="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
WIDTH="320"
HEIGHT="508"
STYLE="position:absolute; left:0px; top:70px;" >
<PARAM NAME="FileName" VALUE="cdaudi">
<PARAM NAME="AutoStart" VALUE="0">
<PARAM NAME="ShowControls" VALUE="1">
<PARAM NAME="ShowStatusBar" VALUE="1">
<PARAM NAME="ShowDisplay" VALUE="1">
</OBJECT>
</BODY>
</HTML>
之後你可以用 Play 方法播放 CD 了。
你可以在 windows 媒體元檔案中指定播放順序以及每個音軌的資訊。樣本如下:
<ASX VERSION="3.0">
<TITLE>CD Audio with the Media Player</TITLE>
<AUTHOR>Windows Media Technologies</AUTHOR>
<COPYRIGHT>(c) 1999, Microsoft, Inc.</COPYRIGHT>
<ENTRY>
<TITLE>Track 1: Title 1</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="1"/>
<ENDMARKER NUMBER="2"/>
</ENTRY>
<ENTRY>
<TITLE>Track 2: Title 2</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="2"/>
<ENDMARKER NUMBER="3"/>
</ENTRY>
<ENTRY>
<TITLE>Track 3: Title 3</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="3"/>
<ENDMARKER NUMBER="4"/>
</ENTRY>
<ENTRY>
<TITLE>Track 4: Title 4</TITLE>
<REF href="/blog/cdaudi" />
<STARTMARKER NUMBER="4"/>
</ENTRY>
</ASX>
另附:
1. 如何貼rm,ra,ram類型的音樂,代碼如下:
<embed width="0" height="0" type="audio/x-pn-realaudio-plugin" autostart="true" controls="ControlPanel" src="http://guest.anyp.cn/uploads/01.rm";>
2. 如何貼midi,asf,wma,asx類型的音樂,代碼如下:
<embed autostart="true" loop="-1" controls="ControlPanel" width="0" height="0" src="http://guest.anyp.cn/uploads/01.mid";>
3.<bgsound src="你的歌曲地址" loop="-1">
只需要把整段代碼copy到文章中去(編輯文章的時請用HTML代碼模式,否則這段代碼會以文本形式顯示出來,不能被執行),用你喜歡的音樂檔案的URL代替上面的音樂地址代碼就可以了。注意,音樂如果太大影響瀏覽速度,嚴重的可能導致瀏覽器停止回應,所以如果要放背景音樂請不要使用大檔案。
音樂檔案的URL指:音樂檔案的網址。
取得網址的方法是,把滑鼠移到有連結的音樂名點擊右鍵->複製捷徑,然後把需要加入音樂檔案的URL地方按CTRL+C(把之前複製的地址粘貼出來)。
加了背景音樂後不能正常收聽音樂這種情況的錯誤有兩個:
1、音樂地址錯誤,誤把html結尾的網址當成是音樂的地址。
2、音樂檔案太大,需要很長時間才能播放。
<embed height=26 src=http://song.5music.org/5musicreall/2003_ydzh/emhj/1-14.rm type=audio/x-pn-realaudio-plugin width=120 controls="StatusField" autostart="true"
加音樂的代碼。此代碼為加入RM格式的音樂。建議使用此代碼,速度比較快。
<bgsound src='???' loop=true>此代碼為加入MIDI格式的音樂,速度在所有音樂中,是最快的。建議最先考慮用此代碼/用時,將問號部分換成音樂地址。TRUE可以換成阿拉伯數字。用來控制音樂播放的次數。
<embed src=?? width=240 hight=180>此代碼為插入FLASH畫面。數字部分可調節畫面大小
<script language="JavaScript" src="http://danlovesary.y365.com/music/music.js"></script>
windowsmediaplayer 控制項的常用屬性及方法
windowsmediaplayer 控制項在我們編程時經常要用到,但是有很多屬性及方法卻不知道該怎麼使用。現以 wmp 9.0控制項為例說說其在 Delphi 7.0 中常用的屬性與方法(JavaScript中用法幾乎完全相同)。
假設此控制項名為wmp
屬性/方法名: 說明:
[基本屬性]
URL:String; 指定媒體位置,本機或網路地址
uiMode:String; 播放器介面模式,可為Full, Mini, None, Invisible
playState:integer; 播放狀態,1=停止,2=暫停,3=播放,6=正在緩衝,9=正在串連,10=準備就緒
enableContextMenu:Boolean; 啟用/禁用右鍵菜單
fullScreen:boolean; 是否全螢幕顯示
[controls] wmp.controls //播放器基本控制
controls.play; 播放
controls.pause; 暫停
controls.stop; 停止
controls.currentPosition:double; 當前進度
controls.currentPositionString:string; 當前進度,字串格式。如“00:23”
controls.fastForward; 快進
controls.fastReverse; 快退
controls.next; 下一曲
controls.previous; 上一曲
[settings] wmp.settings //播放器基本設定
settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自動播放
settings.mute:Boolean; 是否靜音
settings.playCount:integer; 播放次數
[currentMedia] wmp.currentMedia //當前媒體屬性
currentMedia.duration:double; 媒體總長度
currentMedia.durationString:string; 媒體總長度,字串格式。如“03:24”
currentMedia.getItemInfo(const string); 擷取當前媒體資訊"Title"=媒體標題,"Author"=藝術家,"Copyright"=著作權資訊,"Description"=媒體內容描述,"Duration"=期間(秒),"FileSize"=檔案大小,"FileType"=檔案類型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通過屬性名稱設定媒體資訊
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
[currentPlaylist] wmp.currentPlaylist //當前播放清單屬性
currentPlaylist.count:integer; 當前播放清單所包含媒體數
currentPlaylist.Item[integer]; 擷取或設定指定項目媒體資訊,其子屬性同wmp.currentMedia
常用的差不多就這麼多,全部資料請參見Windows Media Player 9 SDK 文檔。