2010-06-11 60 views
1

是否有方法來捕獲每個WPF MediaElement框架?就像在每個渲染框架中觸發並允許我訪問它的事件一樣。如果MediaElement沒有提供這樣的功能,那麼它如何實現或者我可以使用哪些其他控制?請注意,是否有這樣一種控制或方法可以實現在屏幕上快速渲染帶有幀捕捉的媒體剪輯? (所以我可以儘可能快地處理幀)捕獲每個WPF MediaElement框架

回答

3

試用我的WPF MediaKit項目。允許您使用Media在WPF中執行任何操作。試用MediaDetector.cs,它可以讓你隨時從媒體中提取出幀。這是一個小錯誤,因爲我從來沒有花太多時間,但應該爲你需要的東西工作。

+0

+1這很好,但我不確定在獲取每一幀時會有多穩定。我可以根據每秒媒體幀的數量得到一幀定時器發射,但我猜測它仍然容易產生四捨五入誤差和時間變化,以便捕獲和返回幀... – luvieere 2010-06-13 05:36:27

+1

我將修改MediaUriPlayer.cs文件以將SampleGrabber過濾器添加到圖中以接收每個樣本。您可以通過查看VideoCapturePlayer.cs來了解如何執行此操作,因爲它會接收每個樣本。將傳遞的IntPtr轉換爲位圖的代碼位於MediaDetector.cs中。所以簡而言之,我相信我的項目有你需要的所有代碼,但是有一些複製/粘貼重構要做:) – 2010-06-14 21:33:53

+0

WPF媒體工具包已經轉移到https://github.com/Sascha-L/WPF-MediaKit – xmedeko 2017-08-31 09:54:30

0

沒有內置WPF方式:

  • 的MediaElement不具備這種能力。
  • BitmapDecoder提供API來請求這一點,但是使用BitmapDecoder從任意媒體中提取幀沒有實現:它只能從幾個動畫位圖格式(如.gif)中提取幀。

我能夠使用DirectShow從.mpg,.wmv,.mov,.flv,.avi和其他電影格式獲取幀圖像。我使用DirectShow的COM圖形構建器接口構建了一個過濾器圖形。生成的濾鏡圖解碼電影並將其連接到用C#編寫的自定義渲染器過濾器。我的自定義過濾器接收到幀數據,並將其轉換爲BitmapSource對象以供使用BitmapSource.Create進行顯示。

DirectShow解決方案執行得非常好,託管到非託管轉換沒什麼大不了的,但花了一段時間才弄清楚了DirectShow圖形構建的細節。