This simple C++ example for using the ltmmMediaInfo object retrieves the source file properties and displays them in message boxes.
#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\LEADTOOLS 17.5\\Media\\")TEXT(pFileName)) #include "ltmm.h" #include <atlbase.h> #include <atlconv.h> void AddStringToMsg(char *pszTitle, BSTR sString, char *pszMsg); void AddNumberToMsg(char *pszTitle, double dNumber, char *pszMsg, BOOL bFloat); int main() { IltmmMediaInfo *pMediaInfo; BSTR sString; char szMsg[8196]; long lStreams, lIndex, l; double d; USES_CONVERSION; CoInitialize(NULL); // create an ltmmMediaInfo object: HRESULT hr = CoCreateInstance(CLSID_ltmmMediaInfo, NULL, CLSCTX_INPROC_SERVER, IID_IltmmMediaInfo, (void**)&pMediaInfo); if (FAILED(hr)) return FALSE; memset(szMsg, 0, 8196); // set the source file: sString = SysAllocString(MAKE_MEDIA_PATH("Test.avi")); pMediaInfo->put_SourceFile(sString); SysFreeString(sString); // general properties: pMediaInfo->get_SourceFile(&sString); AddStringToMsg("Source file: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_SourceFileSize(&d); AddNumberToMsg("File size: ", d, szMsg, FALSE); pMediaInfo->get_OutputStreams(&lStreams); AddNumberToMsg("Number of streams: ", (double)lStreams, szMsg, FALSE); pMediaInfo->get_SourceDuration(&d); AddNumberToMsg("File duration: ", d, szMsg, TRUE); pMediaInfo->get_SourceBitRate(&l); AddNumberToMsg("Source BitRate : ", (double)l, szMsg, FALSE); pMediaInfo->get_SourceFormat(&l); AddNumberToMsg("Source format: ", (double)l, szMsg, FALSE); pMediaInfo->get_SourceFormatName(&sString); AddStringToMsg("Source format name: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_SourceFilterClassID(&sString); AddStringToMsg("Source filter CLSID: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_SourceFilterName(&sString); AddStringToMsg("Source filter name: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_Title(&sString); AddStringToMsg("Title: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_Author(&sString); AddStringToMsg("Author: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_Description(&sString); AddStringToMsg("Description: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_Rating(&sString); AddStringToMsg("Rating: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_Copyright(&sString); AddStringToMsg("Copyright: ", sString, szMsg); SysFreeString(sString); MessageBox(NULL, A2BSTR(szMsg), TEXT("MediaInfo Sample: General..."), MB_OK); // stream properties: for (lIndex=0; lIndex<lStreams; lIndex++) { memset(szMsg, 0, 8196); pMediaInfo->put_CurrentStream(lIndex); pMediaInfo->get_CurrentStream(&l); AddNumberToMsg("Stream number: ", (double)l, szMsg, FALSE); pMediaInfo->get_StreamType(&sString); AddStringToMsg("Stream type: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_StreamTypeName(&sString); AddStringToMsg("Stream type name: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_StreamSubtype(&sString); AddStringToMsg("Stream subtype: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_StreamSubtypeName(&sString); AddStringToMsg("Stream subtype name: ", sString, szMsg); SysFreeString(sString); pMediaInfo->get_StreamDuration(&d); AddNumberToMsg("Stream duration: ", d, szMsg, TRUE); // video specific strcat(szMsg, "\n"); strcat(szMsg, "\t*** Video specific properties ***\n"); pMediaInfo->get_VideoFrameRate(&d); AddNumberToMsg("Video frame rate: ", d, szMsg, TRUE); pMediaInfo->get_VideoWidth(&l); AddNumberToMsg("Video width: ", (double)l, szMsg, FALSE); pMediaInfo->get_VideoHeight(&l); AddNumberToMsg("Video height: ", (double)l, szMsg, FALSE); pMediaInfo->get_VideoBitCount(&l); AddNumberToMsg("Video bit count: ", (double)l, szMsg, FALSE); pMediaInfo->get_VideoCompression(&l); AddNumberToMsg("Video compression: ", (double)l, szMsg, FALSE); pMediaInfo->get_VideoBitRate(&l); AddNumberToMsg("Video bit rate: ", (double)l, szMsg, FALSE); pMediaInfo->get_VideoFrames(&l); AddNumberToMsg("Video frames count: ", (double)l, szMsg, FALSE); // Audio specific strcat(szMsg, "\n"); strcat(szMsg, "\t*** Audio specific properties ***\n"); pMediaInfo->get_AudioFormatTag(&l); AddNumberToMsg("Audio format tag: ", (double)l, szMsg, FALSE); pMediaInfo->get_AudioChannels(&l); AddNumberToMsg("Audio channels: ", (double)l, szMsg, FALSE); pMediaInfo->get_AudioSamplesPerSec(&l); AddNumberToMsg("Audio frequency: ", (double)l, szMsg, FALSE); pMediaInfo->get_AudioBitsPerSample(&l); AddNumberToMsg("Audio sample size: ", (double)l, szMsg, FALSE); pMediaInfo->get_AudioAvgBytesPerSec(&l); AddNumberToMsg("Audio average bytes per second: ", (double)l, szMsg, FALSE); MessageBox(NULL, A2BSTR(szMsg), TEXT("MediaInfo Sample: Streams..."), MB_OK); } pMediaInfo->ResetSource(); pMediaInfo->Release(); CoUninitialize(); return 0; } void AddStringToMsg(char *pszTitle, BSTR sString, char *pszMsg) { USES_CONVERSION; strcat(pszMsg, pszTitle); if (sString) strcat(pszMsg, W2A(sString)); else strcat(pszMsg, "NA"); strcat(pszMsg, " \n"); } void AddNumberToMsg(char *pszTitle, double dNumber, char *pszMsg, BOOL bFloat) { char szNumber[64]; if (bFloat) sprintf(szNumber, "%f", dNumber); else sprintf(szNumber, "%.f", dNumber); strcat(pszMsg, pszTitle); strcat(pszMsg, szNumber); strcat(pszMsg, " \n"); }