1

我有一个围绕 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 Show,所以我想确切地了解这里发生了什么。

调试的最大挑战之一是我的办公室没有故障硬件 - 它在客户的站点,所以我必须进行更改,发送它们并等待回复。虽然这不会影响问题,但它确实会影响我快速跟进建议或跟进任何人可能遇到的问题的能力。

编辑1

播放 WMV 文件可以正常工作,因此它与仅音频文件有关。我们无法测试 MP3 是否是 WMA 编解码器问题,因为设备 OEM 出于对许可的担忧而未在操作系统中包含 MP3 编解码器。

4

1 回答 1

2

该图IVideoWindow只是转发到IVideoWindow视频渲染过滤器的底层。使用仅音频管道,您没有视频渲染器(显然)并且IVideoWindow没有多大意义。该接口仍然可用,但是一旦您尝试调用方法,就没有任何东西可以转发,因此会出现错误。

于 2012-06-14T16:26:17.827 回答