基于ffmpeg的C++播放器1

基于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个了。
基于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):
 
SVN库下载(包含了Alberl从第一个教程开始,到做成播放器的过程,对初学者应该也很有用,要使用这个库请用svnadmin load命令, 或者下载VisualSVN导入SVN库):
 
效果如图(效果图中的有播放列表等按钮,这个需要从SVN库中用最新版本编译):
基于ffmpeg的C++播放器1
 
基于ffmpeg的C++播放器1
 
基于ffmpeg的C++播放器1
 
基于ffmpeg的C++播放器1
 
下面章节将会介绍其他的播放器核心。
 
 

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

基于ffmpeg的C++播放器1

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:

基于ffmpeg的C++播放器1

.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有关配置。

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


下一篇:XCode5 编译ffmpeg流程