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
---- 以下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"); } } }
/* 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); } } }
---
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)));
出现"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