1

DirectShowライブラリにC#コントロールをラップしました。関連性があるかどうかはわかりませんが、WindowsCE6.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、同じアプリケーション、同じメディアファイルで問題なく機能します。

私の疑惑は、オーディオのみのファイルを再生しているという事実と関係があるかもしれませんが(ビデオファイルでも同じ問題が発生するかどうかを確認しています)、DirectShowに精通しているわけではありません。ここで何が起こっているのかを正確に理解したいと思います。

これをデバッグする際の大きな課題の1つは、障害のあるハードウェアがオフィスにないことです。これは顧客のサイトにあるため、変更を加えて送信し、応答を待つ必要があります。それは質問には影響しませんが、提案をすばやくフォローアップしたり、誰かが持っている可能性のある質問をフォローしたりする私の能力には影響します。

編集1

WMVファイルの再生は正常に機能するため、ファイルが音声のみであることに関連しています。ライセンスに関する懸念から、デバイスOEMがOSにMP3コーデックを含めていないため、MP3をテストしてWMAコーデックの問題であるかどうかを確認することはできません。

4

1 に答える 1

2

グラフは、ビデオレンダリングフィルターのIVideoWindow基礎となるものに他なりません。IVideoWindowオーディオのみのパイプラインでは、ビデオレンダラーが(明らかに)IVideoWindowなく、あまり意味がありません。インターフェイスは引き続き使用できますが、メソッドを呼び出そうとすると、転送するものがないため、エラーが発生します。

于 2012-06-14T16:26:17.827 に答える