MediaInfo源代码分析 2:API函数
=====================================================
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函数相关推荐
- MediaInfo源代码分析 4:Inform()函数
===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...
- MediaInfo源代码分析 3:Open()函数
===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...
- MediaInfo源代码分析 5:JPEG解析代码分析
===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...
- MediaInfo源代码分析 1:整体结构
===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...
- Zepto源代码分析之二~三个API
因为时间关系:本次仅仅对这三个API($.camelCase.$.contains.$.each)方法进行分析 第一个方法变量转驼峰:$.camelCase('hello-world-welcome' ...
- Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)
===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...
- Windows2000下Api函数的拦截分析
Windows2000下Api函数的拦截分析 来源:网络 作者: 查看:[大字体 中字体 小字体] 编辑:napl 简介: Api拦截并不是一个新的技术,很多商业软件都采用这种技术.对windows的 ...
- Common Lisp 函数 require 和 provide 源代码分析
2019独角兽企业重金招聘Python工程师标准>>> Common Lisp 函数 require 和 provide 源代码分析 === 涉及文件: l1-files.lisp ...
- Media Player Classic - HC 源代码分析 8:RenderFile函数详细分析(CFGManager)
前面有两篇文章分析了Media Player Classic - HC(mpc-hc)的源代码中的核心类 CMainFrame: Media Player Classic - HC 源代码分析 2:核 ...
最新文章
- LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法
- 科学家研发出“读心术”,直接将脑电波翻译成文本,错误率低至 3%
- iOS架构-静态库.framework之依赖第三方库(7)
- 翻译 | 摆脱浏览器限制的JavaScript
- HTML头部元素标签
- Android 对话框(Dialog)大全 建立你自己的对话框
- python测试开发实战_《python测试开发实战》基于pytest基础部分实例1-Hello
- labelImg 工具
- buy low buy lower——伪思考
- dhcp服务器分配指定ip,DHCP服务(自动分配IP、绑定固定IP)
- 电脑清理代码_网络安全宣传周丨电脑中病毒,这样处置!
- 二次元始,跌宕几年,至学术略有成就并步入业界的我与NLP的这七年时光!
- 修改android_server默认调试端口号来反调试
- 大一高数下册笔记整理_高等数学下册知识点总结.doc
- 苹果iPhone手机用iTunes更新IOS14.3系统失败怎么解决
- 利用Python绘制三维的规则体(3维柱体、立方体和旋转棱柱)
- 这才是在线Word转PDF的正确姿势
- antd checkbox 默认选中_antd的CheckBox
- 微信小程序 长按事件 删除图片
- 软件工程第五次作业——第二次结对编程