關於WPF中使用AxWindowsMediaPlayer的一些心得體會
之前專案是WPF的,因為有視訊播放的需求,所以自然而然的使用了MediaElement。但是客戶的機器實在太垃圾了,還是用的賽揚處理器(真的是無語了),程式執行起來CPU佔用立馬飆到80%多。
後來換了VLC,但是Nuget上的幾個vlc庫效果還不如MediaElement,再後來考慮到使用DirectShow,但是卻不支援MP4檔案(這個需要自己註冊編碼器,搜尋了一下資料,搞了半天實在沒有進展,就放棄了)。於是想起了winform,winform其實在效能上一直要比wpf的表現要好。
當然,專案不可能整體轉向winform(難度倒是不大,就是改起來感覺噁心,而且時間上也不允許)。還好有WindowsFormsHost這個相容的東西,可以幫助我們在wpf上使用一些winform的控制元件。好了,下面就開始正式梳理一下,如何在wpf上使用winform。
第一步,生成AxWindowsMediaPlayer,AxWindowsMediaPlayer屬於一個com元件,不在System.Winforms裡面,所以我們需要先建立一個Winform工程。然後在工程裡面新增WindowsMediaPlayer的引用,這個引用在COM元件裡面。接著我們在winform裡面呼叫一下AxWindowsMediaPlayer,然後編譯專案。
第二步,將第一步編譯生成的將編譯生成的Interop.WMPLib.dll和AxInterop.WMPLib.dll兩個dll新增到我們WPF工程的引用裡面,這樣我們就能使用AxWindowsMediaPlayer了。
使用的時候需要注意一些問題:
1.通過WindowsFormsHost來包裝AxWindowsMediaPlayer或者其它winform控制元件的時候需要注意,我們的Window視窗的AllowsTransparency屬性只能設定為false,否則winform控制元件將無法顯示。
2.設定AxWindowsMediaPlayer的一些屬性的時候,必須在其宿主WindowsFormsHost被新增到Window中以後才能呼叫。這裡主要是針對通過程式碼直接新增AxWindowsMediaPlayer的情況,如果直接寫在xaml裡面不會有這樣的問題。
3.AxWindowsMediaPlayer只能等比例拉伸視訊,而且似乎只能在web中使用才有效果。