C#視頻播放器【轉】


  • 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(); } 
http://blog.csdn.net/qwerty837504957/article/details/48625557
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM