zoukankan      html  css  js  c++  java
  • 基于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个了。
          其实过时不是最重要的,毕竟现在国内绝大部分资料都是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

    image

    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:

    image

    .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
     
     
     
  • 相关阅读:
    23.Vue技术栈开发实战-Icon组件
    shell脚本每行后面多了一个^M的原因和解决办法
    mmap概述
    camera otp介绍
    brk实现
    USB技术浅析
    带你遨游USB世界
    echarts 更换主题颜色
    Hive UDAF介绍与开发
    2020湖北高考理科第一名唐楚玥的学习方法演讲
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3369428.html
Copyright © 2011-2022 走看看