[Winform]Media Player com組件應用中遇到的問題

來源:互聯網
上載者:User

標籤:自動   stop   desktop   pre   x64   填充   字元   var   iap   

摘要

最近一個項目中,需要用到在用戶端全屏迴圈播放視頻,當時考慮使用開源的播放器,但控制起來不方便,然後考慮既然都是windows系統,那麼可以考慮使用微軟內建的Media Player播放器。所以在開發中,就在winform中嵌入了Media Player組件。下面就將開發中遇到的問題,做一個總結。

問題與解決辦法

首先要搞清楚Media Player到底是x86的還是x86的。我電腦系統是x64的,可以嘗試開啟Media Player,在工作管理員中查看是不是x64的。

所以media player 是x86還是x86的。在開發中,最好以Any CPU 或者x86的方式運行或者生產項目,不然有可能出現渲染com組件失敗的情況。這個項目因為引入了cefSharp組件,需要指定運行平台,我這裡設定為x86。

如果在添加com組件的時候報錯,可以嘗試關閉vs,將包含vshost的檔案刪除,然後重啟vs,重建嘗試。

 

 

這樣算是設定正常了,然後我們可以對它的屬性進行設定,在播放器上面右鍵屬性,

選擇模式,可以對播放器下面的播放控制按鈕進行設定,是全顯示,還是不顯示,這個項目中是作為屏保的,所以這裡讓其隱藏,所以設定為None,全屏設定為true。

關於全屏設定,也可以通過代碼進行控制,可以參考這篇文章:

[Winform]Media Player組件全屏播放的設定

這裡可以通過屬性進行設定,比較方便,最好還是通過屬性來設定。一是方便,二是讓控制全屏的邏輯交給組件來進行。

勾選按比例展開,可以讓視頻平鋪。並且設定播放器的屬性Dock=Fill。

  this.windowsMediaPlay.Dock = System.Windows.Forms.DockStyle.Fill;

讓其填充視窗。

在項目中,因為設定的是x64的方式運行,以及沒有設定填充的方式。導致播放視頻出現白邊的bug。

迴圈播放的設定

 windowsMediaPlay.settings.setMode("loop", true);

在初始化完成Media Player時,最好加上初始化結束的標記

windowsMediaPlay.EndInit();

添加播放清單,預設播放目錄,如果包含mp4,wmv檔案,加入播放清單

  windowsMediaPlay.settings.setMode("loop", true);                    string[] filePaths = Directory.GetFiles(_videoDirPath).Where(x => x.EndsWith(".mp4") || x.EndsWith(".wmv")).ToArray();                    //清空播放清單                    windowsMediaPlay.currentPlaylist.clear();                    //添加迴圈播放清單                    foreach (var item in filePaths)                    {                        windowsMediaPlay.currentPlaylist.appendItem(windowsMediaPlay.newMedia(item));                    }

播放

windowsMediaPlay.Ctlcontrols.play();

停止

windowsMediaPlay.Ctlcontrols.stop();

暫停

windowsMediaPlay.Ctlcontrols.pause();

屬性介紹

enableContextMenu:Boolean 顯示/不顯示播放位置的右鍵菜單
fullScreen:boolean 全螢幕顯示
stretchToFit:boolean 非全屏狀態時是否伸展到最佳大小
uMode:string 播放器的模式,full:有下面的控制條; none:只有播放部份沒有控制條
playState:integer 當前控制項狀態,下面是三種基本狀態:
3:現正播放
2:暫停
1:已停止
狀態變化時會觸發OnStatusChange事件
[controls]
可通過WindowsMediaPlayer.controls對播放器進行控制並取得相關的一些資訊:
controls.play; 播放
controls.stop; 停止
controls.pause; 暫停
controls.currentPosition:Double 當前播放進度
controls.currentPositionString:string 時間格式的字串 "0:32"
[currentMedia]
可以通過WindowsMediaPlayer.currentMedia取得當前媒體的資訊
currentMedia.duration Double 總長度
currentMedia.durationString 時間格式的字串 "4:34"
[settings]
可以通過WindowsMediaPlayer.settings對播放器進行設定,包括音量和聲道等。
settings.volume:integer 音量 (0-100)
settings.balance:integer 聲道,通過它應該可以進行立體聲、左聲道、右聲道的控制。
=================
版本2:
屬性/方法名: 說明:
[基本屬性]  
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

Media Player事件屬性可參考MSDN

https://msdn.microsoft.com/en-us/library/windows/desktop/dd562419(v=vs.85).aspx

[Winform]Media Player com組件應用中遇到的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.