我正在尝试使用 IMFSourceResolver::CreateObjectFromByteStream 方法为受 DRM 保护的 WMA 文件创建 IMFMediaSource 实例。我正在将 Windows SDK 中的 ProtectedPlayback 示例改编为游乐场。我希望实现的最终目标是让播放过程由自定义实现提供,如果我将编写 IMFByteStream。
但是,我无法让我的简单 IMFByteStream 实现或 MFCreateFile 函数返回的实现工作。当传递给 CreateObjectFromByteStream 时,每个都返回 MF_E_UNSUPPORTED_BYTESTREAM_TYPE 的 HRESULT。
我使用受 DRM 保护的 WMA 文件测试了默认状态下的示例项目(在文件上使用 CreateObjectFromUrl),它运行良好。文件未损坏且许可证有效。我不明白为什么用 CreateObjectFromByteStream( MFCreateFile() ) 替换这段代码不起作用。我几乎找不到涵盖使用自定义字节流或解析器对字节流实例的期望的文档。
如果有人对这些东西有任何经验或知道我做错了什么,将不胜感激。
我正在使用的代码在这里:
IMFByteStream* stream = NULL;
HRESULT hr2 = MFCreateFile(
MF_ACCESSMODE_READ,
MF_OPENMODE_FAIL_IF_NOT_EXIST,
MF_FILEFLAGS_NONE,
L"C:\\IFB.wma",
&stream);
CHECK_HR(hr = pSourceResolver->CreateObjectFromByteStream(
stream,
NULL,
MF_RESOLUTION_MEDIASOURCE,
NULL,
&ObjectType,
&pSource));
我没有包括整个东西,因为它与示例基本相同,我只更改了这一部分。
谢谢,
史蒂夫