本文主要分析MediaInfo的API函数。它的API函数位于MediaInfo.h文件中的一个叫做MediaInfo的类中。

该类如下所示,部分重要的方法已经加上了注释:

//MediaInfo类
class MEDIAINFO_EXP MediaInfo
{
public :
//Constructor/Destructor
MediaInfo ();
~MediaInfo ();
//File
/// Open a file and collect information about it (technical information and tags)
/// @brief Open a file
/// @param File_Name Full name of file to open
/// @retval 0 File not opened
/// @retval 1 File opened
//打开文件
size_t Open (const String &File_Name);
/// Open a Buffer (Begin and end of the stream) and collect information about it (technical information and tags)
/// @brief Open a buffer
/// @param Begin First bytes of the buffer
/// @param Begin_Size Size of Begin
/// @param End Last bytes of the buffer
/// @param End_Size Size of End
/// @param File_Size Total size of the file
/// @retval 0 File not opened
/// @retval 1 File opened
//打开一段内存!
size_t Open (const ZenLib::int8u* Begin, size_t Begin_Size, const ZenLib::int8u* End=NULL, size_t End_Size=0, ZenLib::int64u File_Size=0);
/// Open a stream and collect information about it (technical information and tags)
/// @brief Open a stream (Init)
/// @param File_Size Estimated file size
/// @param File_Offset Offset of the file (if we don't have the beginning of the file)
/// @retval 0 File not opened
/// @retval 1 File opened
//打开一个流和收集的关于它的信息
size_t Open_Buffer_Init (ZenLib::int64u File_Size=(ZenLib::int64u)-1, ZenLib::int64u File_Offset=0);
/// Open a stream and collect information about it (technical information and tags)
/// @brief Open a stream (Continue)
/// @param Buffer pointer to the stream
/// @param Buffer_Size Count of bytes to read
/// @return a bitfield \n
/// bit 0: Is Accepted (format is known)
/// bit 1: Is Filled (main data is collected)
/// bit 2: Is Updated (some data have beed updated, example: duration for a real time MPEG-TS stream)
/// bit 3: Is Finalized (No more data is needed, will not use further data)
/// bit 4-15: Reserved
/// bit 16-31: User defined
//打开一个流和收集的关于它的信息
size_t Open_Buffer_Continue (const ZenLib::int8u* Buffer, size_t Buffer_Size);
/// Open a stream and collect information about it (technical information and tags)
/// @brief Open a stream (Get the needed file Offset)
/// @return the needed offset of the file \n
/// File size if no more bytes are needed
ZenLib::int64u Open_Buffer_Continue_GoTo_Get ();
/// Open a stream and collect information about it (technical information and tags)
/// @brief Open a stream (Finalize)
/// @retval 0 failed
/// @retval 1 succeed
//打开一个流和收集的关于它的信息
size_t Open_Buffer_Finalize ();
/// If Open() is used in "PerPacket" mode, parse only one packet and return
/// @brief Read one packet (if "PerPacket" mode is set)
/// @return a bitfield \n
/// bit 0: A packet was read
size_t Open_NextPacket ();
/// (NOT IMPLEMENTED YET) Save the file opened before with Open() (modifications of tags)
/// @brief (NOT IMPLEMENTED YET) Save the file
/// @retval 0 failed
/// @retval 1 suceed
size_t Save ();
/// Close a file opened before with Open() (without saving)
/// @brief Close a file
/// @warning without have saved before, modifications are lost
void Close (); //General information
/// Get all details about a file in one string
/// @brief Get all details about a file
/// @param Reserved Reserved, do not use
/// @pre You can change default presentation with Inform_Set()
/// @return Text with information about the file
//返回文件信息
String Inform (size_t Reserved=0); //Get
/// Get a piece of information about a file (parameter is an integer)
/// @brief Get a piece of information about a file (parameter is an integer)
/// @param StreamKind Kind of stream (general, video, audio...)
/// @param StreamNumber Stream number in Kind of stream (first, second...)
/// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in integer format (first parameter, second parameter...)
/// @param InfoKind Kind of information you want about the parameter (the text, the measure, the help...)
/// @return a string about information you search \n
/// an empty string if there is a problem
//获取一部分文件的信息(参数是一个整数)
String Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind=Info_Text);
/// Get a piece of information about a file (parameter is a string)
/// @brief Get a piece of information about a file (parameter is a string)
/// @param StreamKind Kind of stream (general, video, audio...)
/// @param StreamNumber Stream number in Kind of stream (first, second...)
/// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in string format ("Codec", "Width"...) \n
/// See MediaInfo::Option("Info_Parameters") to have the full list
/// @param InfoKind Kind of information you want about the parameter (the text, the measure, the help...)
/// @param SearchKind Where to look for the parameter
/// @return a string about information you search \n
/// an empty string if there is a problem
//获取一部分文件的信息(参数是一个字符串)
String Get (stream_t StreamKind, size_t StreamNumber, const String &Parameter, info_t InfoKind=Info_Text, info_t SearchKind=Info_Name); //Set
/// (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is an integer)
/// @brief (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is an int)
/// @warning Not yet implemented, do not use it
/// @param ToSet Piece of information
/// @param StreamKind Kind of stream (general, video, audio...)
/// @param StreamNumber Stream number in Kind of stream (first, second...)
/// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in integer format (first parameter, second parameter...)
/// @param OldValue The old value of the parameter \n if OldValue is empty and ToSet is filled: tag is added \n if OldValue is filled and ToSet is filled: tag is replaced \n if OldValue is filled and ToSet is empty: tag is deleted
/// @retval >0 succeed
/// @retval 0 failed
size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, size_t Parameter, const String &OldValue=String());
/// (NOT IMPLEMENTED YET) Set a piece of information about a file (parameter is a string)
/// @warning Not yet implemented, do not use it
/// @brief (NOT IMPLEMENTED YET) Set information about a file (parameter is a string)
/// @param ToSet Piece of information
/// @param StreamKind Kind of stream (general, video, audio...)
/// @param StreamNumber Stream number in Kind of stream (first, second...)
/// @param Parameter Parameter you are looking for in the stream (Codec, width, bitrate...), in string format
/// @param OldValue The old value of the parameter \n if OldValue is empty and ToSet is filled: tag is added \n if OldValue is filled and ToSet is filled: tag is replaced \n if OldValue is filled and ToSet is empty: tag is deleted
/// @retval >0 succeed
/// @retval 0 failed
size_t Set (const String &ToSet, stream_t StreamKind, size_t StreamNumber, const String &Parameter, const String &OldValue=String()); //Output_Buffered
/// Output the written size when "File_Duplicate" option is used.
/// @brief Output the written size when "File_Duplicate" option is used.
/// @param Value The unique name of the duplicated stream (begin with "memory://")
/// @return The size of the used buffer
size_t Output_Buffer_Get (const String &Value);
/// Output the written size when "File_Duplicate" option is used.
/// @brief Output the written size when "File_Duplicate" option is used.
/// @param Pos The order of calling
/// @return The size of the used buffer
size_t Output_Buffer_Get (size_t Pos); //Info
/// Configure or get information about MediaInfoLib
/// @param Option The name of option
/// @param Value The value of option
/// @return Depend of the option: by default "" (nothing) means No, other means Yes
/// @post Known options are: \n
/// * (NOT IMPLEMENTED YET) "BlockMethod": Configure when Open Method must return (default or not command not understood: "1") \n
/// "0": Immediatly \n
/// "1": After geting local information \n
/// "2": When user interaction is needed, or whan Internet information is get
/// * "Complete": For debug, configure if MediaInfoLib::Inform() show all information (doesn't care of InfoOption_NoShow tag): shows all information if true, shows only useful for user information if false (No by default)\n
/// * "Complete_Get": return the state of "Complete" \n
/// * "Language": Configure language (default language, and this object); Value is Description of language (format: "Column1;Colum2\n...) \n
/// Column 1: Unique name ("Bytes", "Title") \n
/// Column 2: translation ("Octets", "Titre") \n
/// * "Language_Get": Get the language file in memory
/// * "Language_Update": Configure language of this object only (for optimisation); Value is Description of language (format: "Column1;Colum2\n...) \n
/// Column 1: Unique name ("Bytes", "Title") \n
/// Column 2: translation ("Octets", "Titre") \n
/// * "Inform": Configure custom text, See MediaInfoLib::Inform() function; Description of views (format: "Column1;Colum2...) \n
/// Column 1: code (11 lines: "General", "Video", "Audio", "Text", "Other", "Begin", "End", "Page_Begin", "Page_Middle", "Page_End") \n
/// Column 2: The text to show (exemple: "Audio: %FileName% is at %BitRate/String%") \n
/// * "ParseUnknownExtensions": Configure if MediaInfo parse files with unknown extension\n
/// * "ParseUnknownExtensions_Get": Get if MediaInfo parse files with unknown extension\n
/// * "ShowFiles": Configure if MediaInfo keep in memory files with specific kind of streams (or no streams); Value is Description of components (format: "Column1;Colum2\n...) \n\n
/// Column 1: code (available: "Nothing" for unknown format, "VideoAudio" for at least 1 video and 1 audio, "VideoOnly" for video streams only, "AudioOnly", "TextOnly") \n
/// Column 2: "" (nothing) not keeping, other for keeping
/// * (NOT IMPLEMENTED YET) "TagSeparator": Configure the separator if there are multiple same tags (" | " by default)\n
/// * (NOT IMPLEMENTED YET) "TagSeparator_Get": return the state of "TagSeparator" \n
/// * (NOT IMPLEMENTED YET) "Internet": Authorize Internet connection (Yes by default)
/// * (NOT IMPLEMENTED YET) "Internet_Title_Get": When State=5000, give all possible titles for this file (one per line) \n
/// Form: Author TagSeparator Title TagSeparator Year\n...
/// * (NOT IMPLEMENTED YET) "Internet_Title_Set": Set the Good title (same as given by Internet_Title_Get) \n
/// Form: Author TagSeparator Title TagSeparator Year
/// * "Info_Parameters": Information about what are known unique names for parameters \n
/// * "Info_Parameters_CSV": Information about what are known unique names for parameters, in CSV format \n
/// * "Info_Codecs": Information about which codec is known \n
/// * "Info_Version": Information about the version of MediaInfoLib
/// * "Info_Url": Information about where to find the last version
//配置
String Option (const String &Option, const String &Value=String());
/// Configure or get information about MediaInfoLib
/// @param Option The name of option
/// @param Value The value of option
/// @return Depend of the option: by default "" (nothing) means No, other means Yes
/// @post Known options are: See MediaInfo::Option()
static String Option_Static (const String &Option, const String &Value=String());
/// @brief (NOT IMPLEMENTED YET) Get the state of the library
/// @retval <1000 No information is available for the file yet
/// @retval >=1000_<5000 Only local (into the file) information is available, getting Internet information (titles only) is no finished yet
/// @retval 5000 (only if Internet connection is accepted) User interaction is needed (use Option() with "Internet_Title_Get") \n
/// Warning: even there is only one possible, user interaction (or the software) is needed
/// @retval >5000<=10000 Only local (into the file) information is available, getting Internet information (all) is no finished yet
/// @retval <10000 Done
size_t State_Get ();
/// @brief Count of streams of a stream kind (StreamNumber not filled), or count of piece of information in this stream
/// @param StreamKind Kind of stream (general, video, audio...)
/// @param StreamNumber Stream number in this kind of stream (first, second...)
/// @return The count of fields for this stream kind / stream number if stream number is provided, else the count of streams for this stream kind
size_t Count_Get (stream_t StreamKind, size_t StreamNumber=(size_t)-1); private :
MediaInfo_Internal* Internal; //Constructor
MediaInfo (const MediaInfo&); // Prevent copy-construction
MediaInfo& operator=(const MediaInfo&); // Prevent assignment
};

由代码可见,MediaInfo实际上不仅仅可以读取一个特定路径的文件【Open (const String &File_Name);】

,而且可以读取一块内存中的数据【Open (const ZenLib::int8u* Begin, size_t Begin_Size, const ZenLib::int8u* End=NULL, size_t End_Size=0, ZenLib::int64u File_Size=0)】(这个函数目前还没有使用过)。

如果想要获取完整的信息,可以使用【Inform (size_t Reserved=0)】,并且使用【Option (const String &Option, const String &Value=String())】进行配置。

如果只想获得特定的信息,可以使用【Get (stream_t StreamKind, size_t StreamNumber, size_t Parameter, info_t InfoKind=Info_Text)】。

具体使用方法参见http://blog.csdn.net/leixiaohua1020/article/details/11902195

MediaInfo源代码分析 2:API函数的更多相关文章

  1. MediaInfo源代码分析 3:Open()函数

    我们来看一下MediaInfo中的Open()函数的内部调用过程 首先open函数封装了MediaInfo_Internal类中的open()函数 //打开文件 size_t MediaInfo::O ...

  2. MediaInfo源代码分析 4:Inform()函数

    我们来看一下MediaInfo中的Inform()函数的内部调用过程 首先Inform()函数封装了MediaInfo_Internal类中的Inform()函数 //返回文件信息 String Me ...

  3. MediaInfo源代码分析 1:整体结构

    MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用.免费获得源代码).之前编程的时候,都是直接调用它提供的Dll,这次突然来了兴趣,想研究一下它内部究竟是怎么实现 ...

  4. 1.2. chromium源代码分析 - chromiumframe - 入口函数

    ChromiumFrame的入口函数在main.cpp中,打开main.cpp.中包含3个类和_tWinMain函数._tWinMain就是我们要找的入口函数.我做了部分注释: int APIENTR ...

  5. javascript 引擎Rhino源代码分析 浅析 实例函数对象及this

    http://blog.csdn.net/liantian_wu/article/details/49797481

  6. 【API】恶意样本分析手册——API函数篇

    学编程又有材料了 http://blog.nsfocus.net/malware-sample-analysis-api/

  7. Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)

    ===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...

  8. Zepto源代码分析之二~三个API

    因为时间关系:本次仅仅对这三个API($.camelCase.$.contains.$.each)方法进行分析 第一个方法变量转驼峰:$.camelCase('hello-world-welcome' ...

  9. Media Player Classic - HC 源代码分析 2:核心类 (CMainFrame)(1)

    ===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...

随机推荐

  1. 诡异的XmlSerializer属性字段Specified

    自动生成代码时,往往会为一个字段假设为 * , 生成另一个bool型字段: *Specified: 如: [Serializable] public class A { [XmlElement] pu ...

  2. Android Activity 生命周期详解

    学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...

  3. gulp和webpack初探

    gulp 真正“流程”化工具 我记得实习刚刚进公司看到grunt,还是有点蒙,之前一直是本地开发,游览器F5,没想到前端也需要“编译工具”.所以grunt一直给我的感觉是“编译工具”,你写的很多代码还 ...

  4. 定时生成bat命令

    windows下,定时生成bat的名. at 14:54 cmd /c "echo net share D=d:\ > d:d.bat" ^对>转义.

  5. Python全栈开发之 Mysql (一)

    一: 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库别说我们在写程序的时候创建的database就是一个数据库 2.什么是 MySQL.Oracle.SQLi ...

  6. c++模板实例化的一个例子

    以下是c++模板实例化的一个例子,虽然ObjectList::clear()里面调用的test()函数是没有定义的,但是以下代码能够编译通过,可见ObjectList::clear()未编译: tem ...

  7. 韦东山教程ARM的时钟设置出现的问题及其解决方法

    时钟设置是一个非常重要的环节,如果系统没有合适的时钟,根本无法工作.   S3C2440的时钟复杂,分为FCLK,HCLK,PCLK.    在程序测试中,曾出现这样一个错误.系统当前FCLK为400 ...

  8. asp.net mvc将html编译

    从数据库查询出来的值,如果包含html标签并且通过MVC绑定页面的话,那么他会通过浏览器编译为字符串显示,所以我们有得在从新的转一次: HtmlString hh = new HtmlString(M ...

  9. .NET笔试题(关于迭代的:遍历XML中的FileName)

    一.使用迭代算法,遍历XML文件中所有的文件名 写一个函数返回文件名集合 在主函数中调用该方法: 以后有关迭代的都写到这儿

  10. Phonegap之内存问题

    使用phonegap的拍照功能时,安卓机会出现崩溃现象,这一问题的原因也许是你的手机内存不足,实际上却不是phonegap的问题,它也是原生android apps的一个普遍问题. 产生这一问题是因为 ...