Information about a file or a stream is located into "info" node of an MFile or an MFReader object properties. The node contains parameters and their values and sub-nodes (for example, information about each video or audio track). So to get the information you should use a recursive method.
Note that the code is common for both MFile and MFReader objects.
Method to get information
private void GetFileInfo(string propertyNode)
{
int nCount = 0;
try
{
// get a number of properties
m_objMFReader.PropsGetCount(propertyNode, out nCount);
}
catch (Exception) { }
for (int i = 0; i < nCount; i++)
{
string sName;
string sValue;
int bNode = 0;
m_objMFReader.PropsGetByIndex(propertyNode, i, out sName, out sValue, out bNode);
// bNode flag indicates whether there are internal properties
// to collect a full node name we should separated it with "::", e.g. "info::video.0"
string sRelName = propertyNode.Length > 0 ? propertyNode + "::" + sName : sName;
if (bNode != 0)
{
GetFileInfo(sRelName); // call the method recursively in case of sub-nodes
}
else
{
fileInfo += sRelName + " = " + sValue + Environment.NewLine;
}
}
}
How to use the method?
// declare a string that contains information
private string fileInfo = string.Empty;
// call the method
GetFileInfo("");
Common fields
| Property name | Description |
|---|---|
| ts_programs | number of programs for multi-program transport stream |
| subtitle_tracks | number of subtitle tracks in the file |
| video_tracks | number of video tracks |
| audio_tracks | number of audio tracks |
| streams | total number of streams |
| format | file format |
| format_name | full name of the format |
| network | indicates whether the file is network stream or not |
| bitrate | bitrate of the file |
| video | this node contains information about the video track (height, width, codec, aspect ratio etc.). If the file contains more than one video track then nodes names are "video.0", "video.1" etc. |
| audio | this node contains information about the audio track (format, channels, codec etc.). If the file contains more than one audio track then nodes names are "audio.0", "audio.1" etc. |
| subtitle | this node contains information about subtitle track. If the file contains more than one subtitle track then nodes' names are "subtitle.0", "subtitle.1" etc. |
| ts_program | this node contain information about program for multi program transport stream (audio, video, program information). If ts_programs>0 then then nodes' names are "ts_program.0", "ts_program.1" etc. |
| duration | file duration in seconds. |
| start_time | file start time. |
| size | file size. |
| metadata | file metadata. May contain additional names divided by ".". |
| ts_program.used | Index of transport stream program that is currently used. |
| video_track.used | Index of the video track that is currently used. |
| audio_track.used | Index of the audio track that is currently used. |
| subtitle_track.used | Index of the subtitle track that is currently used. |
Other objects
The above method can be used to get all the available properties for any objects in MFormats and MPlatform SDKs.
Still have questions?
Tell us what didn’t work or what you’d like clarified.