2015-01-11 74 views
1

我正試圖在面板上播放視頻文件。我找到了來自social.msdn forum的示例代碼,但示例代碼中提到的SDK更新的directx可再發行版的下載鏈接已損壞。因此,我手動搜索directx 9.0C並從this link安裝它。以下是我使用的代碼。在面板上播放視頻文件

Imports Microsoft.DirectX.AudioVideoPlayback 

Dim videoFile As Video = New Video("G:/Shared Data/myvid-2012.avi") 
videoFile.Owner = Panel1 
videoFile.Play() 

我不得不手動瀏覽&添加Microsoft.DirectX.AudioVideoPlayback參考。

上述代碼在表單加載事件中。現在,當我嘗試運行該應用程序時,它有時會永久保存,無需打開我的應用有時它確實打開了,但我的面板沒有顯示視頻。有沒有解決這個問題的方法?

+1

不知道它是否會有所幫助,但是如果您嘗試使用SlimDX來代替它呢? http://slimdx.org/ –

+0

還有DirectShowNET – Plutonix

+0

@Plutonix謝謝,但沒有一個簡單的方法直接從vb.net做到這一點,播放視頻似乎是一個典型的要求。不能相信vb.net沒有一個更簡單的解決方案。我嘗試使用Windows媒體播放器,播放視頻時滯後很多。 – codeGEN

回答

2

不幸的是,您依賴於.NET 1.0版本中Microsoft發佈的.NET Managed DirectX封裝。這是一個麻煩的圖書館,他們在10年前停止了它。你描述的問題聽起來像是「加載器鎖定」,圖書館有一個長期的問題。它被終止的可能原因。 DirectX沒有「官方」.NET包裝,但開源項目承擔了這一挑戰。 SharpDX和SlimDX是最受歡迎的。

視頻播放技術移動速度很快,對於不會卡在舊東西上非常重要。有很多很多的選擇。 this howto article中描述了桌面應用程序的典型現代解決方案。當然,不是一個小組,我必須建議今天遠離DirectShow包裝。您可以輕鬆嵌入Windows Media Player,在this MSDN article中有詳細描述。如果AVI播放是你唯一的要求,那麼流行的AForge.NET library可能是合適的,AVIFileVideoSource類。

+0

[鏈接](http://msdn.microsoft.com/en-us/library/aa969812%28v=vs.110%29.aspx)這是一個wpf的例子,因爲它說MediaPlayer沒有定義,或者我需要添加一些參考。我嘗試了Windows媒體播放器,播放視頻時也滯後。 – codeGEN

+0

我正在嘗試在我的登錄屏幕中播放重複的視頻,以向我的應用程序添加更吸引人的外觀,因此我不希望因視覺吸引對象而在性能上有所妥協。 – codeGEN

0

您需要下載2006年6月的DirectX SDK我相信這是對託管DirectX

DirectX SDK-(June 2006)

最後的SDK與您的窗體加載事件:

Dim sz As Size = New Size(Panel1.Width, Panel1.Height) 

Dim videoFile As Video = New Video("G:/Shared Data/myvid-2012.avi", False) 
videoFile.Owner = Panel1 

videoFile.Play() 'changes the size of panel 

'Set the original size 
Panel1.Size = sz 
+0

請勿使用舊版Managed DirectX 1.1。請參閱[DirectX和.NET](http://blogs.msdn.com/b/chuckw/archive/2010/12/09/directx-and-net.aspx)。 –

+0

@ChuckWalbourn我沒有說這是最好的解決方案。我也沒有說它應該被使用。另一方面,它是使用OP所使用的* AudioVideoPlayback *的唯一方法,並且它的侷限性是有效的。這是OP問題的直接答案。如果您有不同的現代化解決方案,我期待着您的回答。 –

+0

@ChuckWalbourn。在使用這個時會有巨大的性能影響嗎?我打算在我的應用程序的背景下播放這段視頻,純粹是爲了一個視覺上的吸引人的活動,我不會因爲這個而遲遲沒有視頻或者我的應用程序滯後。無論如何,我會下載DirectXSDK(漂亮的大文件)並嘗試一下。謝謝。 – codeGEN

0

You can open the following

將App.Config文件中的所有內容替換爲以下內容(對於.net Framework 4.0)

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration>