- 1
對於視頻播放器來說,最重要的功能,莫過於播放視頻文件了這就要用到VS自帶的控件——Windows Media Player
windows media player
- 將Windows Media Player(以下簡稱wmp)控件添加到工具箱中
1.選擇工具箱項
2.選擇com組件項
3.找到wmp,將其前面打鈎即可在工具箱中找到wmp - 添加wmp至已創建好的窗體中
-
下面說一說wmp一些屬性
URL:String——指定媒體位置,本機或網絡地址
uiMode:String——播放器界面模式,可為Full, Mini, None, Invisible(不計大小寫)
playState:int—— 播放狀態。這個屬性改變時同時引發PlayStateChange事件與StateChange事件。取值范圍為枚舉型:WMPLib.WMPPlayState,它的成員如下:
wmppsUndefined = 0; //未知狀態
wmppsStopped = 1; //播放停止
wmppsPaused = 2; //播放暫停
wmppsPlaying = 3; //正在播放
wmppsScanForward = 4; //向前搜索
wmppsScanReverse = 5; //向后搜索
wmppsBuffering = 6; //正在緩沖
wmppsWaiting = 7; //正在等待流開始
wmppsMediaEnded = 8; //播放流已結束
wmppsTransitioning = 9; //准備新的媒體文件
wmppsReady = 10; //播放准備就緒
wmppsReconnecting = 11; //嘗試重新連接流媒體數據
wmppsLast = 12; //上一次狀態,狀態沒有改變
在PlayStateChange中寫代碼可以防止播放rmvb等非默認類型的問題(用wmppsReady)。
enableContextMenu:Boolean——啟用/禁用右鍵菜單
fullScreen:boolean——是否全屏顯示 -
播放器基本控制
Ctlcontrols.play; 播放
Ctlcontrols.pause; 暫停
Ctlcontrols.stop; 停止
Ctlcontrols.currentPosition:double; 當前進度
Ctlcontrols.currentPositionString:string; 當前進度,字符串格式。如“00:23”
Ctlcontrols.fastForward; 快進
Ctlcontrols.fastReverse; 快退
Ctlcontrols.next; 下一曲
Ctlcontrols.previous; 上一曲 -
播放器基本設置[settings] wmp.settings
settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自動播放
settings.mute:Boolean; 是否靜音
settings.playCount:integer; 播放次數
//順序播放
wmp.settings.setMode(“shuffle”, False)
//隨機播放
wmp.settings.setMode(“shuffle”, True)
//循環播放
wmp.settings.setMode(“loop”, True) -
當前媒體屬性[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
axWindowsMediaPlayer1.currentMedia.sourceURL; //獲取正在播放的媒體文件的路徑
axWindowsMediaPlayer1.currentMedia.name; //獲取正在播放的媒體文件的名稱
axWindowsMediaPlayer1.Ctlcontrols.Play 播放
axWindowsMediaPlayer1.Ctlcontrols.Stop 停止
axWindowsMediaPlayer1.Ctlcontrols.Pause 暫停
axWindowsMediaPlayer1.Ctlcontrols.PlayCount 文件播放次數
axWindowsMediaPlayer1.Ctlcontrols.AutoRewind 是否循環播放 (無效)
axWindowsMediaPlayer1.Ctlcontrols.Balance 聲道
axWindowsMediaPlayer1.Ctlcontrols.Volume 音量
axWindowsMediaPlayer1.Ctlcontrols.Mute 靜音
axWindowsMediaPlayer1.EnableContextMenu 是否允許在控件上點擊鼠標右鍵時彈出快捷菜單
axWindowsMediaPlayer1.Ctlcontrols.AnimationAtStart 是否在播放前先播放動畫(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowControls 是否顯示控件工具欄(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowAudioControls 是否顯示聲音控制按鈕(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowDisplay 是否顯示數據文件的相關信息(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowGotoBar 是否顯示Goto欄(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowPositionControls 是否顯示位置調節按鈕(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowStatusBar 是否顯示狀態欄(無效)
axWindowsMediaPlayer1.Ctlcontrols.ShowTracker 是否顯示進度條(無效)
axWindowsMediaPlayer1.Ctlcontrols.FastForward 快進
axWindowsMediaPlayer1.Ctlcontrols.FastReverse 快退
axWindowsMediaPlayer1.Ctlcontrols.Rate 快進/快退速率
axWindowsMediaPlayer1.AllowChangeDisplaySize 是否允許自由設置播放圖象大小(無效)
axWindowsMediaPlayer1.DisplaySize 設置播放圖象大小(無效)
1-MpDefaultSize 原始大小
2-MpHalfSize 原始大小的一半
3-MpDoubleSize 原始大小的兩倍
4-MpFullScreen 全屏
5-MpOneSixteenthScreen 屏幕大小的1/16
6-MpOneFourthScreen 屏幕大小的1/4
7-MpOneHalfScreen 屏幕大小的1/2
axWindowsMediaPlayer1.ClickToPlay 是否允許單擊播放窗口啟動Media Player在視頻播放之后,可以通過如下方式讀取源視頻的寬度和高度,然后設置其還原為原始的大小.
private void ResizeOriginal()
{
int intWidth = axWindowsMediaPlayer1.currentMedia.imageSourceWidth;
int intHeight = axWindowsMediaPlayer1.currentMedia.imageSourceHeight;
axWindowsMediaPlayer1.Width = intWidth + 2;
axWindowsMediaPlayer1.Height = intHeight + 2;
} -
注意:
AxWindowsMediaPlayer1.URL 中URL是表示要播放的文件名,取消了原來的Name屬性.
AxWindowsMediaPlayer1.Ctlcontrols.play()播放,同樣還有Pause,Stop等其他屬性.
AxWindowsMediaPlayer1.settings.balance表示媒體播放的聲道設置,0表示均衡,-1和1表示左右聲道.
AxWindowsMediaPlayer1.currentMedia.duration 表示要播放的文件的時間長度.可用它獲取文件長度.
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition表示正在播放的文件的當前播放位置,可用這個屬性來對媒體文件進行前進后退等設置.如
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition+1 表示前進1個時間單位.
AxWindowsMediaPlayer1.settings.rate播放速率,一般乘以16后再顯示kbps單位.
注意:在上面程序中,如果在后面加上一個:
msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString )
則顯示結果很可能為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便會顯示文件播放長度。 - 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
用於將正在播放的多媒體文件快進,其格式為:
窗體名.控件名.Ctlcontrols.fastforward()
如: AxWindowsMediaPlayer1.Ctlcontrols.forward()
(5) 方法fastreverse
窗體名.控件名.Ctlcontrols.fastreverse()
如: AxWindowsMediaPlayer1.Ctlcontrols.fastreverse() - 屬性CurrentPosition
用於獲取多媒體文件當前的播放進度,其值是數值類型,使用格式為:
窗體名.控件名.Ctlcontrols.currentPosition
d1 =AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
其中d1 是一個整型變量。 -
屬性Duration
用於獲取當前多媒體文件的播放的總時間,其值為數值類型,其使用格式為:
窗體名.控件名.currentMedia.duration
如:d2 =AxWindowsMediaPlayer1.currentMedia.duration
其中d2是一個整型變量。下面開始制作簡易的播放器,用到部分上面的內容
1.創建項目
選擇windows窗體應用程序,名稱為mediaplayer
2.將form1的name屬性改為mediaplayer,text屬性改為視頻播放器。
3.添加menustrip,wmp控件。
4.調整他們之間的相互位置,並設置wmp的anchor屬性為Top, Bottom, Left, Right以適應窗體調整時控件的大小及位置。
5.向menustrip中加入具體內容:
文件->打開文件->退出;
播放->播放/暫停->停止->快進->快退->上一曲->下一曲;
選項->升高音量->降低音量->靜音;
6.向打開文件中加入代碼:
雙擊打開文件,加入如下代碼
private void 打開文件ToolStripMenuItem_Click(object sender, EventArgs e) { using (OpenFileDialog fileDialog = new OpenFileDialog()) { fileDialog.Filter = "視頻文件(*.avi;*.wmv)|*.avi;*.wmv|(All file(*.*)|*.*"; if (fileDialog.ShowDialog() == DialogResult.OK) { //axWindowsMediaPlayer1.SizeMode = PictureBoxSizeMode.Zoom; playpath = fileDialog.FileName; // 初始化視頻集合 directory = Path.GetDirectoryName(playpath); playArray = player.GetplayCollection(directory); } } axWindowsMediaPlayer1.URL = playpath; }
【注意】:
要先定義變量
string playpath = null; string directory = null; List<<string>string> playArray = null;
和線性表
` public static List<string> GetplayCollection(string path) { string[] playarray = Directory.GetFiles(path); var result = from playstring in playarray where playstring.EndsWith("wmv", StringComparison.OrdinalIgnoreCase) || playstring.EndsWith("avi", StringComparison.OrdinalIgnoreCase) select playstring; return result.ToList(); }
7.接下來,向其他menustrip項中分別加入代碼如下:
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void 播放/暫停ToolStripMenuItem_Click(object sender, EventArgs e) { if ((int)axWindowsMediaPlayer1.playState ==2) axWindowsMediaPlayer1.Ctlcontrols.play(); else if((int)axWindowsMediaPlayer1.playState==3) axWindowsMediaPlayer1.Ctlcontrols.pause(); } private void 停止ToolStripMenuItem_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.stop(); } private void 快進ToolStripMenuItem_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.fastForward(); } private void 快退ToolStripMenuItem_Click_1(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.fastReverse(); } private void 上一曲ToolStripMenuItem_Click_1(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.previous(); } private void 下一曲ToolStripMenuItem_Click_1(object sender, EventArgs e) { axWindowsMediaPlayer1.Ctlcontrols.next(); } private void 升高音量ToolStripMenuItem1_Click(object sender, EventArgs e) { if (axWindowsMediaPlayer1.settings.volume <= 90) { axWindowsMediaPlayer1.settings.volume += 10; } else { axWindowsMediaPlayer1.settings.volume = 100; } } private void 降低音量ToolStripMenuItem1_Click(object sender, EventArgs e) { if (axWindowsMediaPlayer1.settings.volume >= 10) { axWindowsMediaPlayer1.settings.volume -= 10; } else { axWindowsMediaPlayer1.settings.volume = 0; } } private void 靜音ToolStripMenuItem_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.settings.volume = 0; } private void 屬性ToolStripMenuItem1_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.ShowPropertyPages(); } private void 關於ToolStripMenuItem_Click(object sender, EventArgs e) { axWindowsMediaPlayer1.ShowAboutBox(); }