標籤:自動 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組件應用中遇到的問題