当前位置: 首页 > 工具软件 > MediaInfo > 使用案例 >

java 使用mediainfo_C#使用MediaInfo查看媒体信息

潘璞瑜
2023-12-01

/*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//

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

usingSystem;usingSystem.Runtime.InteropServices;#pragma warning disable 1591 //Disable XML documentation warnings

namespaceMediaInfoLib

{public enumStreamKind

{

General,

Video,

Audio,

Text,

Other,

Image,

Menu,

}public enumInfoKind

{

Name,

Text,

Measure,

Options,

NameText,

MeasureText,

Info,

HowTo

}public enumInfoOptions

{

ShowInInform,

Support,

ShowInSupported,

TypeOfValue

}public enumInfoFileOptions

{

FileOption_Nothing= 0x00,

FileOption_NoRecursive= 0x01,

FileOption_CloseAll= 0x02,

FileOption_Max= 0x04};public enumStatus

{

None= 0x00,

Accepted= 0x01,

Filled= 0x02,

Updated= 0x04,

Finalized= 0x08,

}public classMediaInfo

{//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 externIntPtr MediaInfo_New();

[DllImport("MediaInfo.dll")]private static extern voidMediaInfo_Delete(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static extern IntPtr MediaInfo_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] stringFileName);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoA_Open(IntPtr Handle, IntPtr FileName);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfo_Open_Buffer_Init(IntPtr Handle, Int64 File_Size, Int64 File_Offset);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoA_Open(IntPtr Handle, Int64 File_Size, Int64 File_Offset);

[DllImport("MediaInfo.dll")]private static externIntPtr 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 externInt64 MediaInfo_Open_Buffer_Continue_GoTo_Get(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static externInt64 MediaInfoA_Open_Buffer_Continue_GoTo_Get(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfo_Open_Buffer_Finalize(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoA_Open_Buffer_Finalize(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static extern voidMediaInfo_Close(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfo_Inform(IntPtr Handle, IntPtr Reserved);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoA_Inform(IntPtr Handle, IntPtr Reserved);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfo_GetI(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber, IntPtr Parameter, IntPtr KindOfInfo);

[DllImport("MediaInfo.dll")]private static externIntPtr 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)] stringParameter, IntPtr KindOfInfo, IntPtr KindOfSearch);

[DllImport("MediaInfo.dll")]private static externIntPtr 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)] stringValue);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoA_Option(IntPtr Handle, IntPtr Option, IntPtr Value);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfo_State_Get(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfo_Count_Get(IntPtr Handle, IntPtr StreamKind, IntPtr StreamNumber);//MediaInfo class

publicMediaInfo()

{try{

Handle=MediaInfo_New();

}catch{

Handle= (IntPtr)0;

}if (Environment.OSVersion.ToString().IndexOf("Windows") == -1)

MustUseAnsi=true;elseMustUseAnsi=false;

}~MediaInfo() { if (Handle == (IntPtr)0) return; MediaInfo_Delete(Handle); }public intOpen(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);returnToReturn;

}else

return (int)MediaInfo_Open(Handle, FileName);

}public intOpen_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 intOpen_Buffer_Continue(IntPtr Buffer, IntPtr Buffer_Size)

{if (Handle == (IntPtr)0) return 0; return (int)MediaInfo_Open_Buffer_Continue(Handle, Buffer, Buffer_Size);

}publicInt64 Open_Buffer_Continue_GoTo_Get()

{if (Handle == (IntPtr)0) return 0; return(Int64)MediaInfo_Open_Buffer_Continue_GoTo_Get(Handle);

}public intOpen_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); }publicString 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, intStreamNumber, 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);returnToReturn;

}else

returnMarshal.PtrToStringUni(MediaInfo_Get(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, Parameter, (IntPtr)KindOfInfo, (IntPtr)KindOfSearch));

}public String Get(StreamKind StreamKind, int StreamNumber, intParameter, InfoKind KindOfInfo)

{if (Handle == (IntPtr)0)return "Unable to load MediaInfo library";if(MustUseAnsi)returnMarshal.PtrToStringAnsi(MediaInfoA_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo));else

returnMarshal.PtrToStringUni(MediaInfo_GetI(Handle, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo));

}publicString 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);returnToReturn;

}else

returnMarshal.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); }privateIntPtr Handle;private boolMustUseAnsi;//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) { returnGet(StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); }public String Get(StreamKind StreamKind, int StreamNumber, String Parameter) { returnGet(StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); }public String Get(StreamKind StreamKind, int StreamNumber, int Parameter) { returnGet(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 classMediaInfoList

{//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 externIntPtr MediaInfoList_New();

[DllImport("MediaInfo.dll")]private static extern voidMediaInfoList_Delete(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static extern IntPtr MediaInfoList_Open(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] stringFileName, IntPtr Options);

[DllImport("MediaInfo.dll")]private static extern voidMediaInfoList_Close(IntPtr Handle, IntPtr FilePos);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoList_Inform(IntPtr Handle, IntPtr FilePos, IntPtr Reserved);

[DllImport("MediaInfo.dll")]private static externIntPtr 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)] stringParameter, IntPtr KindOfInfo, IntPtr KindOfSearch);

[DllImport("MediaInfo.dll")]private static extern IntPtr MediaInfoList_Option(IntPtr Handle, [MarshalAs(UnmanagedType.LPWStr)] string Option, [MarshalAs(UnmanagedType.LPWStr)] stringValue);

[DllImport("MediaInfo.dll")]private static externIntPtr MediaInfoList_State_Get(IntPtr Handle);

[DllImport("MediaInfo.dll")]private static externIntPtr 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(intFilePos) { 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) { returnMarshal.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) { returnMarshal.PtrToStringUni(MediaInfoList_GetI(Handle, (IntPtr)FilePos, (IntPtr)StreamKind, (IntPtr)StreamNumber, (IntPtr)Parameter, (IntPtr)KindOfInfo)); }public String Option(String Option, String Value) { returnMarshal.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); }privateIntPtr 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) { returnGet(FilePos, StreamKind, StreamNumber, Parameter, KindOfInfo, InfoKind.Name); }public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, String Parameter) { returnGet(FilePos, StreamKind, StreamNumber, Parameter, InfoKind.Text, InfoKind.Name); }public String Get(int FilePos, StreamKind StreamKind, int StreamNumber, int Parameter) { returnGet(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

 类似资料: