一些应该学习的开源框架与库用途和差别

一.播放器层次

这个层次上,是直接可以用的软件,已经做完了一切工作,如果我们需要用他们,是不需要写一行代码的,编译通过就可以拿来使用了,对于国内这些山寨公司来说,基本就是拿来就可以骗钱的档次了。

包括 vlc/mplayer/mpc,这里我只是简介一下,我就不费劲从维基和官网复制东西了,貌似网上其他文章也都是从这两个地方复制了点东西,毫无营养。

其中vlc与mplayer都是跨平台的,都是起源于linux界的大佬,后来逐渐发展到跨平台了。

vlc,插件机制的播放器,非常灵活,但是总觉得这货速度太慢,不过可移植平台比较多,ios/android/win8。。。。等等都有他的身影。

官网:http://www.videolan.org/

维基:http://zh.wikipedia.org/wiki/Vlc

mplayer,单线程,状态机机制的播放器,比较古老,代码有些凌乱。

官网:http://www.mplayerhq.hu/design7/news.html

维基: https://zh.wikipedia.org/wiki/MPlayer

mpc,是windows平台上的开源播放器,基于filter机制,像qq影音/射手播放器/百度影音/.......一系列windows上的播放器,都是脱胎于这个软件。

这套软件不太爽的一点是,只能在windows上运行,不能移植到其他平台,原因是他的使用了windows的directshow框架。

官网:http://mpc-hc.org/

维基:http://zh.wikipedia.org/wiki/Media_Player_Classic

这里有篇文章,是讲述这些播放器的架构与应用的,非常经典。来自射手播放器的博客

链接:http://blog.splayer.org/index.php/2010/03/%E5%AA%92%E4%BD%93%E6%92%AD%E6%94%BE%E4%B8%89%E5%A4%A7%E5%BA%95%E5%B1%82%E6%9E%B6%E6%9E%84%E7%AE%80%E6%9E%90/

二.框架层次

主要包括gsteamer/directshow/openmax

1.gstreamer是基于gnome的基础类库gobject所写的一套,开源多媒体框架。主要针对于linux,当然windows上也可以使用。

基本设计思路类似于directshow,区别只是

gstreamer基本部件是component(组件,demux/codec/access/等,都可以当成一个组件),对directshow来说,对应的概念是filter。

gstreamer各个组件的链接是pipe(管道,组件间传递数据,通信的机制),对directshow来说,对应的概念是pin。

对于这个框架一些比较典型应用就是meego/tizen手机平台上的媒体框架。

2.directshow是微软的推出的windows平台上的媒体框架

详细请戳:http://zh.wikipedia.org/wiki/DirectShow

应用比较广泛,像视频监控上位机,也就是pc端,基本上都得用这个了。另外windows平台的播放器,也基本遵行这个框架的一些概念空间。

xvid/x264两个组织,都把自己的算法库给封装了一套filter,方便兼容到这个平台上。

3.openmax

层次比较gstreamer与directshow低一些,主要用来封装解码库,基本的概念空间也是组件,不过通信方式叫什么tunels(隧道)

典型应用就是android手机平台了,呵呵。(好牛b啊)

对这些框架来说,都是为了方便开发应用准备的,与第一个层次区别就是,第一个层次就是一个单纯的应用,而这个层次,只是提供了一些机制,你可以用这些机制做任何你想要的东西

另外觉得这些开源的家伙太能捣腾了,基本类似的概念空间组合来组合去。让我们这些小菜学得学得头大。

三.库

首先要明确的是,库与框架的区别。

一般来说,框架只用写一些回调函数,应用就能跑起来,类似于mfc的button响应,android的oncreate之流。

库,只是一些功能,你需要自己调用起这些功能。

(一个简单的区别方法是,你用不用自己写main函数,呵呵,相当不科学,不过一般是准确的)

好吧,我觉得我也没说清,呵呵。

ffmpeg/ffshow基本属于这个概念层次的。

ffmpeg是上面介绍的东西的老祖宗,软件/框架,都是依赖这个库来实做的,ffmpeg提供了万能解复用,解码功能,他们只是调用这个库,进行自己需要的封装。

ffshow与ffmpeg的关系更暧昧。对directshow的filter概念空间来说,很多filter要自己写,所以有人就站出来做了这事,开源了,ffshow就是这样的东西。

一句话,用ffmpeg与了一堆filter.

vlc/ffmepg/mplayer/gstreamer/openmax/mpc/ffdshow/directshow的更多相关文章

  1. 音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

    音频视频编程相关:GStreamer/ffmpeg/directshow/vfw linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向. 一.GStreamer ...

  2. VLC说明

    一.简介 vlc的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.video ...

  3. VLC框架分析

      功能部份:VLC媒体播放器的核心是libvlc ,它提供了界面,应用处理功能,如播放列表管理,音频和视频解码和输出,线程系统.所有libvlc源文件设在的/src目录及其子目录:# config/ ...

  4. VLC简介及使用说明

    一.简介    VLC的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.vi ...

  5. (转)一种开源的跨平台视频开发框架:VideoLAN - VLC media player

    VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子.至于为什么叫VideoLan Clien ...

  6. VLC祥解

    功能部份:   VLC媒體播放器的核心是libvlc ,它提供了界面,應用處理功能,如播放列表管理,音頻和視頻解碼和輸出,線程系統.所有libvlc源文件設在的/src目錄及其子目錄:   # con ...

  7. Gstreamer学习

    Gstreamer学习笔记----Gstreamer架构设计思想 http://blog.csdn.net/tx3344/article/details/7497434 Gstreamer到底是个啥? ...

  8. MPlayer 开始支持RTSP/RTP流媒体文件

    hostzhu点评:MPlayer对流媒体的支持,让大家能更进一步地利用linux来看网络直播,对Linux下多媒体应用的推动作用可以说不可度量. RTSP/RTP streaming support ...

  9. libavcodec是一款LGPL自由软件编解码库,用于视频和音频数据的编解码工作

    http://zh.wikipedia.org/zh-cn/Libavcodec http://baike.baidu.com/view/856526.htm libavcodec是一款LGPL自由软 ...

随机推荐

  1. setLayoutParams设置leftMargin后在模拟器上可以真机上不行

    LinearLayout.LayoutParams lp = getLayoutParamsFromExit( (LayoutParams) this.getLayoutParams());      ...

  2. PHP类的自动载入机制

    php的自动加载: 在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 php作者想简单点,最好能引用一个类 ...

  3. 关于不同进制数之间转换的数学推导【Written By KillerLegend】

    关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...

  4. apache+tomcat整合

    一 .Apache与Tomcat的比较 apache支持静态页面,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是 ...

  5. ros-Qt代码环境的搭建

    1 建立package catkin_create_pkg beginner_tutorials roscpp 2 导入Qt Qt中打开整个工作空间的src/CMakeLists.txt 在倒数第二行 ...

  6. android控件之EditText

    EditText继承关系:View-->TextView-->EditTextEditText的属性很多,这里介绍几个:android:hint="请输入数字!"//设 ...

  7. BLOB或TEXT字段使用散列值和前缀索引优化提高查询速度

    1.创建表,存储引擎为myisam,对大文本字段blob使用MD5函数建立一个散列值 create table t2(id varchar(60), content blob, hash_value ...

  8. oracle中事务处理

    事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败. 事务和锁 当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户改表的结构 ...

  9. Daily Scrum 11.9

    摘要:本次的meeting主要是继续讨论程序的问题以及单元测试和集成测试等,本次为1.01版本.本次的Task列表如下: Task列表 出席人员 Today's Task Tomorrow's Tas ...

  10. bnuoj 33648 Neurotic Network(树形模拟题)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=33648 [题解]:结果先对MOD*2取模,才能得到结果是否是正确的奇偶问题,得到最后结果之后再对MO ...