我有一个围绕DirectShow库的C#控件。虽然我不确定它是否相关,但我在Windows CE 6.0R3上运行。尝试使用该控件播放WMA音频文件时,以下代码会引发"No such interface supported"
的异常:
m_graph = new DShowGraph(mediaFile);
m_graphBuilder = m_graph.Open();
m_videoWindow = (IVideoWindow)m_graph.GetVideoWindow();
if (m_videoWindow == null)
{
// this is not hit
}
try
{
m_videoWindow.put_WindowStyle((int)(WS.CHILD | WS.VISIBLE | WS.CLIPSIBLINGS));
}
catch (Exception ex)
{
// I end up here
}
Open
调用看起来像这样(错误处理等修剪):
private IGraphBuilder _graphBuilder;
internal IGraphBuilder Open()
{
object filterGraph = ClassId.CoCreateInstance(ClassId.FilterGraph);
_graphBuilder = (IGraphBuilder)filterGraph;
_graphBuilder.RenderFile(_input, null);
return _graphBuilder;
}
GetVideoWindow调用看起来像这样:
public IVideoWindow GetVideoWindow()
{
if (_graphBuilder == null)
return null;
return (IVideoWindow)(_graphBuilder);
}
奇怪的是,在Windows CE 5.0下运行时,这一切都可以使用相同的控件DLL,相同的应用程序和相同的媒体文件。
我怀疑它可能与我们播放纯音频文件这一事实有关(检查现在视频文件是否出现同样的问题),但我不是太精通Direct显示,所以我想了解到底发生了什么。
调试这个问题的一大挑战是我办公室没有发生故障的硬件 - 它位于客户的网站上,因此我必须进行更改,发送并等待回复。虽然这不会影响这个问题,但它确实会影响我快速跟进建议或跟进任何人可能遇到的问题的能力。
EDIT1
播放WMV文件工作正常,因此它与文件仅与音频有关。我们无法测试MP3以查看它是否是WMA编解码器问题,因为设备OEM由于担心许可而不在操作系统中包含MP3编解码器。
答案 0 :(得分:2)
图表的IVideoWindow
只不过是转发到视频呈现过滤器的基础IVideoWindow
。对于仅音频管道,您没有视频渲染器(显然),IVideoWindow
没有多大意义。界面仍然可用但是一旦你尝试调用方法,就没有任何东西可以转发,因此错误。