gpt4 book ai didi

c++ - 使用 IMFSourceResolver::CreateObjectFromByteStream

转载 作者:行者123 更新时间:2023-11-28 01:10:58 27 4
gpt4 key购买 nike

我正在尝试使用 IMFSourceResolver::CreateObjectFromByteStream 方法为受 DRM 保护的 WMA 文件创建 IMFMediaSource 实例。我正在将 Windows SDK 中的 ProtectedPlayback 示例改编为 Playground 。我希望实现的最终目标是让播放过程由自定义实现提供,如果我将编写 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));

我没有包含全部内容,因为它与示例基本相同,我只更改了这部分。

谢谢,

史蒂夫

最佳答案

@pisomojado

感谢您的回复,我完全忘记了我已经发布了这个问题。

问题是,如果我没记错的话,CreateObjectFromByteStream 需要一种方法来识别内容类型。您可以通过传入 URL 以及字节流实例(pwszURL 参数)或通过使字节流类实现 IMFAttributes 并处理对请求内容类型的 GetAllocatedString 的调用来执行此操作。由于我没有做这些事情,解析器只是拒绝流。

我原以为解析器会像您在回答中建议的那样尝试通过前几个字节来识别流内容类型,但对我来说似乎并没有这样做。不知道这是为什么,但没关系。

史蒂夫

关于c++ - 使用 IMFSourceResolver::CreateObjectFromByteStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3281205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com