热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

仿迅雷播放器教程基于ffmpeg的C++播放器(1)

  2011年12月份的时候发了这篇博客 http:blog.csdn.netqq316293804articledetails7107049 ,博文最后说会开源一个播放器,没想到

    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个了。
仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
      其实过时不是最重要的,毕竟现在国内绝大部分资料都是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):
http://download.csdn.net/detail/u012248739/6502973
 
SVN库下载(包含了Alberl从第一个教程开始,到做成播放器的过程,对初学者应该也很有用,要使用这个库请用svnadmin load命令, 或者下载VisualSVN导入SVN库):
http://download.csdn.net/detail/qq316293804/6392733
 
效果如图:
仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
 
仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
 
仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
 
仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
 
下面章节将会介绍其他的播放器核心。
 
 



来自为知笔记(Wiz)




推荐阅读
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
author-avatar
mobiledu2502887897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有