Win32 應用整合數位媒體兩大主流:DirectShow API (控制力最強但複雜) 或嵌入 Windows Media Player ActiveX 控件。WPF 仍可用 DirectShow 移植既有應用。新增 MediaElement 控件為更明智選擇:基本功能相同,但與 WPF 整合更佳,支援 Alpha 混合合成媒體、呈現於三維曲面。
音訊/視訊皆可整合,提供多種控制複雜度選擇。後台實際啟動 Windows Media Player 執行期播放檔案(WPF 無自有媒體呈現引擎),相容性等同於使用者安裝的 WMP 可播放格式。需安裝新編碼器支援新格式。首次播放因 WMP 執行期載入有延遲,難以精確同步動畫。解決:預載媒體並暫停、或用動畫引擎滑移同步延遲。音訊另可用 System.Media.SoundPlayer 直接播放 WAV 無需 WMP。
最簡便方法。可用 XAML 或 C#/VB 程式碼隱藏檔添加。兩種模式:
Source (URI)、LoadedBehavior (Close/Manual/Pause/Play/Stop)。需 Manual 才能用 Play/Pause/Stop 方法控制。範例:簡易播放器 XAML + C# 代碼。MediaTimeline,使用 WPF 動畫引擎控制播放,實現媒體與其他動畫同步。MediaElement 不設 Source,改在 MediaTimeline 設定,透過 Storyboard.TargetName 關聯。需熟悉 WPF 動畫基礎。屬性:Position (TimeSpan 取得/設定位置)、BufferingProgress/DownloadProgress 顯示進度、Balance/Volume 音訊控制 (可繫結滑桿讓使用者完全控制)。事件:MediaOpened/MediaEnded 觸發應用其他部分、BufferingStarted/BufferingEnded 顯示緩衝回饋 (配合 BufferingProgress 顯示百分比)。建議:非必要勿用時鐘模式,MediaElement 應為預設選擇,讓設計師用 XAML 實現媒體整合,釋放開發人員。
非 WPF 控件元素,僅能在程式碼隱藏檔用 C#/VB 建立。屬性方法與 MediaElement 驚人相似 (本質上 MediaElement 為高階封裝)。注意:無直觀視覺呈現,不可直接加入視覺樹。播放視訊需將 MediaPlayer 繪製至可視表面再加入視覺樹。故 MediaPlayer 為播放音訊最佳選擇 (無視覺呈現需求);標準視訊播放 MediaElement 較佳 (繼承 UIElement 可直接加入視覺樹)。差異:無 LoadedBehavior/UnloadedBehavior;載入檔案用 Open(Uri) 而非設定 Source。若不需 XAML 實現或自動視覺呈現,MediaPlayer 為最佳選項 (功能同 MediaElement 但無額外開銷)。
MediaElement 繼承 UIElement,可置於任何 UIElement 可放置位置。範例:Button 內嵌 MediaElement 建立視訊按鈕。XAML 片段展示。WPF 視 MediaElement 為視覺樹中普通 UI 元素,開啟豐富創意可能。
用 VisualBrush 將 MediaElement 視訊播放繪製至矩形,創建完美反射。步驟:StackPanel 首槽放 MediaElement,次槽放同尺寸矩形,矩形 Fill 用 VisualBrush 繫結 MediaElement,RenderTransform 翻轉鏡像,OpacityMask 漸層淡化。XAML 完整代碼展示。得益於 WPF 強大資料繫結,倒影為即時效果,隨視訊更新自動更新。
WPF 最受歡迎功能之一。North Face 示範高品質 WMV 映射於旋轉彎曲三維網格。效能考量:三維網格動畫開銷大,加上全動態視訊更鉅。關鍵在適度:將多邊形計數維持最低必要水平。WPF 媒體團隊承諾未來版本降低開銷,但恆大於二維媒體。
建立三維場景要素:三維物件 + 材質 (刷子:SolidColorBrush, LinearGradientBrush, ImageBrush, VisualBrush) → GeometryModel3D → 光源 → 攝影機 → Viewport3D 封裝。Mesh3DObjects 類別提供基元物件建立。
方法一:VisualBrush 映射:DiffuseMaterial.Brush 設 VisualBrush,Visual 放 MediaElement。XAML 片段展示。
方法二:VideoDrawing + DrawingBrush:VideoDrawing.Player 設 MediaPlayer 實例,DrawingBrush.Drawing 設 VideoDrawing,套用至 DiffuseMaterial.Brush。C# 代碼展示。差異:VideoDrawing 必須在程式碼隱藏檔建立,僅支援 MediaPlayer 不支援 MediaElement。效能差異不大 (皆需 WPF 建立呈現表面作橋梁)。
核心功能:RenderTargetBitmap (Windows.Media.Imaging)。步驟:建立 DrawingVisual → DrawingContext → DrawVideo(MediaPlayer, Rect) → RenderTargetBitmap.Render → BitmapFrame.Create → 設定 Image.Source。C# 完整代碼展示。像素格式透過 PixelFormats 列舉設定。用途:視訊螢幕擷取工具、建立視訊縮略圖、執行期視訊特效 (建議深入 DirectShow 取得滿意效果)。
System.Media.SoundPlayer:簡單介面載入/播放 WAV (外部/串流/內嵌資源),開銷極低 (不依賴 WMP)。設定 SoundLocation → Load() → Play() (完全載入後才播放)。XAML 中 SoundPlayerAction 控件可在 EventTrigger 內播放 WAV,適用按鈕翻轉等介面聲音。代碼片段展示 Button.MouseEnter 觸發。
介紹 WPF 音訊視訊整合多種方法。若 WPF 控制力不足可回退 DirectShow API。XAML 添加媒體釋放開發人員專注複雜代碼。WPF 提供驚豔豐富視覺體驗,媒體整合不僅可能,更極度興奮!