zoukankan      html  css  js  c++  java
  • 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 warnings
    
    namespace 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 += "
    
    Info_Parameters
    ";
                ToDisplay += MI.Option("Info_Parameters");
    
                ToDisplay += "
    
    Info_Capacities
    ";
                ToDisplay += MI.Option("Info_Capacities");
    
                ToDisplay += "
    
    Info_Codecs
    ";
                ToDisplay += MI.Option("Info_Codecs");
    
                //An example of how to use the library
                ToDisplay += "
    
    Open
    ";
                MI.Open("Example.ogg");
    
                ToDisplay += "
    
    Inform with Complete=false
    ";
                MI.Option("Complete");
                ToDisplay += MI.Inform();
    
                ToDisplay += "
    
    Inform with Complete=true
    ";
                MI.Option("Complete", "1");
                ToDisplay += MI.Inform();
    
                ToDisplay += "
    
    Custom Inform
    ";
                MI.Option("Inform", "General;File size is %FileSize% bytes");
                ToDisplay += MI.Inform();
    
                ToDisplay += "
    
    Get with Stream=General and Parameter='FileSize'
    ";
                ToDisplay += MI.Get(0, 0, "FileSize");
    
                ToDisplay += "
    
    Get with Stream=General and Parameter=46
    ";
                ToDisplay += MI.Get(0, 0, 46);
    
                ToDisplay += "
    
    Count_Get with StreamKind=Stream_Audio
    ";
                ToDisplay += MI.Count_Get(StreamKind.Audio);
    
                ToDisplay += "
    
    Get with Stream=General and Parameter='AudioCount'
    ";
                ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");
    
                ToDisplay += "
    
    Get with Stream=Audio and Parameter='StreamCount'
    ";
                ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");
    
                ToDisplay += "
    
    Close
    ";
                MI.Close();
    
                //Example with a stream
                //ToDisplay+="
    "+ExampleWithStream()+"
    ";
    
                //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 += "
    
    Info_Parameters
    ";
                ToDisplay += MI.Option("Info_Parameters");
    
                ToDisplay += "
    
    Info_Capacities
    ";
                ToDisplay += MI.Option("Info_Capacities");
    
                ToDisplay += "
    
    Info_Codecs
    ";
                ToDisplay += MI.Option("Info_Codecs");
    
                //An example of how to use the library
                ToDisplay += "
    
    Open
    ";
                String File_Name;
                if (Args.Length == 0)
                    File_Name = "Example.ogg";
                else
                    File_Name = Args[0];
                MI.Open(File_Name);
    
                ToDisplay += "
    
    Inform with Complete=false
    ";
                MI.Option("Complete");
                ToDisplay += MI.Inform();
    
                ToDisplay += "
    
    Inform with Complete=true
    ";
                MI.Option("Complete", "1");
                ToDisplay += MI.Inform();
    
                ToDisplay += "
    
    Custom Inform
    ";
                MI.Option("Inform", "General;File size is %FileSize% bytes");
                ToDisplay += MI.Inform();
    
                ToDisplay += "
    
    Get with Stream=General and Parameter='FileSize'
    ";
                ToDisplay += MI.Get(0, 0, "FileSize");
    
                ToDisplay += "
    
    Get with Stream=General and Parameter=46
    ";
                ToDisplay += MI.Get(0, 0, 46);
    
                ToDisplay += "
    
    Count_Get with StreamKind=Stream_Audio
    ";
                ToDisplay += MI.Count_Get(StreamKind.Audio);
    
                ToDisplay += "
    
    Get with Stream=General and Parameter='AudioCount'
    ";
                ToDisplay += MI.Get(StreamKind.General, 0, "AudioCount");
    
                ToDisplay += "
    
    Get with Stream=Audio and Parameter='StreamCount'
    ";
                ToDisplay += MI.Get(StreamKind.Audio, 0, "StreamCount");
    
                ToDisplay += "
    
    Close
    ";
                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 += "
    " + 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

  • 相关阅读:
    【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)
    手势(Gesture)的增加和识别
    [转]C#自定义开关按钮控件--附带第一个私活项目截图
    当年的试用期周工作心得
    FREESWITCH SEESION
    基于三星ARM9(S3C2410)的交通违章抓拍系统的开发
    Apache Kafka: Next Generation Distributed Messaging System---reference
    How and Why Unsafe is Used in Java---reference
    基于keepalived对redis做高可用配置---转载
    Java获取真实的IP地址--转载
  • 原文地址:https://www.cnblogs.com/love201314/p/5829441.html
Copyright © 2011-2022 走看看