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# 中使用 DirectX 进行无缝(循环)音频播放

c# using Microsoft.DirectX.AudioVideoPlayback 如何在一个视频完成后播放下一个视频

C# winform,使用 Microsoft.DirectX.AudioVideoPlayback dll 中的视频/音频类后应用程序崩溃

如何从使用directx c# visual studio播放的视频中获取和处理每一帧(位图图像​​)

调试模式下的directx音频视频错误消息

如何在 C# 中创建音频频谱