=====================================================

MediaInfo源代码分析系列文章列表:

MediaInfo源代码分析 1:整体结构
MediaInfo源代码分析 2:API函数
MediaInfo源代码分析 3:Open()函数
MediaInfo源代码分析 4:Inform()函数
MediaInfo源代码分析 5:JPEG解析代码分析

=====================================================

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

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

//MediaInfo类
class MEDIAINFO_EXP MediaInfo
{
public ://Constructor/DestructorMediaInfo ();~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 neededZenLib::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 readsize_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 suceedsize_t Save ();/// Close a file opened before with Open() (without saving)/// @brief Close a file/// @warning without have saved before, modifications are lostvoid 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 failedsize_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 failedsize_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 buffersize_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 buffersize_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 Donesize_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 kindsize_t                  Count_Get (stream_t StreamKind, size_t StreamNumber=(size_t)-1);private :MediaInfo_Internal* Internal;//ConstructorMediaInfo (const MediaInfo&);                           // Prevent copy-constructionMediaInfo& 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源代码分析 4:Inform()函数

    ===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...

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

    ===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...

  3. MediaInfo源代码分析 5:JPEG解析代码分析

    ===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...

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

    ===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...

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

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

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

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

  7. Windows2000下Api函数的拦截分析

    Windows2000下Api函数的拦截分析 来源:网络 作者: 查看:[大字体 中字体 小字体] 编辑:napl 简介: Api拦截并不是一个新的技术,很多商业软件都采用这种技术.对windows的 ...

  8. Common Lisp 函数 require 和 provide 源代码分析

    2019独角兽企业重金招聘Python工程师标准>>> Common Lisp 函数 require 和 provide 源代码分析 === 涉及文件: l1-files.lisp ...

  9. Media Player Classic - HC 源代码分析 8:RenderFile函数详细分析(CFGManager)

    前面有两篇文章分析了Media Player Classic - HC(mpc-hc)的源代码中的核心类 CMainFrame: Media Player Classic - HC 源代码分析 2:核 ...

最新文章

  1. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法
  2. 科学家研发出“读心术”,直接将脑电波翻译成文本,错误率低至 3%
  3. iOS架构-静态库.framework之依赖第三方库(7)
  4. 翻译 | 摆脱浏览器限制的JavaScript
  5. HTML头部元素标签
  6. Android 对话框(Dialog)大全 建立你自己的对话框
  7. python测试开发实战_《python测试开发实战》基于pytest基础部分实例1-Hello
  8. labelImg 工具
  9. buy low buy lower——伪思考
  10. dhcp服务器分配指定ip,DHCP服务(自动分配IP、绑定固定IP)
  11. 电脑清理代码_网络安全宣传周丨电脑中病毒,这样处置!
  12. 二次元始,跌宕几年,至学术略有成就并步入业界的我与NLP的这七年时光!
  13. 修改android_server默认调试端口号来反调试
  14. 大一高数下册笔记整理_高等数学下册知识点总结.doc
  15. 苹果iPhone手机用iTunes更新IOS14.3系统失败怎么解决
  16. 利用Python绘制三维的规则体(3维柱体、立方体和旋转棱柱)
  17. 这才是在线Word转PDF的正确姿势
  18. antd checkbox 默认选中_antd的CheckBox
  19. 微信小程序 长按事件 删除图片
  20. 软件工程第五次作业——第二次结对编程

热门文章

  1. Bailian2726 采药【模拟】
  2. Bailian4013 中位数【中位数】
  3. Bailian4021 最大乘积【序列处理】
  4. HDU2072 单词数(解法二)【废除!!!】
  5. 计算机设计思想 —— 类比、建模与隐喻(同构)
  6. Python 标准库 csv —— csv 文件的读写
  7. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
  8. 机器学习实战 Tricks
  9. 《论语》《大学》《中庸》和孟子
  10. WinEdt LaTex(二)—— 空心中括号