基于ffmpeg的C++播放器 (1)

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库):
 
效果如图(效果图中的有播放列表等按钮,这个需要从SVN库中用最新版本编译):
 
 
 
 
下面章节将会介绍其他的播放器核心。
 
 

Jexus 支持PHP的三种方式

 

Jexus不仅支持ASP.NET,而且能够通个自带的PHP-FCGI服务以及PHP-FPM等方式灵活支持PHP而且还可以以.NET(Phalanger)方式支持PHP。

PHP-FCGI服务支持PHP

1、安装PHP-CGI:

[azureuser@mono ~]$ sudo yum -y install php-cgi

2、配置:

1)修改“/etc/php.ini”文件:

找到cgi.force_redirect=1一行,把前边的"#"号去掉,把值从1改为0,如:

cgi.force_redirect=0

2)修改jws.conf。打开jexus文件夹中的jws.conf,作如下配置:

填写PHP-CGI程序路径和工作进程数。如:“php-fcgi.set=/usr/bin/php-cgi,6”。

3)修改网站配置。在需要使用PHP的网站的配置文件中添加:

fastcgi.add=php|socket:/var/run/jexus/phpsvr

1、 以管理员身份重启jexus。

在网站目录下创建一个phpinfo的页面index.php

PHP-FPM服务支持PHP

1、安装:

PHP-FPM之前,你必须卸载系统中以前安装的Apache和PHP。默认情况下,CentOS的官方资源是没有php-fpm的, 但我们可以从Remi的RPM资源中获得,它依赖于EPEL资源。我们可以这样增加两个资源库:

[azureuser@mono ~]$ sudo yum install yum-priorities -y

[azureuser@mono ~]$

sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

[azureuser@mono ~]$

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

[azureuser@mono ~]$yum --enablerepo=remi install php php-fpm

2、配置

1)修改fpm配置(可以不用改):打开/etc/php-fpm.d/www.conf文件,把pm.max_children等的值没为你需要的值。

2)修改网站配置文件,在需要运行PHP的网站配置文件中添加:

fastcgi.add=php|tcp:127.0.0.1:9000

3、启动FPM服务:

[azureuser@mono siteconf]$ sudo service php-fpm start

如果你想在系统启动时自动运行php-fpm,输入下列命令:

[azureuser@mono siteconf]$ sudo chkconfig --level 345 php-fpm on

PHP仅安装了核心模块,你很可能需要安装其他的模块,比如MySQL、 XML、 GD等等,你可以输入下列命令:

[azureuser@mono siteconf]$ sudo yum --enablerepo=remi install php-gd php-mysql php-mbstring php-xml php-mcrypt

4、以管理员身份重启jexus。

在网站目录下创建一个phpinfo的页面index.php:

.NET(Phalanger)支持PHP

Phalanger简介

Phalanger(https://phalanger.codeplex.com/)是一种PHP语言编译器,也是针对.NET的PHP运行时。 它可以用于把PHP web项目编译成.NET字节码,并在Windows中使用IIS或者在Linux上使用Mono和Apache作为ASP.NET应用程序来执行。 然而,Phalanger不仅仅是把已经存在的PHP应用编译到.NET中。

我们可以使用Phalanger创建组合.NET和PHP的解决方案,所采用的方式用标准的PHP解释器是不可能做到的。 有了Phalanger扩展,PHP程序可以直接使用.NET类,而.NET程序(比方说用C#编写的)也可以动态地调用PHP脚本,或者使用在PHP中实现的函数和类。

Phalanger在很大程度上与PHP 5兼容,可以运行大量开源的PHP项目,包括WordPress和MediaWiki。 我们可以使用它把这些项目集成到.NET生态系统中,也可以开发新的项目,它会兼有PHP和.NET的优势。

Phalanger的组件

Phalanger包括多个部分独立的组件,可以用来开发运行在.NET上的PHP应用程序,并使用.NET或Mono来运行它们:

l Phalanger编译器Phalanger会把PHP源代码编译成.NET程序集,它可以使用.NET JIT(Just-in-time编译器,它会为当前平台生成本地代码)执行。 编译后的PHP代码会使用Phalanger运行时和动态语言运行时,从而提供了PHP语言动态特性的高效率实现。

l Phalanger运行时和类库Phalanger运行时提供了对数组之类PHP特性的实现。 Phalanger还包含了针对I/O、正则表达式以及其他标准PHP类库的.NET实现。

l Phalanger可以通过托管的PHP 4扩展。

l 托管的扩展 通过包装.NET中提供的类似功能,PHP扩展也可以重新实现。 这些扩展可以是由任何.NET语言编写,并提供很好的性能。 Phalanger中包含多个扩展,包括SPL、JSON、SimpleXML、MySQL和MS SQL的提供程序。 DEVSENSE【9】还提供了附加的扩展,像Memcached、图像和cURL等。

l 与Visual Studio的集成Phalanger还与Visual Studio集成(最近的更新支持Visual Studio 2010)。 集成功能添加了针对PHP文件的颜色突出显示和智能提示功能,让我们可以调试使用Phalanger运行的PHP应用程序。

Jexus下运行Phalanger

Jexus可以同时用普通方式(PHP-CGI/PHP-FPM)以及.NET(Phalanger)方式支持PHP,为了不引起混淆,用.NET方式支持PHP时,要注意如下事项:

1、网站配置文件中的UsePHP的值为false,或者不用这一句。

2、网站配置文件中添加一行 ASPNET_Exts=php,说明php网页按ASP.NET处理,如果已经有这一项,就在末尾添一个php(用英文件逗号与已有扩展名分隔)。

3、Jexus启用.NET4工作模式(在jws.conf中添一行“Runtime=v4.0.30319”)。

4、在网站的web.config添加Phalanger有关配置。

翻译此页
阿拉伯语
爱沙尼亚语
白苗文
保加利亚语
波兰语
波斯语
朝鲜语
丹麦语
德语
俄语
法语
繁体中文
芬兰语
海地克里奥尔语
荷兰语
加泰隆语
捷克语
克林贡语
拉脱维亚语
立陶宛语
罗马尼亚语
马耳他语
马来语
挪威语
葡萄牙语
日语
瑞典语
斯洛伐克语
斯洛文尼亚语
泰语
土耳其语
乌尔都语
乌克兰语
西班牙语
希伯来语
希腊语
匈牙利语
意大利语
印地语
印度尼西亚语
英语
越南语
 
分类: Linux/MonoLJMM
 
 

基于ffmpeg的C++播放器1的更多相关文章

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

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

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

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

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

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

  4. 视频播放器控制原理:ffmpeg之ffplay播放器源代码分析

    版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...

  5. 基于Live555,ffmpeg的RTSP播放器直播与点播

    基于Live555,ffmpeg的RTSP播放器直播与点播 多路RTSP高清视频播放器下载地址:http://download.csdn.net/detail/u011352914/6604437多路 ...

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

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

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

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

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

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

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

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

随机推荐

  1. jsmart 前结合案例

    前绑定jsmart这是一个不错的选择.之前通过经常使用的项目中的.最近涉及的领域的后端部.jsmart有些使用相对较少,主要是因为他想引用文件,我写的模板,在一个简单的项目,直接使用js界,很复杂的前 ...

  2. IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)

    原版的blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: 新NSURLSession的UploadTask的,结果写那个Demo的时候想要写成拍照上传.然后就想到先写一个 ...

  3. [WPF] 动画Completed事件里获取执行该动画的UI对象

    原文:[WPF] 动画Completed事件里获取执行该动画的UI对象 昨天群里有位童鞋提出如何在动画完成事件Completed里获取到执行该动画的UI对象. WPF里动画的Completed的本身并 ...

  4. windows+php5.5+apache2.4+tomcat+mod_jk配置

    原因: 通常情况下apache执行的是80port,比方apache启动后执行localhost:80就能够出现It works页面,这里的80也能够不写,会默认的.而tomcat启动时默认的port ...

  5. Fluent Validation + NInject3 + MVC5

    Fluent Validation + NInject + MVC - Why & How : Part 1 http://fluentvalidation.codeplex.com/ htt ...

  6. spark in eclipse---Spark学习笔记3

    想要调试源码,还是要放到eclipse里面去.先生成eclipse项目,下载依赖包 victor@victor-ubuntu:~/software/incubator-spark-0.8.1-incu ...

  7. 跟着大神重写的KNN 文档归类小工具

    ·背景 在知道KNN之前,楼主有时候会粗糙地做一些分类模型的计算.在拜读了Orisun大神[http://www.cnblogs.com/zhangchaoyang/articles/2162393. ...

  8. pyqt学习总结

    一.学习来由: 近期一段时间,应朋友的须要,完毕一款抓取软件.一般而言,python是我比較熟悉的语言,又有丰富的抓取和解析模块,所以果断选择之. 而这远远不是重点,后台程序在工作做常常写,所以比較熟 ...

  9. js前端分页之jQuery

    锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...

  10. Angular指令(一)

    Angular开发者手册重点翻译之指令(一) 创建自定义的指令 这个文章将解释什么需要在自己的angularjs应用中创建自己的指令,以及如何实现它. 什么是指令 在高的层面上讲,指令是DOM元素中的 ...