Vb.net 在面板上播放视频文件

Vb.net 在面板上播放视频文件,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我试图在面板上播放视频文件。我从中找到了一个示例代码,但示例代码中提到的directx redistributable&SDK update的下载链接已断开。因此,我手动搜索directx 9.0C,并从安装。下面是我使用的代码 Imports Microsoft.DirectX.AudioVideoPlayback Dim videoFile As Video = New Video("G:/Shared Data/myvid-2012.avi") videoFile.Owner = Pan

我试图在面板上播放视频文件。我从中找到了一个示例代码,但示例代码中提到的directx redistributable&SDK update的下载链接已断开。因此,我手动搜索directx 9.0C,并从安装。下面是我使用的代码

Imports Microsoft.DirectX.AudioVideoPlayback

Dim videoFile As Video = New Video("G:/Shared Data/myvid-2012.avi")
videoFile.Owner = Panel1
videoFile.Play()
我不得不手动浏览并添加
Microsoft.DirectX.AudioVideoPlayback
的引用


上述代码位于表单加载事件中。现在,当我尝试运行应用程序时,它有时会永远保持,而不打开我的应用程序。有时它会打开,但我的面板不会显示视频。有解决此问题的方法吗?

不幸的是,您依赖于Microsoft在.NET 1.0版发布的.NET托管DirectX包装。这是一个麻烦的图书馆,他们10年前就停止了。您描述的问题听起来像“加载程序锁”,该库长期存在问题。它停产的可能原因。DirectX没有“官方的.NET包装器”,但开源项目承担了这一挑战。SharpDX和SlimDX是最流行的

视频播放技术发展得很快,重要的是不要停留在旧的东西上。有很多很多选择。中介绍了桌面应用程序的标准现代解决方案。当然不是一个面板,我不得不建议今天远离DirectShow包装。您可以轻松嵌入Windows Media Player,如中所述。如果AVI播放是您唯一的要求,那么流行的AVIFileVideoSource类可能是合适的。

您需要下载2006年6月的directx SDK,我认为这是托管directx的最后一个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 

将App.Config文件中的所有内容替换为以下内容(适用于.net Framework 4.0)



不知道这是否有帮助,但如果您尝试使用SlimDX来代替呢?还有DirectShowNET@Plutonix谢谢,但是有没有一种更简单的方法可以直接从vb.net实现这一点,播放视频似乎是一个典型的要求。不敢相信vb.net没有更简单的解决方案。我尝试过使用windows media player,但播放视频时会出现很多延迟。指向“DirectX 9.0c”的链接非常古老,仅适用于windows XP RTM、windows XP Service Pack 1或更早版本的操作系统。它在Windows XP Service Pack 2、Windows Server 2003 Server 1或更高版本上不执行任何操作。它甚至不安装您尝试使用的旧版托管DirectX 1.1程序集。这是一个wpf示例,因为它说MediaPlayer没有定义,还是我需要添加一些引用。我尝试了windows media player,它在播放视频时也会延迟。我正在尝试在登录屏幕中播放一个重复的视频,以便为我的应用程序添加更具吸引力的外观,因此,我不希望由于视觉吸引力对象而在性能上出现妥协。不要使用旧版托管DirectX 1.1。你看。@ChuckWalbourn我没说这是最好的解决方案。我也没有说应该使用它。另一方面,这是OP使用的唯一音频视频播放方式,它的工作方式有其局限性。这是对OP问题的直接回答。“如果你有不同的现代解决方案,我就等着看你的答案。”查克沃尔伯恩。使用它会对性能产生巨大影响。我打算在我的应用程序的背景上播放这段视频,纯粹是为了视觉上的吸引人的活动&我不会因此而让视频或我的应用程序滞后。无论如何,我会下载DirectXSDK(相当大的文件)并尝试一下。谢谢。@γηρσκωδ′αεπλλδδδασκμε。既然您提到不使用托管DirectX,我很乐意使用更现代的方法,顺便说一下,我使用WINFALS而不是WPF,期待您的答案。在Windows Vista或以后,您应该使用MediaFoundation,但我不知道您的系统要求。一般建议使用媒体播放器ActiveX控件,请参阅。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>