代码中以视频分辨率为例演示了使用 MediaFoundation 获取视频文件的信息,需要什么信息,换 GUID 即可。注意根据文档,有些信息可能在 IMFMediaType 中没有设置,此时 IMFMediaType 并不会有默认值,所以只要获取了到就一定是有效的。
需要链接的 lib 在图片下方
需要链接的 lib:
mfreadwrite.lib
mf.lib
mfplat.lib
mfuuid.lib
#include <Windows.h>
#include <cstdio>
#include <iostream>
#include <mfapi.h>
#include <mfidl.h>
#include <mfreadwrite.h>
#include <Mferror.h>
#include <iostream>
#include <atlbase.h>
using namespace std;
int main()
{
const WCHAR* pszURL = L"tim2.mp4";
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
hr = MFStartup(MF_VERSION);
if (SUCCEEDED(hr))
{
CComPtr <IMFSourceReader> pReader;
hr = MFCreateSourceReaderFromURL(pszURL, NULL, &pReader);//Mfreadwrite.lib
if (SUCCEEDED(hr))
{
hr = pReader->SetStreamSelection(MF_SOURCE_READER_FIRST_VIDEO_STREAM, TRUE);
if (SUCCEEDED(hr))
{
CComPtr<IMFMediaType> pType = NULL;
hr = pReader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_VIDEO_STREAM, &pType);
if (SUCCEEDED(hr))
{
UINT32 w;
UINT32 h;
hr = MFGetAttributeSize(pType, MF_MT_FRAME_SIZE, &w, &h);
cout << w << " " << h << endl;
}
}
}
MFShutdown();
}
CoUninitialize();
}
return 0;
}