- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 SinkWriter 以使用媒体基础对视频进行编码。
在初始化 SinkWriter 之后,我想获取它使用的底层编码器,并打印出它的名称,这样我就可以看到它使用的是什么编码器。 (在我的例子中,编码器很可能是 MF 中包含的 H.264 Video Encoder)。
我可以获得对编码器的 ICodecAPI 和 IMFTransform 接口(interface)的引用(使用 pSinkWriter->GetServiceForStream
),但我不知道如何使用这些接口(interface)获取编码器的友好名称。
有谁知道如何从 sinkwriter 获取编码器的友好名称?或者从它的 ICodecAPI
或 IMFTransform
接口(interface)?
最佳答案
到目前为止,这是一个有效的解决方案,我不能 100% 确定它是否有效,但可以做的是:
1) 在启动时枚举所有可以使用的编解码器(据我所知,在这种情况下是 H264 编码器)并订阅设置更改事件
MFT_REGISTER_TYPE_INFO TransformationOutput = { MFMediaType_Video, MFVideoFormat_H264 };
DWORD nFlags = MFT_ENUM_FLAG_ALL;
UINT32 nCount = 0;
CLSID* pClsids;
MFTEnum( MFT_CATEGORY_VIDEO_ENCODER, nFlags, NULL, &TransformationOutput, NULL, &pClsids, &nCount);
// Ok here we assume nCount is 1 and we got the MS encoder
ICodecAPI *pMsEncoder;
hr = CoCreateInstance(pClsids[0], NULL, CLSCTX_INPROC_SERVER, __uuidof(ICodecAPI), (void**)&pMsEncoder);
// nCodecIds is supposed to be an array of identifiers to distinguish the sender
hr = pMsEncoder->RegisterForEvent(CODECAPI_AVEncVideoOutputFrameRate, (LONG_PTR)&nCodecIds[0]);
2) 不能 100% 确定在设置流的输入媒体类型时是否也设置了帧速率设置,但无论如何您可以尝试在您检索到的 ICodecAPI
上设置相同的属性来自 SinkWriter
。然后在获取事件后,您应该能够通过将 lParam1
与传递的值进行比较来识别编解码器。但这仍然很差,因为它依赖于所有编码器都支持事件通知这一事实,并且如果我关于在流构建时生成事件的假设是错误的,则需要进行不必要的参数更改。
关于c++ - 从 SinkWriter 或 ICodecAPI 或 IMFTransform 获取编码器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946419/
我正在使用 MediaFoundation使用 SharpDX 对来自 desktop duplication frames 的视频文件进行编码. 我正在创建纹理并捕获屏幕。然后将此纹理传递给 MFC
我正在使用 Media Foundation 在一系列过滤器之后从输入 MP4 创建 MP4 (H264 + AAC) 输出文件。视频的创建工作完美,视频在本地复制没有问题。问题在于,当远程执行时(通
我正在尝试将 MP4 文件接收器添加到拓扑。当我的 MediaSource 已经是 MP4 时,我使用 MFCreateMPEG4MediaSink 和 MF_MPEG4SINK_SPSPPS_PAS
我想制作一个 mp4 文件作为接收器写入器。提供msdn样本可以制作视频,但无法制作音频。所以我做了一个搜索并得到了这个来源。但是这个消息来源也没有听到任何声音。这是一个糟糕的来源吗?那么哪里出错了呢
我一直在尝试编写一个小应用程序来为您创建视频,您可以发送自己的图像。为了对视频进行编码,我使用了媒体基础库。 一切正常。我能够创建一个非常短的视频,但是一旦我尝试创建一个大视频,我的应用程序就会开始占
我正在使用 Microsoft Media Foundation 对 H.264 视频文件进行编码。 我正在使用 SinkWriter 创建视频文件。输入是一个缓冲区 (MFVideoFormat_R
我正在使用 SinkWriter 以使用媒体基础对视频进行编码。 在初始化 SinkWriter 之后,我想获取它使用的底层编码器,并打印出它的名称,这样我就可以看到它使用的是什么编码器。 (在我的例
自从我试图让我的编码器工作以来已经一周了...... 所以事情是: 我使用 MF 中的 Sink Writer 创建了一个文件。 我写了我所有的视频样本。 -->(如果我停在那里并调用 Finish
我是一名优秀的程序员,十分优秀!