调试媒体基础

时间:2015-01-07 01:55:36

标签: c# dll windows-runtime c++-cx ms-media-foundation

我目前正在尝试编写ByteStreamHandler和音频decoder,以便在Windows应用商店应用中添加对不受支持的编解码器的支持。

我关注了this MPEG1示例并根据我的需要进行了调整。

但是我不确定它是否正确加载,因为我始终使用MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED HRESULT收到错误E_FAIL

我已经在我的代码中使用的所有E_FAIL结果中添加了值,以便找出它发生的位置,但不幸的是,我的代码似乎没有发生。

现在我想知道是否有办法找出包含ActivatableClasses的dll是否正确加载以及如何调试dll中的代码。

更多信息: 我将dll添加到我的package.appxmanifest

中,将dll添加到项目中
<Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
        <InProcessServer>
            <Path>MyDecoder.Windows.dll</Path>
            <ActivatableClass ActivatableClassId="MyDecoder.MyDecoder" ThreadingModel="both"/>
        </InProcessServer>
    </Extension>
    <Extension Category="windows.activatableClass.inProcessServer">
        <InProcessServer>
            <Path>MyDecoder.Windows.dll</Path>
            <ActivatableClass ActivatableClassId="MyDecoder.MyByteStreamHandler" ThreadingModel="both"/>
        </InProcessServer>
    </Extension>
</Extensions>

我在MainPage中创建了MediaExtensionManager作为私有类变量

MediaExtensionManager mediaExtensionManager = new MediaExtensionManager();

我在OnNavigatedTo

中注册了处理程序和解码器
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    mediaExtensionManager.RegisterByteStreamHandler("MyDecoder.MyByteStreamHandler", FILE_TYPE, MIME_TYPE);
    mediaExtensionManager.RegisterAudioDecoder("MyDecoder.MyDecoder", MF_SUBTYPE, Guid.Empty);
    mediaElement.MediaFailed += mediaElement_MediaFailed;
 }

ByteStreamHandler和Decoder在一个项目中。

Side-Question:当我通过FileOpenPicker选择文件时,StorageFile的{​​{1}}(MIME类型)属性为空字符串。我能以某种方式解决这个问题吗?我应该解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用MFTrace工具(在Windows SDK中)从Media Foundation获取事件日志。这应该可以帮助你弄清楚失败时会发生什么。

http://msdn.microsoft.com/en-us/library/windows/desktop/ff685116(v=vs.85).aspx