2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后说会开源一个播放器,没想到快两年了,才有时间发博客。

    两年前的博客和大部分博客一样,以结果为主,也就是开源一个软件,直接把代码一扔,效果图一截,发一篇介绍性的博客就完事,里面没有任何技术分析。而Alberl在学习的过程中,虽然找到的绝大部分资料也都是这种类型的,帮助也很大,但还是感觉缺点什么。这就是Alberl喜欢CodeProject的原因,因为几乎每一篇文章都提供了以下资料:1、源码下载。 2、使用教程、3、技术分析。 这样不管是新手还是高手,都可以得到自己想要的。  但是国内的资料连第一点都很难做到,就更别说后面的了。 所以Alberl要是开源个什么东西,会尽量向这三点靠拢。
    不过本节教程除外~O(∩_∩)O~,因为ffmpeg实在是个蛋疼的东西,下面会有介绍~~~
    唠叨完毕,进入正题:
 
一、ffmpeg资料 -- 无语
       2011年, 看的是2003年的这个教程http://dranger.com/ffmpeg/。 2013年的时候,还是只有这个教程,就算是谷歌【ffmpeg Tutorial】,第一篇出来的还是这个家伙,说明连英文资料都少(Aberl没有仔细去找啦)。
       人家dranger.com上用这么大的字体说了这个教程已经过时了,但国内现在还是到处转载这个教程,并且人家有8个教程,不知道翻译过来怎么只有7个了。
      其实过时不是最重要的,毕竟现在国内绝大部分资料都是10年前老外就玩过的,重要的是,ffmpeg的封装性太差,每隔一段时间就会升级,换API,所以导致很多人按那8个教程来做,要么错误太多,要么编译通过但是运行不正确。而国内某视频论坛居然最新的SDK还是2006年的,但是有什么办法呢,好歹能正常运行啊,就只能用这个了。
      不过值得欣慰的是,2013年Alberl再找资料的时候,发现国内有个别大神已经在2012年5月更新了这些教程,不过依然很多人说有问题,并且现在是2013年10月份来,ffmpeg都出2.0和1.1了,显然不适合再去看那个资料。
       不过呢,ffmpeg终于人性化了,在官网给出了这8个教程的更新(2012.08.15的时候第一版),而且会跟着ffmpeg更新哦,目前最新的是2013年8月份的,够新吧,所以入门就不用愁啦~~~
      入门之后怎么深入?
      去看ffplay.c,那里面是一个完整的播放器,官方给出了说法:外部开发者请直接看doxygen生成的API文档,然后去看doc/example目录下的例子。这些例子还算好,比ffplay.c的代码要少多了~~~
      如果还不够用,官方给出了上百款播放器相关的项目链接,其中包括大名鼎鼎的VLC、MPlayer、MPC-H等等,慢慢看吧^_^
 
二、ffmpeg的编译 -- 蛋疼
       Alberl当年搞这个的时候半途放弃了,对于只用过Ubuntu尝鲜的人来说,交叉编译实在太蛋疼了,当然,对于用惯的大神来说,这就是小菜一碟~~~  
       记得当时要编译ffmpeg的话,要先去下载十几个开源库,然后才开始编译ffmpeg,反正编译的过程都写了一大篇文章,看着就头大。 后来Alberl看到老外提供了一个脚本,会自动下载这些库,并把目录组织好,剩下就只需要编译啦。 由于Alberl保存了两三百个ffmpeg相关的网页,所以一时找不到那个链接,就不贴出来了,不知道现在编译是不是依旧蛋疼。。。
       不过呢,ffmpeg提供了已经编译好的动态库,而且随时更新,所以如果只是入个门,就不用自己去编译啦。去这里下载Dev版和Shared版,其中dll在Shared版本里面,lib和头文件在Dev版里面,里面的SDK带了详细的文档和例子。
 
三、ffmpeg的使用 -- 郁闷
        虽然ffmpeg相比以前已经非常人性化了,但是Alberl更新了dll和API,却发现API兼容性太差,使用新的ffmpeg版本就必须使用新的API,而新的API又不兼容以前的API,不仅要换函数名,还要加参数,换的还不止一两个函数,好不容易编译通过了,结果运行2.0就崩溃,换成1.1版本的ffmpeg就是杂音,反正很郁闷。  注意:linux的版本一般从0.1开始,所以2.0相当于windows下习惯的20.0,从1.0到2.0就相当于windows下从10.0 到 20.0,所以变化是很大的。
 
        这就意味着Alberl又得去看那8个教程了,而且又得捣鼓音视频同步了。作为一个业余人士,Alberl显然不愿意去干这些,所以Alberl在这里只给出2011年做过的ffmpeg播放器,其中主要是做了C++版的封装,外部调用者根本无需关心内部的处理,和微软API一样简洁明了易上手,学生作品,希望能够帮助初学者~O(∩_∩)O~
 
代码下载(除了mp3播放有问题外,像wma、rmvb等等都OK):
 
SVN库下载(包含了Alberl从第一个教程开始,到做成播放器的过程,对初学者应该也很有用,要使用这个库请用svnadmin load命令, 或者下载VisualSVN导入SVN库):
 
效果如图:
 
 
 
 
下面章节将会介绍其他的播放器核心。
 
 

仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)的更多相关文章

  1. 仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)

        代码下载:http://download.csdn.net/detail/qq316293804/6409417   昨天的教程里写着预计MFC播放器会隔得久一点,但是今晚仔细看了下VLC的常 ...

  2. 仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)

    经过前面的介绍,想必大家对VLC和ffmpeg都有一定印象了,还记得学习ffmpeg多么蛋疼吗?那么VLC会不会也这么蛋疼呢?     那么我们来看一段官方的Demo,Alberl精简了Demo,只留 ...

  3. 基于ffmpeg的C++播放器1

    基于ffmpeg的C++播放器 (1) 2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最 ...

  4. 最简单的基于FFMPEG+SDL的视频播放器:拆分-解码器和播放器

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  5. 基于FFMPEG的跨平台播放器实现(二)

    基于FFMPEG的跨平台播放器实现(二) 上一节讲到了在Android平台下采用FFmpeg+surface组合打造播放器的方法,这一节讲一下Windows平台FFmpeg + D3D.Linux平台 ...

  6. 基于FFMPEG的跨平台播放器实现

    基于FFMPEG的跨平台播放器实现 一.背景介绍 FFmpeg是一款超级强大的开源多媒体编解码框架,提供了录制.转换以及流化音视频的完整解决方案,包含了libavcodec.libavformat等多 ...

  7. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  8. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  9. 100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)【转】

    转自:http://blog.csdn.net/leixiaohua1020/article/details/8652605 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] ...

随机推荐

  1. Android MediaPlayer架构 -- MediaPlayer的创建过程

    本文系作者自己学习之所用,文章内容仅出自作者拙劣之思考,问题之处烦请不吝指教. MediaPlayer 能被用来控制音/视频文件或流媒体的回放.Android中以MediaPlayer类作为音视频播放 ...

  2. PID控制器(比例-积分-微分控制器)- V

    Linear Actuator - PID Control Introduction This application guide is designed to explain the basics ...

  3. 四种常见 Git 工作流比较

    BY 童仲毅(geeeeeeeeek@github) 这是一篇在原文(BY atlassian)基础上演绎的译文.除非另行注明,页面上所有内容采用知识共享-署名(CC BY 2.5 AU)协议共享. ...

  4. android:制作 Nine-Patch 图片

    它是一种被特殊处理过的 png 图片,能够指定哪些区域可以被拉伸而 哪些区域不可以. 那么 Nine-Patch 图片到底有什么实际作用呢?我们还是通过一个例子来看一下吧.比如 说项目中有一张气泡样式 ...

  5. SQLSERVER 设置默认值

    DECLARE @test intSET @test=nullselect isnull(@test,0)

  6. JFinal提示:java.lang.RuntimeException: dao 只允许调用查询方法

    public class UserModel extends Model<UserModel>{ public static final UserModel userDao = new U ...

  7. java command line error opening registry key 'Software\JavaSoft\Java Runtime Environment' java.dll

    C:\Users\huxxxxchan>javaError: opening registry key 'Software\JavaSoft\Java Runtime Environment'E ...

  8. How to extract a complete list of extension types within a directory?

    Open the PowerShell Tool and Run the below command: Get-Childitem "D:\testfolder\" -Recurs ...

  9. ajax之async属性

    Ajax请求中的async:false/true的作用 官方的解释是:http://api.jquery.com/jQuery.ajax/ async Boolean Default: true By ...

  10. 使用jmeter往指定文件中插入一定数量的数据

    有一个需求,新建一批账号,把获取的账号相关信息存入文本文件,当文本文件保存的数据达到一定的数量,就自动停止新建账号. 分析下需求: 1.把账号信息保存到文件,需要使用bean shell脚本(bean ...