IMFSourceReaderEx 是 Microsoft Media Foundation 中的一个类。它扩展了 IMFSourceReader 类,提供了用于从视频和音频源读取数据的额外功能。
你可以使用 IMFSourceReaderEx 类来执行以下操作:
- 读取媒体文件中的视频帧和音频帧。
- 获取媒体文件的信息,如宽度、高度、帧速率、比特率等。
- 对媒体文件进行解码和压缩。
- 在读取媒体文件时指定时间偏移。
下面是一个示例代码,展示了如何使用 IMFSourceReaderEx 类读取视频文件:
#include <mfapi.h>
#include <mfidl.h>
#include <mfreadwrite.h>
// 初始化 COM 组件
CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
// 创建 IMFSourceReaderEx 对象
CComPtr<IMFSourceReaderEx> pReader;
MFCreateSourceReaderFromURL(L"video.mp4", nullptr, &pReader);
// 设置读取媒体文件的格式
CComPtr<IMFMediaType> pType;
MFCreateMediaType(&pType);
pType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);
pReader->SetCurrentMediaType((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, 0, pType);
// 循环读取媒体文件中的视频帧
for (;;)
{
// 读取下一帧
CComPtr<IMFSample> pSample;
DWORD dwStreamIndex, dwFlags;
LONGLONG llTimestamp;
if (FAILED(pReader->ReadSample((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, 0, &dwStreamIndex, &dwFlags, &llTimestamp, &pSample)))