C# DirectX 音频/视频播放“VFW_E_UNSUPPORTED_STREAM”
Posted
技术标签:
【中文标题】C# DirectX 音频/视频播放“VFW_E_UNSUPPORTED_STREAM”【英文标题】:C# DirectX Audio/Video Playback "VFW_E_UNSUPPORTED_STREAM" 【发布时间】:2014-08-27 03:14:43 【问题描述】:我正在尝试使用 DirectX 为 MP4 创建一个视频播放器,它可以在我的计算机上运行,但我在上网本上尝试了我的应用程序,并且此错误代码在 try...catch(Exception e)...
中弹出。
Error in the application.
-2147220891 (VFW_E_UNSUPPORTED_STREAM)
at Microsoft.DirectX.AudioVideoPlayback.Video.Open(String fileName, Boolean autoRun)
at Microsoft.DirectX.AudioVideoPlayback.Video..ctor(String fileName, Boolean autoRun)
at Video_Player.Player.PeekWind_Load(Object sender, EventArgs e)
这是我的一些代码。
Microsoft.DirectX.AudioVideoPlayback.Video video = new Microsoft.DirectX.AudioVideoPlayback.Video("C:\TestVideo.mp4", true);
video.Owner = ViewPane;
video.Size = new Size(Video.DefaultSize.Width, Video.DefaultSize.Height);
video.Audio.Volume = -2500;
video.Play();
感谢您提供的任何帮助。
【问题讨论】:
【参考方案1】:VFW_E_UNSUPPORTED_STREAM
是underlying DirectShow layer返回的错误码,表示无法建立播放管道。这反过来意味着无法识别某些流或格式,并且通常缺少编解码器/过滤器组件来将数据读入解码和呈现就绪状态。
正如您提到的 MP4,您可能需要安装第三方过滤器/编解码器,因为普通 Windows 在 DirectShow API 中没有为此提供组件(GDCL filters 应该在 Windows 7+ 和旧系统中修复此问题,您通常还需要第三方 H.264 解码器)。
【讨论】:
感谢您的回答!不过我有一个问题。我应该把 GDCL 过滤器的 dll 放在我电脑的什么位置? 你把它们放在任何地方,然后你运行一次regsvr32 xxx.dll
来注册二进制文件,从管理员提升的命令提示符。然后你不要将它们从它们的位置移动。就是这样。
非常感谢!我对这些东西很陌生(我不得不研究如何打开管理员的提升命令提示符:P),你帮了很多忙。
抱歉,还有一个问题。我安装了一个third party H.264 decoder,但它似乎仍然不起作用,你知道如何使用它还是你知道更好的?
能否请您添加一些关于您的 Q 的信息?什么是操作系统版本,您的应用程序是 32 位还是 64 位?以上是关于C# DirectX 音频/视频播放“VFW_E_UNSUPPORTED_STREAM”的主要内容,如果未能解决你的问题,请参考以下文章
c# using Microsoft.DirectX.AudioVideoPlayback 如何在一个视频完成后播放下一个视频
C# winform,使用 Microsoft.DirectX.AudioVideoPlayback dll 中的视频/音频类后应用程序崩溃