This simple C++ example for using the ltmmMediaInfo object retrieves the source file properties and displays them in message boxes.
#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 specificstrcat(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 specificstrcat(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));elsestrcat(pszMsg, "NA");strcat(pszMsg, " \n");}void AddNumberToMsg(char *pszTitle, double dNumber, char *pszMsg, BOOLbFloat){char szNumber[64];if (bFloat)sprintf(szNumber, "%f", dNumber);elsesprintf(szNumber, "%.f", dNumber);strcat(pszMsg, pszTitle);strcat(pszMsg, szNumber);strcat(pszMsg, " \n");}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
