MediaInfo源代码分析 1:整体结构
MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用、免费获得源代码)。之前编程的时候,都是直接调用它提供的Dll,这次突然来了兴趣,想研究一下它内部究竟是怎么实现的。
MediaInfo的源文件可以从Sourceforge上面下载,地址:http://sourceforge.net/projects/mediainfo/
在这里我使用的是 Media Player Classic (MPC-HC)源代码自带的MediaInfo库,内容应该都是一样的。
MPC-HC把MediaInfo整合到了它的“属性”选项卡中。
使用VC2010打开MPC-HC之后,可以看到MediaInfo的库的源代码如下图所示:
展开Source Files(文件太多,截图竟然截不下来= =):
在此首先介绍几个我已知的几个文件夹中的源代码的功能:
Archive:支持的各种压缩文档,由图可见包括7z,rar,zip,tar等格式
Audio:支持的各种音频编码方式,由图可见包括aac,ac3,ape等等
Duplicate:不知道干啥的
Export:设置导出的格式,由图可见可以导出为MPEG7格式
Image:支持的图片压缩编码方式,由图可见包括bmp,jpeg,等格式
Muitiple:支持的文件封转格式。由图可见包括flv,mp4,mkv等格式
Reader:支持的输入方式。我一直以为MediaInfo只支持文件输入,后来发现还支持MMS这样的流媒体输入
Tag:支持的标签,包括idv3等等
Text:支持的文本。这个用的比较少
Video:支持的视频编码。由图可见包括H.264,H.263等。令人瞩目的是,也支持HEVC。
先分析这么多吧,以后有空再写。
MediaInfo源代码分析 1:整体结构的更多相关文章
- MediaInfo源代码分析 3:Open()函数
		我们来看一下MediaInfo中的Open()函数的内部调用过程 首先open函数封装了MediaInfo_Internal类中的open()函数 //打开文件 size_t MediaInfo::O ... 
- MediaInfo源代码分析 2:API函数
		本文主要分析MediaInfo的API函数.它的API函数位于MediaInfo.h文件中的一个叫做MediaInfo的类中. 该类如下所示,部分重要的方法已经加上了注释: //MediaInfo类 ... 
- MediaInfo源代码分析 4:Inform()函数
		我们来看一下MediaInfo中的Inform()函数的内部调用过程 首先Inform()函数封装了MediaInfo_Internal类中的Inform()函数 //返回文件信息 String Me ... 
- Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)
		===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ... 
- Media Player Classic - HC 源代码分析 1:整体结构
		===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ... 
- LIRe 源代码分析 1:整体结构
		===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ... 
- Media Player Classic - HC 源代码分析 7:详细信息选项卡(CPPageFileInfoDetails)
		===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ... 
- Media Player Classic - HC 源代码分析 5:关于对话框 (CAboutDlg)
		===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ... 
- Media Player Classic - HC 源代码分析 4:核心类 (CMainFrame)(3)
		===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ... 
随机推荐
- <php>统计整个文件夹的大小
			//用来统计一个目录下大小 function dirsize($file) { $size = 0; $dir = opendir($file); while($filename = readdir( ... 
- myeclipse实现Servlet实例(1) 通过继承servlet接口实现
			1.在myeclipse新建web project,配置Tomcat(在myeclipse的Window--preferences) 2.然后在src新建servlet文件( 此处放在com.tsin ... 
- 使用vue-cli脚手架安装的eslint 容易犯错的地方
			1. 函数名字与括号之间要有空格. 2. 不要使用双引号 3. 不要有多月的空行 4.函数参数的逗号后要有空格 5.每个结束语句以后不用加“分号” 
- (转)iOS7界面设计规范(1) - UI基础 - 为iOS7而设计
			今天开个新坑.其实老早就想做这事儿了.记得前一两年,苹果官方还会在开发者中心提供中文的HIG(Human Interface Guideline),后来给没了:网上能够找到的中文版本不知是官方还是同行 ... 
- Laravel-表单篇-零散信息
			1.asset('path'):用于引入静态文件,包括css.js.img 2.分页,调用模型的paginate(每页显示的行数)方法, 如$student = Student::paginate(2 ... 
- iOS学习之 plist文件的读写
			在做iOS开发时,经经常使用到到plist文件, 那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.pli ... 
- 使用PLSql连接Oracle时报错ORA-12541: TNS: 无监听程序
			非常多时候为了优化我们的启动项把oracle的服务禁止了.但是重新启动启动之后使用PLSQL登陆oracle时会出现无监听程序,这说明我们有一些服务没有启动.我们先查看一下oracle的服务是否启动, ... 
- Android HOME纽带,BACK主要采集和响应
			1.onUserLeaveHint 相比Home键(HOME)而近期应用的关键(APP_SWITCH)治,回车键很简单.复onKeyDown可以实现,如以下: @Override public boo ... 
- C++11下的线程池以及灵活的functional + bind + lamda
			利用boost的thread实现一个线程类,维护一个任务队列,以便可以承载非常灵活的调用.这个线程类可以方便的为后面的线程池打好基础.线程池还是动态均衡,没有什么别的.由于minGW 4.7 对 C+ ... 
- asp.net mvc 页面缓存
			在任务中需要实现点击浏览器back按钮,加载的前一页面需要强制刷新. 想要在前端通过js来绑定数据实现,但是觉得太麻烦,还是用另一种方式来解决: 不缓存该页面. 简单易懂: Response.Cach ... 
