从字节数组创建 IMFByteStream

2024-01-11

我正在尝试采用一种方法,该方法最初从 Microsoft 的 MediaFoundation 音频播放示例中获取 URL,改为从 const char* 数组中获取源。问题是,CreateObjectFromByteStream 需要 IMFByteStream,而不是 const char*。我怎样才能得到我需要的东西?

// Create a media source from a byte stream
HRESULT CreateMediaSource(const byte *data, IMFMediaSource **ppSource)
{
    MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;

    IMFSourceResolver* pSourceResolver = NULL;
    IUnknown* pSource = NULL;

    // Create the source resolver.
    HRESULT hr = MFCreateSourceResolver(&pSourceResolver);
    if (FAILED(hr))
    {
        goto done;
    }

    // Use the source resolver to create the media source.

    // Note: For simplicity this sample uses the synchronous method to create 
    // the media source. However, creating a media source can take a noticeable
    // amount of time, especially for a network source. For a more responsive 
    // UI, use the asynchronous BeginCreateObjectFromURL method.
    hr = pSourceResolver->CreateObjectFromByteStream(data,
        NULL,                       // URL of the source.
        MF_RESOLUTION_MEDIASOURCE | MF_BYTESTREAM_CONTENT_TYPE,  // Create a source object.
        NULL,                       // Optional property store.
        &ObjectType,        // Receives the created object type. 
        &pSource            // Receives a pointer to the media source.
        );
    if (FAILED(hr))
    {
        goto done;
    }

    // Get the IMFMediaSource interface from the media source.
    hr = pSource->QueryInterface(IID_PPV_ARGS(ppSource));

done:
    SafeRelease(&pSourceResolver);
    SafeRelease(&pSource);
    return hr;
}

您可以使用MFCreateMFByteStreamOnStream()创建一个IMFByteStream从一个IStream你可以创建并IStream使用字节数组SHCreateMemStream()。撰写本文时的文档位于https://learn.microsoft.com/en-us/windows/win32/api/mfidl/nf-mfidl-mfcreatemfbytestreamonstream https://learn.microsoft.com/en-us/windows/win32/api/mfidl/nf-mfidl-mfcreatemfbytestreamonstream and https://learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-shcreatememstream https://learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-shcreatememstream

这是一个简单的例子:

// Generate a byte array
int sample_size = 0x100;
BYTE* sample_bytes = (BYTE*)malloc(sample_size)

// Create the IStream from the byte array
IStream* pstm = SHCreateMemStream(sample_bytes, sample_size);

// Create the IMFByteStream from the IStream
IMFByteStream* pibs = NULL;
MFCreateMFByteStreamOnStream(pstm, &pibs);

// Clean up time
if (pibs)
    pibs->Close();
if (pstm)
    pstm->Release();
if (sample_bytes)
    free(sample_bytes)

在 Microsoft API 中,具有 IStream 接口但没有字节数组接口的情况似乎很常见。值得庆幸的是,创建 IStream 很容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从字节数组创建 IMFByteStream 的相关文章

  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配

随机推荐

  • 如何在 Silverlight 中通过名称获取 DependencyProperty?

    情况 我有一个字符串 表示 Silverlight 中 TextBox 的 DependencyProperty 的名称 例如 文本属性 我需要获取对 TextBox 的实际 TextProperty 的引用 它是一个 Dependency
  • 使用单个事件处理程序检测元素内部/外部的单击

    假设我的页面中有一个 div 如何通过 JavaScript 或 JQuery 检测用户点击 div 内容或 div 内容之外 请帮忙处理小代码片段 谢谢 Edit 正如下面的答案之一所述 我只想将事件处理程序附加到我的主体 并且还想知道单
  • 从 pdf 中提取文本的最佳 Perl 模块是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Linux 脚本检查进程是否正在运行并对结果采取行动

    我有一个经常失败的进程 有时会启动重复的实例 当我跑步时 ps x grep v grep grep c processname 我会得到 2这是正常的 因为该进程与恢复进程一起运行 如果我有0我想开始这个过程 如果我有 4我想停止并重新启
  • 使用 ruby​​ 将 unicode 转换为字符

    我找到了unicode的汉字词典 我正在尝试用这本字典建立一个字符数据库 但我不知道如何将 unicode 转换为字符 p 国 unpack U first this gives the unicode 22269 怎样才能转换22269返
  • Python os.forkpty 为什么我不能让它工作

    import pty import os import sys import time pid fd os forkpty if pid 0 Slave os execlp su su MYUSERNAME c id Master prin
  • 如何使用 Go 驱动程序在 Mattermost 中从机器人发送直接消息?

    使用 Mattermost 的 Go 驱动程序 是否可以从机器人帐户向用户发送直接消息 我一直在尝试下面的这种方法 但我不断收到错误 您没有适当的权限 我已经多次检查了机器人的权限 它应该能够发送消息 我已经确认它也可以将消息发送到公共渠道
  • Android 在首选项中存储数组

    我知道只有原语可以存储在android首选项中 但是数组算吗 我可以在 Android 首选项中存储字符串或布尔值数组吗 仅当将数组转换为字符串时
  • 如何在 RNN 中嵌入句子序列?

    我正在尝试制作一个 RNN 模型 在 Pytorch 中 它需要几个句子 然后将其分类为Class 0 or Class 1 为了解决这个问题 我们假设句子的 max len 为 4 max amount of time steps 为 5
  • 更改 ListView 中 GridView 行的背景颜色

    我有一个列表视图如下
  • 为什么不使用抽象类而不是接口?

    我正在考虑使用带有所有抽象成员的抽象类而不是接口 以避免显式接口实现样板代码 所以而不是 type IMyInterface abstract Name string abstract Text string type MyClass me
  • 从具有多个结果的矩阵构建地图

    我有一个未知 n x m 维度的输入矩阵 由 1 和 0 填充 例如 5x4 矩阵 A array 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 1 0 1 1 Goal 我需要在之间创建 1 1 地图as many尽可能
  • VS 链接器失败,并出现 std::string 方法的“对象已存在”错误

    首先 我必须强调 我已经尝试了相当长的时间来解决它 但我不知道我错过了什么 或更准确地说 我不明白什么 任何帮助将不胜感激 我有一个名为 static tools 的项目 它编译为静态库 称为静态工具库并且它使用STL 我使用 MD 编译该
  • 查询 std::ostringstream 内容

    是否可以搜索内容std ostringstream不使用std ostringstream str 成员函数创建一个std string寻找 我有以下内容并希望避免构建std string每次调用时都会实例化flush include
  • 在android中将textview放在imageview之上

    我有一个listview 有一个单一的imageview这是 可垂直滚动 我正在尝试放置一个textview在之上Imageview 两个视图都必须可见 是否可以 如果是 如何以编程方式执行 我需要做出哪些改变 list view item
  • 发送 HTTP 标头后,服务器无法修改 cookie

    我正在用 C 创建一个 Web 应用程序 当我的页面加载时 我会触发一个异步线程来处理一些数据 此处理的一部分是更新 cookie 但是 当我将 cookie 保存到响应中时 System Web HttpContext Current R
  • 将单列拆分为四列并计算 R 中的重复模式

    该项目的目的是了解在观察物体时如何获取信息 想象一个对象有这样的元素a b c d e and f 一个人可能会看a并移至b等等 现在 我们希望绘制并了解该人如何浏览给定刺激的不同元素 我有在单列中捕获此运动的数据 但我需要将其分成几列才能
  • SQL随机数不起作用

    declare fieldForceCounter as int declare SaleDate as dateTime declare RandomNoSeed as decimal set fieldForceCounter 1 se
  • 如何从 .csv 文件读取字符串并拆分它?

    我有一个 csv 文件 我必须从中读取一个字符串并将其拆分为子字符串 例如 s1 s2 s3 然后我必须把它分成s1 s2 s3 根据 进行拆分 好吧 尝试以下 beanshell java 代码将提取的 subjects string 变
  • 从字节数组创建 IMFByteStream

    我正在尝试采用一种方法 该方法最初从 Microsoft 的 MediaFoundation 音频播放示例中获取 URL 改为从 const char 数组中获取源 问题是 CreateObjectFromByteStream 需要 IMF