| Media player控件基本使用步驟如下: 屬性/方法名說明: [基本屬性] URL:String; 指定媒體位置,本機(jī)或網(wǎng)絡(luò)地址 uiMode:String; 播放器界面模式,可為Full, Mini, None, Invisible(不計大小寫) playState:integer; 播放狀態(tài)。這個屬性改變時同時引發(fā)PlayStateChange事件與StateChange事件。 取值范圍為枚舉型:WMPLib.WMPPlayState,它的成員如下: wmppsUndefined = 0; //未知狀態(tài) wmppsStopped = 1; //播放停止 wmppsPaused = 2; //播放暫停 wmppsPlaying = 3; //正在播放 wmppsScanForward = 4; //向前搜索 wmppsScanReverse = 5; //向后搜索 wmppsBuffering = 6; //正在緩沖 wmppsWaiting = 7; //正在等待流開始 wmppsMediaEnded = 8; //播放流已結(jié)束 wmppsTransitioning = 9; //準(zhǔn)備新的媒體文件 wmppsReady = 10; //播放準(zhǔn)備就緒 wmppsReconnecting = 11; //嘗試重新連接流媒體數(shù)據(jù) wmppsLast = 12; //上一次狀態(tài),狀態(tài)沒有改變 在PlayStateChange中寫代碼可以防止播放rmvb等非默認(rèn)類型的問題(用wmppsReady)。 enableContextMenu:Boolean; 啟用/禁用右鍵菜單 fullScreen:boolean; 是否全屏顯示 //播放器基本控制 Ctlcontrols.play; 播放 Ctlcontrols.pause; 暫停 Ctlcontrols.stop; 停止 Ctlcontrols.currentPosition:double; 當(dāng)前進(jìn)度 Ctlcontrols.currentPositionString:string; 當(dāng)前進(jìn)度,字符串格式。如“00:23” Ctlcontrols.fastForward; 快進(jìn) Ctlcontrols.fastReverse; 快退 Ctlcontrols.next; 下一曲 Ctlcontrols.previous; 上一曲 [settings] wmp.settings //播放器基本設(shè)置 settings.volume:integer; 音量,0-100 settings.autoStart:Boolean; 是否自動播放 settings.mute:Boolean; 是否靜音 settings.playCount:integer; 播放次數(shù) //順序播放 wmp.settings.setMode("shuffle", False) //隨機(jī)播放 wmp.settings.setMode("shuffle", True) //循環(huán)播放 wmp.settings.setMode("loop", True) [currentMedia] wmp.currentMedia //當(dāng)前媒體屬性 currentMedia.duration:double; 媒體總長度 currentMedia.durationString:string; 媒體總長度,字符串格式。如“03:24” currentMedia.getItemInfo(const string); 獲取當(dāng)前媒體信息"Title"=媒體標(biāo)題,"Author"=藝術(shù)家,"Copyright"=版權(quán)信息,"Description"=媒體內(nèi)容描述, "Duration"=持續(xù)時間(秒),"FileSize"=文件大小,"FileType"=文件類型,"sourceURL"=原始地址 currentMedia.setItemInfo(const string); 通過屬性名設(shè)置媒體信息 currentMedia.name:string; 同 currentMedia.getItemInfo("Title") [currentPlaylist] wmp.currentPlaylist //當(dāng)前播放列表屬性 currentPlaylist.count:integer; 當(dāng)前播放列表所包含媒體數(shù) currentPlaylist.Item[integer]; 獲取或設(shè)置指定項目媒體信息,其子屬性同wmp.currentMedia axWindowsMediaPlayer1.currentMedia.sourceURL; //獲取正在播放的媒體文件的路徑 axWindowsMediaPlayer1.currentMedia.name; //獲取正在播放的媒體文件的名稱 axWindowsMediaPlayer1.Ctlcontrols.Play 播放 axWindowsMediaPlayer1.Ctlcontrols.Stop 停止 axWindowsMediaPlayer1.Ctlcontrols.Pause 暫停 axWindowsMediaPlayer1.Ctlcontrols.PlayCount 文件播放次數(shù) axWindowsMediaPlayer1.Ctlcontrols.AutoRewind 是否循環(huán)播放 (無效) axWindowsMediaPlayer1.Ctlcontrols.Balance 聲道 axWindowsMediaPlayer1.Ctlcontrols.Volume 音量 axWindowsMediaPlayer1.Ctlcontrols.Mute 靜音 axWindowsMediaPlayer1.EnableContextMenu 是否允許在控件上點(diǎn)擊鼠標(biāo)右鍵時彈出快捷菜單 axWindowsMediaPlayer1.Ctlcontrols.AnimationAtStart 是否在播放前先播放動畫(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowControls 是否顯示控件工具欄(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowAudioControls 是否顯示聲音控制按鈕(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowDisplay 是否顯示數(shù)據(jù)文件的相關(guān)信息(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowGotoBar 是否顯示Goto欄(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowPositionControls 是否顯示位置調(diào)節(jié)按鈕(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowStatusBar 是否顯示狀態(tài)欄(無效) axWindowsMediaPlayer1.Ctlcontrols.ShowTracker 是否顯示進(jìn)度條(無效) axWindowsMediaPlayer1.Ctlcontrols.FastForward 快進(jìn) axWindowsMediaPlayer1.Ctlcontrols.FastReverse 快退 axWindowsMediaPlayer1.Ctlcontrols.Rate 快進(jìn)/快退速率 axWindowsMediaPlayer1.AllowChangeDisplaySize 是否允許自由設(shè)置播放圖象大小(無效) axWindowsMediaPlayer1.DisplaySize 設(shè)置播放圖象大小(無效) 1-MpDefaultSize 原始大小 2-MpHalfSize 原始大小的一半 3-MpDoubleSize 原始大小的兩倍 4-MpFullScreen 全屏 5-MpOneSixteenthScreen 屏幕大小的1/16 6-MpOneFourthScreen 屏幕大小的1/4 7-MpOneHalfScreen 屏幕大小的1/2 axWindowsMediaPlayer1.ClickToPlay 是否允許單擊播放窗口啟動Media Player 在視頻播放之后,可以通過如下方式讀取源視頻的寬度和高度,然后設(shè)置其還原為原始的大小. private void ResizeOriginal() { int intWidth = axWindowsMediaPlayer1.currentMedia.imageSourceWidth; int intHeight = axWindowsMediaPlayer1.currentMedia.imageSourceHeight; axWindowsMediaPlayer1.Width = intWidth + 2; axWindowsMediaPlayer1.Height = intHeight + 2; } 打開媒體文件并播放: Dim filePath As String With Me.OpenFileDialog1 .Title = "打開語音文件" .CheckPathExists = True .CheckFileExists = True .Multiselect = False .Filter = "mp3文件(*.mp3)|*.mp3|所有文件(*.*)|*.*" If .ShowDialog = DialogResult.Cancel Then Exit Sub End If filePath = .FileName End With Me.Text = "PC復(fù)讀機(jī)-文件 " & filePath AxWindowsMediaPlayer1.URL = filePath Try Me.AxWindowsMediaPlayer1.Ctlcontrols.play() Catch ex As Exception MsgBox("對不起,不能播放此格式語音文件", MsgBoxStyle.OKOnly, "PC復(fù)讀機(jī)") Exit Sub End Try 注意: AxWindowsMediaPlayer1.URL 中URL是表示要播放的文件名,取消了原來的Name屬性. AxWindowsMediaPlayer1.Ctlcontrols.play()播放,同樣還有Pause,Stop等其他屬性. AxWindowsMediaPlayer1.settings.balance表示媒體播放的聲道設(shè)置,0表示均衡,-1和1表示左右聲道. AxWindowsMediaPlayer1.currentMedia.duration 表示要播放的文件的時間長度.可用它獲取文件長度. AxWindowsMediaPlayer1.Ctlcontrols.currentPosition表示正在播放的文件的當(dāng)前播放位置,可用這個屬性來對媒體文件進(jìn)行前進(jìn)后退等設(shè)置.如 AxWindowsMediaPlayer1.Ctlcontrols.currentPosition+1 表示前進(jìn)1個時間單位. AxWindowsMediaPlayer1.settings.rate播放速率,一般乘以16后再顯示kbps單位. 注意:在上面程序中,如果在后面加上一個: msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString ) 則顯示結(jié)果很可能為0,因此,這時候很可能獲取不到文件的播放時間長度,容易出錯。所以在利用的時候可以加一個timer控件: Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick EndPoint = AxWindowsMediaPlayer1.currentMedia.duration If EndPoint = 0 Then Exit Sub '可能因為媒體文件的打開需要一定時間,這里等待媒體文件的打開 msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString ) End Sub 此時msgbox便會顯示文件播放長度。 2. Ctlcontrols屬性 Ctlcontrols屬性是AxWindowsMediaPlayer的一個重要屬性, 此控件中有許多常用成員。 (1) 方法play 用于播放多媒體文件,其格式為: 窗體名.控件名.Ctlcontrols.play() 如: AxWindowsMediaPlayer1.Ctlcontrols.play() ‘此處缺省窗體名是Me (2) 方法pause 用于暫停正在播放的多媒體文件,其格式為: 窗體名.控件名.Ctlcontrols.pause() 如: AxWindowsMediaPlayer1.Ctlcontrols.pause() (3) 方法stop 用于停止正在播放的多媒體文件,其格式為: 窗體名.控件名.Ctlcontrols.stop() 如: AxWindowsMediaPlayer1.Ctlcontrols.stop() (4) 方法fastforward 用于將正在播放的多媒體文件快進(jìn),其格式為: 窗體名.控件名.Ctlcontrols.fastforward() 如: AxWindowsMediaPlayer1.Ctlcontrols.forward() (5) 方法fastreverse 窗體名.控件名.Ctlcontrols.fastreverse() 如: AxWindowsMediaPlayer1.Ctlcontrols.fastreverse() 6. 屬性CurrentPosition 用于獲取多媒體文件當(dāng)前的播放進(jìn)度,其值是數(shù)值類型,使用格式為: 窗體名.控件名.Ctlcontrols.currentPosition d1 =AxWindowsMediaPlayer1.Ctlcontrols.currentPosition 其中d1 是一個整型變量。 7. 屬性Duration 用于獲取當(dāng)前多媒體文件的播放的總時間,其值為數(shù)值類型,其使用格式為: 窗體名.控件名.currentMedia.duration 如:d2 =AxWindowsMediaPlayer1.currentMedia.duration 其中d2是一個整型變量。 對WMP的感嘆 感嘆一 這是我找到的關(guān)于WMP的最全的中文資料了。剛才又查了一下,查到了MSDN有更全的API文檔,終于找到它了。上面的資料基本上夠用了,但是,如果要寫一個更為精致的播放器,這些還不夠啊??碝SDN去也。WMP11在MSDN中的位置如下: win32和COM開發(fā)-Griphics And MultiMedia-Audio And Vedio-Windows Media Player 11 SDK 看了一個晚上的MSDN與資料。發(fā)現(xiàn)MSDN上關(guān)于WMP SDK的文檔也很不扎實。沒有實例。我要找的答案都不在上面。唯一的收獲是曉得了wpl。wmp有自己的播放列表文件,但是,我查遍msdn,發(fā)現(xiàn)sdk 并不提供手動保存播放列表的任何方法。所以,現(xiàn)在的問題是,我們創(chuàng)建了一個IWMPPlayList,但是,這個接口不提供任何保存的方法,結(jié)果。 newPlayList(name,path)只提供打開一個已有列表。郁悶。查了英文資料。老外建議用:StreamWrite/StreamRead 的辦法來讀寫wpl,我也看了。事實上wpl是一個xml文件。我們可以用System.Xml中的API來讀寫。不過,sdk中的這個漏子我始終無法釋 懷。 感嘆二 從WMP8開始就不支持mms/rtsp協(xié)議了,所用wmp.URL="mms://xxxx";是不行的了。點(diǎn)此處見詳情,而mms這個協(xié)議現(xiàn)在還在廣泛使用。郁悶。因此,我們不能使用wmp來看網(wǎng)絡(luò)電視了。 使用WMP的常見問題: 一、升級wmp后,再拖windows media player控件至窗體出錯的問題(至今沒解決,應(yīng)當(dāng)是修改工程序文件,用文本編輯器) 二、播放rmvb/rm等非官方格式文件要先雙擊文件再點(diǎn)播放按鈕,而不能直接播放的問題,并彈出消息框:Windows Media Player下載文件遇到問題。有關(guān)幫助信息請單擊“Web幫助”。消息下面兩個按鈕:關(guān)閉、Web幫助。我沒有找到出現(xiàn)這個問題的官方說明。我個人意 見,這是因為wmp默認(rèn)只播能播放官方指定的幾種類型的媒體。如果不是,wmp會試圖下載對應(yīng)的解碼器來播放。而這個下載過程失敗了,所以彈出這個消息 框。wmp好像沒有去判斷這個解碼器是否已經(jīng)存在。但是,如果你再點(diǎn)播放的話,又能播放,這是什么原因呢?應(yīng)當(dāng)是wmp在這次會試圖搜索本機(jī)上的解碼器以 圖播放媒體。怎樣解決這個點(diǎn)兩次鼠標(biāo)的問題呢?如下: 先設(shè)置屬性:wmp.settings.enableErrorDialogs = false;事實上這個屬性默認(rèn)就是false。不用設(shè)置。 private void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { //如果已播放完畢就播放下一個文件 if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady) wmp.Ctlcontrols.play(); } 唉,我費(fèi)了九牛二虎之力總算找到了這個辦法解決。 三、怎樣獲得一個媒體文件中的信息,并且修改媒體的一些信息? 有辦法:AxWindowsMediaPlayer.newMedia(filename),它會創(chuàng)建一個IWMPMedia的實例。用它的setItemInfo就成了。至于有哪些信息可供設(shè)置,可去msdn中查,里面列舉了所有相關(guān)信息。 四、IWMPPlayList是不是雞肋???????? 確實是好大的一塊雞肋!?。。。。。。。。?! 五、播放器控件有幾個組成部分,可有隱藏其中相關(guān)部分的方法? 媒體播放器包括如下元素: Video Display Panel:視頻顯示面板; Video Border:視頻邊框; Closed Captioning Display Panel;字幕顯示面板; Track Bar;搜索欄; Control Bar with Audio and Position Controls:帶有聲音和位置控制的控制欄; Go To Bar:轉(zhuǎn)到欄; Display Panel:顯示面板; Status Bar:狀態(tài)欄; 就是這么幾個部分,網(wǎng)上有資料說控件提供方法控制它們顯示與否,但是我在sdk中并沒有找到它們。唯一可以粗略控制它們的就是uiMode屬性。它的取值前面有。 六、控件的網(wǎng)絡(luò)設(shè)置,如設(shè)置代理、緩沖次數(shù)、緩沖時間等信息在哪設(shè)置? AxWindowsMediaPlayer.netWork。它是IWMPNetWork的實例。 七、像暴風(fēng)有字幕相關(guān)信息的設(shè)置,wmp控件有這個功能嗎? 當(dāng)然有。就是AxWindowsMediaPlayer.closedCaption。它是IWMPClosedCaption的實例。 | 
|  |