电竞比分网-中国电竞赛事及体育赛事平台

分享

C# windows media player詳細(xì)用法

 緣木求魚(yú)001 2012-09-20
Media player控件基本使用步驟如下:

屬性/方法名說(shuō)明:

[基本屬性]
 
URL:String; 指定媒體位置,本機(jī)或網(wǎng)絡(luò)地址

uiMode:String; 播放器界面模式,可為Full, Mini, None, Invisible(不計(jì)大小寫(xiě))

playState:integer; 播放狀態(tài)。這個(gè)屬性改變時(shí)同時(shí)引發(fā)PlayStateChange事件與StateChange事件。

取值范圍為枚舉型:WMPLib.WMPPlayState,它的成員如下:

  wmppsUndefined = 0;   //未知狀態(tài)
  wmppsStopped = 1;    //播放停止
  wmppsPaused = 2;     //播放暫停
  wmppsPlaying = 3;     //正在播放
  wmppsScanForward = 4;   //向前搜索
  wmppsScanReverse = 5;   //向后搜索
  wmppsBuffering = 6;     //正在緩沖
  wmppsWaiting = 7;      //正在等待流開(kāi)始
  wmppsMediaEnded = 8;    //播放流已結(jié)束
  wmppsTransitioning = 9;    //準(zhǔn)備新的媒體文件
  wmppsReady = 10;      //播放準(zhǔn)備就緒
  wmppsReconnecting = 11;   //嘗試重新連接流媒體數(shù)據(jù)
  wmppsLast = 12;       //上一次狀態(tài),狀態(tài)沒(méi)有改變
  在PlayStateChange中寫(xiě)代碼可以防止播放rmvb等非默認(rèn)類型的問(wè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; 是否自動(dòng)播放
  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; 媒體總長(zhǎng)度
currentMedia.durationString:string; 媒體總長(zhǎng)度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string); 獲取當(dāng)前媒體信息"Title"=媒體標(biāo)題,"Author"=藝術(shù)家,"Copyright"=版權(quán)信息,"Description"=媒體內(nèi)容描述, "Duration"=持續(xù)時(shí)間(秒),"FileSize"=文件大小,"FileType"=文件類型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通過(guò)屬性名設(shè)置媒體信息
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")


[currentPlaylist] wmp.currentPlaylist //當(dāng)前播放列表屬性

currentPlaylist.count:integer; 當(dāng)前播放列表所包含媒體數(shù)
currentPlaylist.Item[integer]; 獲取或設(shè)置指定項(xiàng)目媒體信息,其子屬性同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)播放 (無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.Balance          聲道
axWindowsMediaPlayer1.Ctlcontrols.Volume         音量
axWindowsMediaPlayer1.Ctlcontrols.Mute          靜音
axWindowsMediaPlayer1.EnableContextMenu     是否允許在控件上點(diǎn)擊鼠標(biāo)右鍵時(shí)彈出快捷菜單
axWindowsMediaPlayer1.Ctlcontrols.AnimationAtStart       是否在播放前先播放動(dòng)畫(huà)(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowControls       是否顯示控件工具欄(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowAudioControls       是否顯示聲音控制按鈕(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowDisplay         是否顯示數(shù)據(jù)文件的相關(guān)信息(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowGotoBar        是否顯示Goto欄(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowPositionControls       是否顯示位置調(diào)節(jié)按鈕(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowStatusBar      是否顯示狀態(tài)欄(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.ShowTracker       是否顯示進(jìn)度條(無(wú)效)
axWindowsMediaPlayer1.Ctlcontrols.FastForward        快進(jìn)
axWindowsMediaPlayer1.Ctlcontrols.FastReverse        快退
axWindowsMediaPlayer1.Ctlcontrols.Rate            快進(jìn)/快退速率
axWindowsMediaPlayer1.AllowChangeDisplaySize   是否允許自由設(shè)置播放圖象大小(無(wú)效)
axWindowsMediaPlayer1.DisplaySize       設(shè)置播放圖象大小(無(wú)效)
1-MpDefaultSize         原始大小
2-MpHalfSize           原始大小的一半
3-MpDoubleSize         原始大小的兩倍
4-MpFullScreen          全屏
5-MpOneSixteenthScreen      屏幕大小的1/16
6-MpOneFourthScreen        屏幕大小的1/4
7-MpOneHalfScreen          屏幕大小的1/2
axWindowsMediaPlayer1.ClickToPlay    是否允許單擊播放窗口啟動(dòng)Media Player

在視頻播放之后,可以通過(guò)如下方式讀取源視頻的寬度和高度,然后設(shè)置其還原為原始的大小.
         private void ResizeOriginal()
         {
             int intWidth = axWindowsMediaPlayer1.currentMedia.imageSourceWidth;
             int intHeight = axWindowsMediaPlayer1.currentMedia.imageSourceHeight;
             axWindowsMediaPlayer1.Width = intWidth + 2;
             axWindowsMediaPlayer1.Height = intHeight + 2;
         }

打開(kāi)媒體文件并播放:

         Dim filePath As String
         With Me.OpenFileDialog1
             .Title = "打開(kāi)語(yǔ)音文件"
             .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("對(duì)不起,不能播放此格式語(yǔ)音文件", MsgBoxStyle.OKOnly, "PC復(fù)讀機(jī)")
             Exit Sub
        End Try
注意:
AxWindowsMediaPlayer1.URL 中URL是表示要播放的文件名,取消了原來(lái)的Name屬性.
AxWindowsMediaPlayer1.Ctlcontrols.play()播放,同樣還有Pause,Stop等其他屬性.
AxWindowsMediaPlayer1.settings.balance表示媒體播放的聲道設(shè)置,0表示均衡,-1和1表示左右聲道.
AxWindowsMediaPlayer1.currentMedia.duration 表示要播放的文件的時(shí)間長(zhǎng)度.可用它獲取文件長(zhǎng)度.
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition表示正在播放的文件的當(dāng)前播放位置,可用這個(gè)屬性來(lái)對(duì)媒體文件進(jìn)行前進(jìn)后退等設(shè)置.如
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition+1 表示前進(jìn)1個(gè)時(shí)間單位.
AxWindowsMediaPlayer1.settings.rate播放速率,一般乘以16后再顯示kbps單位.

注意:在上面程序中,如果在后面加上一個(gè):

msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString )

則顯示結(jié)果很可能為0,因此,這時(shí)候很可能獲取不到文件的播放時(shí)間長(zhǎng)度,容易出錯(cuò)。所以在利用的時(shí)候可以加一個(gè)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 '可能因?yàn)槊襟w文件的打開(kāi)需要一定時(shí)間,這里等待媒體文件的打開(kāi)
         msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString )
End Sub

此時(shí)msgbox便會(huì)顯示文件播放長(zhǎng)度。

2. Ctlcontrols屬性

Ctlcontrols屬性是AxWindowsMediaPlayer的一個(gè)重要屬性, 此控件中有許多常用成員。
(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 是一個(gè)整型變量。
7. 屬性Duration
用于獲取當(dāng)前多媒體文件的播放的總時(shí)間,其值為數(shù)值類型,其使用格式為:
窗體名.控件名.currentMedia.duration
如:d2 =AxWindowsMediaPlayer1.currentMedia.duration
其中d2是一個(gè)整型變量。
對(duì)WMP的感嘆
感嘆一
這是我找到的關(guān)于WMP的最全的中文資料了。剛才又查了一下,查到了MSDN有更全的API文檔,終于找到它了。上面的資料基本上夠用了,但是,如果要寫(xiě)一個(gè)更為精致的播放器,這些還不夠啊??碝SDN去也。WMP11在MSDN中的位置如下:
win32和COM開(kāi)發(fā)-Griphics And MultiMedia-Audio And Vedio-Windows Media Player 11 SDK
看了一個(gè)晚上的MSDN與資料。發(fā)現(xiàn)MSDN上關(guān)于WMP SDK的文檔也很不扎實(shí)。沒(méi)有實(shí)例。我要找的答案都不在上面。唯一的收獲是曉得了wpl。wmp有自己的播放列表文件,但是,我查遍msdn,發(fā)現(xiàn)sdk 并不提供手動(dòng)保存播放列表的任何方法。所以,現(xiàn)在的問(wèn)題是,我們創(chuàng)建了一個(gè)IWMPPlayList,但是,這個(gè)接口不提供任何保存的方法,結(jié)果。 newPlayList(name,path)只提供打開(kāi)一個(gè)已有列表。郁悶。查了英文資料。老外建議用:StreamWrite/StreamRead 的辦法來(lái)讀寫(xiě)wpl,我也看了。事實(shí)上wpl是一個(gè)xml文件。我們可以用System.Xml中的API來(lái)讀寫(xiě)。不過(guò),sdk中的這個(gè)漏子我始終無(wú)法釋 懷。
感嘆二
從WMP8開(kāi)始就不支持mms/rtsp協(xié)議了,所用wmp.URL="mms://xxxx";是不行的了。點(diǎn)此處見(jiàn)詳情,而mms這個(gè)協(xié)議現(xiàn)在還在廣泛使用。郁悶。因此,我們不能使用wmp來(lái)看網(wǎng)絡(luò)電視了。

使用WMP的常見(jiàn)問(wèn)題:

一、升級(jí)wmp后,再拖windows media player控件至窗體出錯(cuò)的問(wèn)題(至今沒(méi)解決,應(yīng)當(dāng)是修改工程序文件,用文本編輯器)

二、播放rmvb/rm等非官方格式文件要先雙擊文件再點(diǎn)播放按鈕,而不能直接播放的問(wèn)題,并彈出消息框:Windows Media Player下載文件遇到問(wèn)題。有關(guān)幫助信息請(qǐng)單擊“Web幫助”。消息下面兩個(gè)按鈕:關(guān)閉、Web幫助。我沒(méi)有找到出現(xiàn)這個(gè)問(wèn)題的官方說(shuō)明。我個(gè)人意 見(jiàn),這是因?yàn)閣mp默認(rèn)只播能播放官方指定的幾種類型的媒體。如果不是,wmp會(huì)試圖下載對(duì)應(yīng)的解碼器來(lái)播放。而這個(gè)下載過(guò)程失敗了,所以彈出這個(gè)消息 框。wmp好像沒(méi)有去判斷這個(gè)解碼器是否已經(jīng)存在。但是,如果你再點(diǎn)播放的話,又能播放,這是什么原因呢?應(yīng)當(dāng)是wmp在這次會(huì)試圖搜索本機(jī)上的解碼器以 圖播放媒體。怎樣解決這個(gè)點(diǎn)兩次鼠標(biāo)的問(wèn)題呢?如下:

先設(shè)置屬性:wmp.settings.enableErrorDialogs = false;事實(shí)上這個(gè)屬性默認(rèn)就是false。不用設(shè)置。


private void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
         //如果已播放完畢就播放下一個(gè)文件
         if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady) wmp.Ctlcontrols.play();
}  
唉,我費(fèi)了九牛二虎之力總算找到了這個(gè)辦法解決。


三、怎樣獲得一個(gè)媒體文件中的信息,并且修改媒體的一些信息?

  有辦法:AxWindowsMediaPlayer.newMedia(filename),它會(huì)創(chuàng)建一個(gè)IWMPMedia的實(shí)例。用它的setItemInfo就成了。至于有哪些信息可供設(shè)置,可去msdn中查,里面列舉了所有相關(guān)信息。


四、IWMPPlayList是不是雞肋????????
確實(shí)是好大的一塊雞肋?。。。。。。。。。?!


五、播放器控件有幾個(gè)組成部分,可有隱藏其中相關(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)欄;


就是這么幾個(gè)部分,網(wǎng)上有資料說(shuō)控件提供方法控制它們顯示與否,但是我在sdk中并沒(méi)有找到它們。唯一可以粗略控制它們的就是uiMode屬性。它的取值前面有。


六、控件的網(wǎng)絡(luò)設(shè)置,如設(shè)置代理、緩沖次數(shù)、緩沖時(shí)間等信息在哪設(shè)置?

  AxWindowsMediaPlayer.netWork。它是IWMPNetWork的實(shí)例。


七、像暴風(fēng)有字幕相關(guān)信息的設(shè)置,wmp控件有這個(gè)功能嗎?


當(dāng)然有。就是AxWindowsMediaPlayer.closedCaption。它是IWMPClosedCaption的實(shí)例。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多