首页 > 代码库 > C#使用MediaInfo查看媒体信息

C#使用MediaInfo查看媒体信息

1.将MediaInfo.dll放入可执行目录。

2.将官网Demo里的MediaInfoDLL.cs放入项目中。(http://mediainfo.sourceforge.net/en/Download/Windows有官方的示例代码,你也可以到讨论区http://sourceforge.net/projects/mediainfo/forums/forum/297610
http://code.google.com/hosting/search?q=mediainfo&projectsearch=Search+projects
上也有很多基于mediainfo的开发项目)

技术分享
/*  Copyright (c) MediaArea.net SARL. All Rights Reserved. * *  Use of this source code is governed by a BSD-style license that can *  be found in the License.html file in the root of the source tree. *///+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//// Microsoft Visual C# wrapper for MediaInfo Library// See MediaInfo.h for help//// To make it working, you must put MediaInfo.Dll// in the executable folder////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++using System;using System.Runtime.InteropServices;#pragma warning disable 1591 // Disable XML documentation warningsnamespace MediaInfoLib{    public enum StreamKind    {        General,        Video,        Audio,        Text,        Other,        Image,        Menu,    }    public enum InfoKind    {        Name,        Text,        Measure,        Options,        NameText,        MeasureText,        Info,        HowTo    }    public enum InfoOptions    {        ShowInInform,        Support,        ShowInSupported,        TypeOfValue    }    public enum InfoFileOptions    {        FileOption_Nothing      = 0x00,        FileOption_NoRecursive  = 0x01,        FileOption_CloseAll     = 0x02,        FileOption_Max          = 0x04    };    public enum Status    {        None        =       0x00,        Accepted    =       0x01,        Filled      =       0x02,        Updated     =       0x04,        Finalized   =       0x08,    }    public class MediaInfo    {        //Import of DLL functions. DO NOT USE until you know what you do (MediaInfo DLL do NOT use CoTaskMemAlloc to allocate memory)        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_New();        [DllImport("MediaInfo.dll")]        private static extern void   MediaInfo_Delete(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string FileName);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Open(IntPtr Handle, IntPtr FileName);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Open_Buffer_Init(IntPtr Handle, Int64 File_Size, Int64 File_Offset);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Open(IntPtr Handle, Int64 File_Size, Int64 File_Offset);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Open_Buffer_Continue(IntPtr Handle, IntPtr Buffer, IntPtr Buffer_Size);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Open_Buffer_Continue(IntPtr Handle, Int64 File_Size, byte[] Buffer, IntPtr Buffer_Size);        [DllImport("MediaInfo.dll")]        private static extern Int64  MediaInfo_Open_Buffer_Continue_GoTo_Get(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern Int64  MediaInfoA_Open_Buffer_Continue_GoTo_Get(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Open_Buffer_Finalize(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Open_Buffer_Finalize(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern void   MediaInfo_Close(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Inform(IntPtr Handle, IntPtr Reserved);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Inform(IntPtr Handle, IntPtr Reserved);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, [MarshalAs(UnmanagedType.LPWStr)] string Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] string Value);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoA_Option(IntPtr Handle, IntPtr Option,  IntPtr Value);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_State_Get(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfo_Count_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber);        //MediaInfo class        public MediaInfo()        {            try            {                Handle = MediaInfo_New();            }            catch            {                Handle = (IntPtr)0;            }            if (Environment.OSVersion.ToString().IndexOf("Windows") == -1)                MustUseAnsi=true;            else                MustUseAnsi=false;        }        ~MediaInfo() { if (Handle == (IntPtr)0) return; MediaInfo_Delete(Handle); }        public int Open(String FileName)        {            if (Handle == (IntPtr)0)                return 0;            if (MustUseAnsi)            {                IntPtr FileName_Ptr = Marshal.StringToHGlobalAnsi(FileName);                int ToReturn = (int)MediaInfoA_Open(Handle, FileName_Ptr);                Marshal.FreeHGlobal(FileName_Ptr);                return ToReturn;            }            else                return (int)MediaInfo_Open(Handle, FileName);        }        public int Open_Buffer_Init(Int64 File_Size, Int64 File_Offset)        {            if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Init(Handle, File_Size, File_Offset);        }        public int Open_Buffer_Continue(IntPtr Buffer, IntPtr Buffer_Size)        {            if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size);        }        public Int64 Open_Buffer_Continue_GoTo_Get()        {            if (Handle == (IntPtr)0) return 0; return (Int64)MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle);        }        public int Open_Buffer_Finalize()        {            if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Finalize(Handle);        }        public void Close() { if (Handle == (IntPtr)0) return; MediaInfo_Close(Handle); }        public String Inform()        {            if (Handle == (IntPtr)0)                return "Unable to load MediaInfo library";            if (MustUseAnsi)                return Marshal.PtrToStringAnsi(MediaInfoA_Inform(Handle, (IntPtr)0));            else                return Marshal.PtrToStringUni(MediaInfo_Inform(Handle, (IntPtr)0));        }        public String Get(StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo, InfoKind KindOfSearch)        {            if (Handle == (IntPtr)0)                return "Unable to load MediaInfo library";            if (MustUseAnsi)            {                IntPtr Parameter_Ptr=Marshal.StringToHGlobalAnsi(Parameter);                String ToReturn=Marshal.PtrToStringAnsi(MediaInfoA_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter_Ptr, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch));                Marshal.FreeHGlobal(Parameter_Ptr);                return ToReturn;            }            else                return Marshal.PtrToStringUni(MediaInfo_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch));        }        public String Get(StreamKind StreamKind, int StreamNumber, int Parameter, InfoKind KindOfInfo)        {            if (Handle == (IntPtr)0)                return "Unable to load MediaInfo library";            if (MustUseAnsi)                return Marshal.PtrToStringAnsi(MediaInfoA_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo));            else                return Marshal.PtrToStringUni(MediaInfo_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo));        }        public String Option(String Option, String Value)        {            if (Handle == (IntPtr)0)                return "Unable to load MediaInfo library";            if (MustUseAnsi)            {                IntPtr Option_Ptr=Marshal.StringToHGlobalAnsi(Option);                IntPtr Value_Ptr=Marshal.StringToHGlobalAnsi(Value);                String ToReturn=Marshal.PtrToStringAnsi(MediaInfoA_Option(Handle, Option_Ptr, Value_Ptr));                Marshal.FreeHGlobal(Option_Ptr);                Marshal.FreeHGlobal(Value_Ptr);                return ToReturn;            }            else                return Marshal.PtrToStringUni(MediaInfo_Option(Handle, Option, Value));        }        public int State_Get() { if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_State_Get(Handle); }        public int Count_Get(StreamKind StreamKind, int StreamNumber) { if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Count_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber); }        private IntPtr Handle;        private bool MustUseAnsi;        //Default values, if you know how to set default values in C#, say me        public String Get(StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo) { return Get(StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); }        public String Get(StreamKind StreamKind, int StreamNumber, String Parameter) { return Get(StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); }        public String Get(StreamKind StreamKind, int StreamNumber, int Parameter) { return Get(StreamKind, StreamNumber, Parameter, InfoKind.Text); }        public String Option(String Option_) { return Option(Option_, ""); }        public int Count_Get(StreamKind StreamKind) { return Count_Get(StreamKind, -1); }    }    public class MediaInfoList    {        //Import of DLL functions. DO NOT USE until you know what you do (MediaInfo DLL do NOT use CoTaskMemAlloc to allocate memory)        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_New();        [DllImport("MediaInfo.dll")]        private static extern void MediaInfoList_Delete(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string FileName, IntPtr Options);        [DllImport("MediaInfo.dll")]        private static extern void MediaInfoList_Close(IntPtr Handle, IntPtr FilePos);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_Inform(IntPtr Handle, IntPtr FilePos, IntPtr Reserved);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_GetI(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_Get(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber, [MarshalAs(UnmanagedType.LPWStr)] string Parameter, IntPtr KindOfInfo, IntPtr KindOfSearch);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] string Value);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_State_Get(IntPtr Handle);        [DllImport("MediaInfo.dll")]        private static extern IntPtr MediaInfoList_Count_Get(IntPtr Handle, IntPtr FilePos, IntPtr StreamKind, IntPtr StreamNumber);        //MediaInfo class        public MediaInfoList() { Handle = MediaInfoList_New(); }        ~MediaInfoList() { MediaInfoList_Delete(Handle); }        public int Open(String FileName, InfoFileOptions Options) { return (int)MediaInfoList_Open(Handle, FileName, (IntPtr)Options); }        public void Close(int FilePos) { MediaInfoList_Close(Handle, (IntPtr)FilePos); }        public String Inform(int FilePos) { return Marshal.PtrToStringUni(MediaInfoList_Inform(Handle, (IntPtr)FilePos, (IntPtr)0)); }        public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo, InfoKind KindOfSearch) { return Marshal.PtrToStringUni(MediaInfoList_Get(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch)); }        public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter, InfoKind KindOfInfo) { return Marshal.PtrToStringUni(MediaInfoList_GetI(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo)); }        public String Option(String Option, String Value) { return Marshal.PtrToStringUni(MediaInfoList_Option(Handle, Option, Value)); }        public int State_Get() { return (int)MediaInfoList_State_Get(Handle); }        public int Count_Get(int FilePos, StreamKind StreamKind, int StreamNumber) { return (int)MediaInfoList_Count_Get(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber); }        private IntPtr Handle;        //Default values, if you know how to set default values in C#, say me        public void Open(String FileName) { Open(FileName, 0); }        public void Close() { Close(-1); }        public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter, InfoKind KindOfInfo) { return Get(FilePos, StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); }        public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter) { return Get(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); }        public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter) { return Get(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text); }        public String Option(String Option_) { return Option(Option_, ""); }        public int Count_Get(int FilePos, StreamKind StreamKind) { return Count_Get(FilePos, StreamKind, -1); }    }} //NameSpace
MediaInfoDLL.cs

---- 以下2 个参考看

技术分享
/*  Copyright (c) MediaArea.net SARL. All Rights Reserved. * *  Use of this source code is governed by a BSD-style license that can *  be found in the License.html file in the root of the source tree. *///+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//// Microsoft Visual C# example//// To make this example working, you must put MediaInfo.Dll and Example.ogg// in the "./Bin/__ConfigurationName__" folder// and add MediaInfoDll.cs to your project////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Text;using System.IO;using MediaInfoLib;namespace MediaInfoLib_MSCS{    /// <summary>    /// Summary description for Form1.    /// </summary>    public class Form1 : System.Windows.Forms.Form    {        private System.Windows.Forms.RichTextBox richTextBox1;        /// <summary>        /// Required designer variable.        /// </summary>        private System.ComponentModel.Container components = null;        public Form1()        {            //            // Required for Windows Form Designer support            //            InitializeComponent();            //            // TODO: Add any constructor code after InitializeComponent call            //        }        /// <summary>        /// Clean up any resources being used.        /// </summary>        protected override void Dispose( bool disposing )        {            if( disposing )            {                if (components != null)                {                    components.Dispose();                }            }            base.Dispose( disposing );        }        #region Windows Form Designer generated code        /// <summary>        /// Methode requise pour la prise en charge du concepteur - ne modifiez pas        /// le contenu de cette méthode avec l‘éditeur de code.        /// </summary>        private void InitializeComponent()        {            this.richTextBox1 = new System.Windows.Forms.RichTextBox();            this.SuspendLayout();            //            // richTextBox1            //            this.richTextBox1.Location = new System.Drawing.Point(0, 0);            this.richTextBox1.Name = "richTextBox1";            this.richTextBox1.Size = new System.Drawing.Size(768, 512);            this.richTextBox1.TabIndex = 0;            this.richTextBox1.Text = "";            //            // Form1            //            this.ClientSize = new System.Drawing.Size(770, 514);            this.Controls.Add(this.richTextBox1);            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;            this.Name = "Form1";            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;            this.Text = "How to use MediaInfo.Dll";            this.Load += new System.EventHandler(this.Form1_Load);            this.ResumeLayout(false);        }        #endregion        /// <summary>        /// The main entry point for the application.        /// </summary>        [STAThread]        static void Main()        {            Application.Run(new Form1());        }        private void Form1_Load(object sender, System.EventArgs e)        {            //Test if version of DLL is compatible : 3rd argument is "version of DLL tested;Your application name;Your application version"            String ToDisplay;            MediaInfo MI = new MediaInfo();            ToDisplay = MI.Option("Info_Version", "0.7.0.0;MediaInfoDLL_Example_CS;0.7.0.0");            if (ToDisplay.Length == 0)            {                richTextBox1.Text = "MediaInfo.Dll: this version of the DLL is not compatible";                return;            }            //Information about MediaInfo            ToDisplay += "\r\n\r\nInfo_Parameters\r\n";            ToDisplay += MI.Option("Info_Parameters");            ToDisplay += "\r\n\r\nInfo_Capacities\r\n";            ToDisplay += MI.Option("Info_Capacities");            ToDisplay += "\r\n\r\nInfo_Codecs\r\n";            ToDisplay += MI.Option("Info_Codecs");            //An example of how to use the library            ToDisplay += "\r\n\r\nOpen\r\n";            MI.Open("Example.ogg");            ToDisplay += "\r\n\r\nInform with Complete=false\r\n";            MI.Option("Complete");            ToDisplay += MI.Inform();            ToDisplay += "\r\n\r\nInform with Complete=true\r\n";            MI.Option("Complete", "1");            ToDisplay += MI.Inform();            ToDisplay += "\r\n\r\nCustom Inform\r\n";            MI.Option("Inform", "General;File size is %FileSize% bytes");            ToDisplay += MI.Inform();            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=‘FileSize‘\r\n";            ToDisplay += MI.Get(0, 0, "FileSize");            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=46\r\n";            ToDisplay += MI.Get(0, 0, 46);            ToDisplay += "\r\n\r\nCount_Get with StreamKind=Stream_Audio\r\n";            ToDisplay += MI.Count_Get(StreamKind.Audio);            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=‘AudioCount‘\r\n";            ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");            ToDisplay += "\r\n\r\nGet with Stream=Audio and Parameter=‘StreamCount‘\r\n";            ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");            ToDisplay += "\r\n\r\nClose\r\n";            MI.Close();            //Example with a stream            //ToDisplay+="\r\n"+ExampleWithStream()+"\r\n";            //Displaying the text            richTextBox1.Text = ToDisplay;        }        String ExampleWithStream()        {            //Initilaizing MediaInfo            MediaInfo MI = new MediaInfo();            //From: preparing an example file for reading            FileStream From = new FileStream("Example.ogg", FileMode.Open, FileAccess.Read);            //From: preparing a memory buffer for reading            byte[] From_Buffer = new byte[64*1024];            int    From_Buffer_Size; //The size of the read file buffer            //Preparing to fill MediaInfo with a buffer            MI.Open_Buffer_Init(From.Length, 0);            //The parsing loop            do            {                //Reading data somewhere, do what you want for this.                From_Buffer_Size = From.Read(From_Buffer, 0, 64 * 1024);                //Sending the buffer to MediaInfo                System.Runtime.InteropServices.GCHandle GC = System.Runtime.InteropServices.GCHandle.Alloc(From_Buffer, System.Runtime.InteropServices.GCHandleType.Pinned);                IntPtr From_Buffer_IntPtr = GC.AddrOfPinnedObject();                Status Result = (Status)MI.Open_Buffer_Continue(From_Buffer_IntPtr, (IntPtr)From_Buffer_Size);                GC.Free();                if ((Result & Status.Finalized) == Status.Finalized)                    break;                //Testing if MediaInfo request to go elsewhere                if (MI.Open_Buffer_Continue_GoTo_Get() != -1)                {                    Int64 Position = From.Seek(MI.Open_Buffer_Continue_GoTo_Get(), SeekOrigin.Begin); //Position the file                    MI.Open_Buffer_Init(From.Length, Position); //Informing MediaInfo we have seek                }            }            while (From_Buffer_Size > 0);            //Finalizing            MI.Open_Buffer_Finalize(); //This is the end of the stream, MediaInfo must finnish some work            //Get() example            return "Container format is " + MI.Get(StreamKind.General, 0, "Format");        }    }}
HowToUse_Dll

 

技术分享
/*  Copyright (c) MediaArea.net SARL. All Rights Reserved. * *  Use of this source code is governed by a BSD-style license that can *  be found in the License.html file in the root of the source tree. *///+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//// Microsoft Visual C# example//// To make this example working, you must put MediaInfo.Dll and Example.ogg// in the "./Bin/__ConfigurationName__" folder// and add MediaInfoDll.cs to your project////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++using System;using MediaInfoLib;namespace MediaInfoLib_MSCS{    public class CLI    {        [STAThread]        static void Main(string[] Args)        {            String ToDisplay;            MediaInfo MI = new MediaInfo();            ToDisplay = MI.Option("Info_Version", "0.7.0.0;MediaInfoDLL_Example_CS;0.7.0.0");            if (ToDisplay.Length == 0)            {                Console.Out.WriteLine("MediaInfo.Dll: this version of the DLL is not compatible");                return;            }            //Information about MediaInfo            ToDisplay += "\r\n\r\nInfo_Parameters\r\n";            ToDisplay += MI.Option("Info_Parameters");            ToDisplay += "\r\n\r\nInfo_Capacities\r\n";            ToDisplay += MI.Option("Info_Capacities");            ToDisplay += "\r\n\r\nInfo_Codecs\r\n";            ToDisplay += MI.Option("Info_Codecs");            //An example of how to use the library            ToDisplay += "\r\n\r\nOpen\r\n";            String File_Name;            if (Args.Length == 0)                File_Name = "Example.ogg";            else                File_Name = Args[0];            MI.Open(File_Name);            ToDisplay += "\r\n\r\nInform with Complete=false\r\n";            MI.Option("Complete");            ToDisplay += MI.Inform();            ToDisplay += "\r\n\r\nInform with Complete=true\r\n";            MI.Option("Complete", "1");            ToDisplay += MI.Inform();            ToDisplay += "\r\n\r\nCustom Inform\r\n";            MI.Option("Inform", "General;File size is %FileSize% bytes");            ToDisplay += MI.Inform();            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=‘FileSize‘\r\n";            ToDisplay += MI.Get(0, 0, "FileSize");            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=46\r\n";            ToDisplay += MI.Get(0, 0, 46);            ToDisplay += "\r\n\r\nCount_Get with StreamKind=Stream_Audio\r\n";            ToDisplay += MI.Count_Get(StreamKind.Audio);            ToDisplay += "\r\n\r\nGet with Stream=General and Parameter=‘AudioCount‘\r\n";            ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");            ToDisplay += "\r\n\r\nGet with Stream=Audio and Parameter=‘StreamCount‘\r\n";            ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");            ToDisplay += "\r\n\r\nClose\r\n";            MI.Close();            //Displaying the text            Console.Out.WriteLine(ToDisplay);        }    }}
HowToUse_Dll_CLI.cs

 

---

3.接下来是调用了。

技术分享
//0.视频StreamKind.Video,音频参数StreamKind.Audio,全局参数StreamKind.General Parameter            MediaInfo MI = new MediaInfo();            MI.Open("E:\\Downloads\\测试音频03.mp3");            //1.            string width = MI.Get(StreamKind.Video, 0, "Width");//视频width            string height = MI.Get(StreamKind.Video, 0, "Height");            string s1 = MI.Inform();            //2.            MI.Option("Inform", "General;%Duration%");            string durationL = MI.Inform();            //3.            //MI.Option("Info_Parameters");            string s = MI.Get(StreamKind.Audio, 0, "Duration");//音频时长            MI.Close();            //4.            StringBuilder sb = new StringBuilder();            sb.Append("用mediainfo.dll计算时长:" + TimeSpan.FromMilliseconds(Convert.ToDouble(s)));
View Code

出现"Unable to load MediaInfo library",肯能是DLL 不成功,(可能版本高或者注册下)

4.由MI.Get(StreamKind.Video, 0, "Width")这个函数调用方式可知,我们想查询视频宽度,直接使用width参数就行了,但是视频、音频有大量的参数,我们不可以都猜的到,网上反正我没找到这些参数的介绍,幸好找到了一个方法可以把这些方法遍历出来,参数出来了,就好办了,不明白意思的话google下,基本上就可以把全部参数弄懂了。

 

技术分享
// 遍历Video所有可有参数//如果要遍历Audio的参数,StreamKind.Video换成StreamKind.Audio即可,General同理。string parameter="";//存放所有参数string tempstr;int i=0;while (true){    tempstr = MI.Get(StreamKind.Video, 0, i++, InfoKind.Name);    if (tempstr == "")       {       break;      }    parameter += "\r\n" + tempstr;}
获取参数

 

转  获取参数:http://www.cnblogs.com/royzou/archive/2011/09/06/mediainfo_parameter.html

http://www.cnblogs.com/dudu837/p/4534350.html

http://www.cnblogs.com/grenet/p/3222731.html

 

C#使用MediaInfo查看媒体信息