我目前正在尝试编写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类型)属性为空字符串。我能以某种方式解决这个问题吗?我应该解决这个问题吗?
答案 0 :(得分:1)
您可以使用MFTrace工具(在Windows SDK中)从Media Foundation获取事件日志。这应该可以帮助你弄清楚失败时会发生什么。
http://msdn.microsoft.com/en-us/library/windows/desktop/ff685116(v=vs.85).aspx