IMFSinkWriter :请求无效,因为已调用 Shutdown()

Posted

技术标签:

【中文标题】IMFSinkWriter :请求无效,因为已调用 Shutdown()【英文标题】:IMFSinkWriter : The request is invalid because Shutdown() has been called 【发布时间】:2020-08-14 02:56:00 【问题描述】:

只是测试一些简单的音频到 mp3 的东西。

我正在尝试使用 IMFSinkWriter,对音频进行实际编码并将其保存到磁盘。

我什至无法正确创建 IMFSinkWriter。 这一定是一些菜鸟问题或一个非常奇怪的错误......

#include <iostream>
#include <mfidl.h>
#include <Mfreadwrite.h>
#pragma comment(lib, "Mfreadwrite.lib")
int main()

    IMFSinkWriter* pSinkWriter;
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    std::cout << std::system_category().message(hr) << "\n";
    hr = MFCreateSinkWriterFromURL(L"Recording.mp3", NULL, NULL, &pSinkWriter);
    std::cout << std::system_category().message(hr) << "\n";
    system("pause");

输出:

操作成功完成。

请求无效,因为已调用 Shutdown()。

按任意键继续。 . .

我可能需要调用“CoCreateInstance(__uuidof(SOMETHING), NULL, CLSCTX_ALL, __uuidof(IMFSinkWriter), (void**)&pSinkWriter);”,但我不确定 SOMETHING 应该是什么,或其他原因可能是。

谢谢。

【问题讨论】:

【参考方案1】:

需要调用“MFStartup(MF_VERSION)”:

IMFSinkWriter* pSinkWriter;
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
std::cout << std::system_category().message(hr) << "\n";
hr = MFStartup(MF_VERSION);
std::cout << std::system_category().message(hr) << "\n";
hr = MFCreateSinkWriterFromURL(L"Recording.mp3", NULL, NULL, &pSinkWriter);
std::cout << std::system_category().message(hr) << "\n";
system("pause");

输出:

操作成功完成。

操作成功完成。

操作成功完成。

按任意键继续。 . .

【讨论】:

以上是关于IMFSinkWriter :请求无效,因为已调用 Shutdown()的主要内容,如果未能解决你的问题,请参考以下文章

使用 IMFSinkWriter 编码的视频的播放速度根据宽度变化

IIS 无法访问请求的页面,因为该页的相关配置数据无效。

IMFSinkWriter 中的错误?

使用 IMFSinkWriter 更改标题、作者等元数据

通过 ICodecAPI 为 H.264 IMFSinkWriter 编码器设置属性

媒体基础 MP4 编码:IMFSinkWriter 不接受 PCM 输入