前言:由于我是公司的一名员工,所以就结合公司的一些事情来写的,虽然我是新手,但是我也是花费了很大的功夫在这个源码的阅读上面,希望对一些人有帮助:
关于xuggle的一些心得:
0》使用xuggle开发产品的前提
1》关于xuggle,简单解释
2》xuggle授权方式,xuggle和ffmpeg,xuggle的设计优点
3》个人和公司利用xuggle开发库开发时需要做的准备
4》xuggle对操作系统和系统的版本之间的关系
5》一个使用xuggle的简单小实例
6》曲折的历程
7》运行xuggle源码,调试,遇到的几个致命错误!!!
--
后续有新的心得会更新上去-------------
0》 前提:公司office软件研发由于2012版起,除mid格式和flash格式文件外不在调用本地方法播放,都在java中直接调用依赖包xuggle中的方法。
目前为止,公司软件里面有很大一部分还是依赖本地方法播放,之后的方向是想通过直接调用xuggle里面的方法,具体的调用本地方法的事情都交给xuggle去做,好比处理流的时候,在外面又加了一个管道,这样处理起来会更加的方便,公司也是出于类似的原因,从2012版,就由赵红松师傅负责相关模块的开发。
1》 首先什么是xuggle呢?(What’s the xuggle?)
官网上xuggle的读法是这样的:xu‧ggle (zŭ' gl) v. 感觉很绕口,没办法,人家喜欢那样起名字,我是没什么意见了,根据xuggle官方的说法,xuggle是一个开源的资源库,能够让开发者更好的去对视频和音频文件进行解码、编码、以及录制等功能。
Xuggler is a Java library that allows you to decode and encode a variety of media file formats directly from Java.Xuggler is the easy way to uncompress, modify, and re-compress any media file (or stream) from Java.
2》 xuggle源码的授权方式,采取的什么协议?
1.前面听开源项目的讲座的时候,也提到开源项目都是有授权方式的,在使用源码之前要是对这些源码的使用的协议和授权方式不是很清楚的话,恐怕会有被起诉的风险。xuggle是基于FFMPEG(It is built on top of the FFMPEG)的,xuggle和ffmpeg采用的都是LGPL授权的方式,另一种方式是GPL,两种有很大的区别:
LGPL是GPL的变种,也是GNU为了得到更多的甚至是商用软件开发商的支持而提出的。与GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。所以任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。
2.xuggle和ffmpeg之间的关系:?
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。
xuggle的产生,可能是一些有志气的青年,或者是一些懒的程序员,看到ffmpeg对文件进行编码时,还不够方便,所以就自己写出一套基于ffmpeg的开发库,以供其他人使用,xuggle设计的时候,侧重点不同,设计的时候有一个很注重的地方。
xuggle开发库,为什么有那么多人喜欢用,这是因为ffmpeg开发一个小型的media还是有很大难度的,虽然我没有细致的去研究过,但是,一些大的播放软件,像快播、迅雷、优酷等都是用到了ffmpeg的技术,国内有很多播放器被列入ffmpeg官方的可耻软件,没办法,xuggle写出小的播放小demo还是so easy的一件事,主要代码就3—4行。
3. xuggle设计时的优点:
A>. Ease of Use: Provide the power of FFMPEG with an easier learning curve for developers
B>. Safety: Run natively inside a Virtual Machines(e.g. Java) and servers, but minimize the odds of incorrect coding of native FFMPEG code causing crashes
C>. Portability: Write portable code that should run most placeswhere FFMPEG can run
3》公司软件yozoOffice使用xuggle时,以及个人利用xuggle开发库?
i1.> 用到xuggle开发库开发软件时,那how to use Xuggle呢?
:必须安装xuggle在自己的机器上,因为Xuggle has a native (e.g. Windows DLL or Linux shared library)component that must be installed with it.
安装好xuggle(xuggle-xuggler.3.4.1012-win32-setup.exe)后,还要确定工程里能够引用到xuggle-xuggler.jar就行了,就可以使用这个开发库了,安装xuggle的时候,默认是自己配好系统环境变量的。
i2.> 有的人会问,公司里面不用安装xuggle,就可以直接调用xuggle开发库?
:安装xuggle时,C:\Program Files\Xuggle\bin下面很多 .dll文件和 .lib文件,这个是和yozoOFfice软件中C:\Program Files\Yozosoft\Yozo_Office\Lib\xuggler\bin 下面相同的,也就是公司已经把使用xuggle开发库所需要的文件都整合到自己的产品里面去了,自然就可以用了。
4》 xuggle开发库,怎样对待操作系统?
xuggle开发库的源码,我们公司内部使用的是xuggle-src-4.0.1065.zip,大概和这个相似,新的版本5.2出来之后,就可以忽略一些系统对使用xuggle带来的影响,一般可以忽略:
windows:XP or later, 32 or 64-bit versions
Linux :i.e. Ubuntu 11.10 and later
Mac OS:Mac OS X 10.7 32 or 64-bit.
也就是说,在新的版本出来之前,以上系统的版本和位数还是需要考虑的,xuggle老的版本会对一些OS进行测试,也会有很多数据,安装xuggle的时候后面也是区分位数的,我也下载到了64位的xuggle,很小,只有10M左右,里面的bin下面的一些文件是使用xuggle-xuggler.jar时所必须的。
官方对xuggle在一些系统上做过测试,具体的数据是基于windows、fedora、ubuntu、Mac OS等,具体的数据如下图:
5》 使用xuggle开发库时,最简单的一个小例子程序?
IMediaReader reader = ToolFactory.makeReader(filename);
reader.addListener(ToolFactory.makeViewer(IMediaViewer.Mode.VIDEO_ONLY));
//此处的Mode.后面的就代表是哪一种播放器,只要调用里面的方法,具体的实现就交给xuggle去做
while (reader.readPacket() == null)
do {} while(false);
这样得出来的播放器,很简单,能够满足简单的需要,要是想弄的好看,还需要对其中的很多地方去改进,公司的播放器页面做的看起来还很舒服,只是里面的东西太乱了,几个模块相同的功能,居然不是同一个组写的,所以看源码的时候,看着看着就很容易被带迷路了。
6》教训:
刚开始一个人接触到这个xuggle的时候,根本就没什么经验,一下子不知道从哪里入手了,还是我们的王哥,给了我很多建议,对我受用很大,很多有用的信息都是可以通过官网上找到,一些比较新的东西也会同步的,官网上的论坛和社区都是可以锻炼自己的地方,我对xuggle官网上的结构和一些板块比较的熟悉了,还有很多值得我去探索的,我会努力的去实现自己的价值,路漫漫其修远兮,吾将上下而求索。
7》个人使用xuggle时出现的几次几乎致命的错误!!!
1、 本机是win7 64bits,用VMware装的xp虚拟机,本来还是好好的,可以使用公司的软件打开多媒体,运行2011工程时也是可以打开多媒体模块的,有一天,或许是因为我手贱了,把工程里的几个看起来不是必须的包删掉了,接着运行2011时就出现了很多提示错误的窗体,再接着,公司安装在xp系统上的办公软件多媒体那一块也是不能够运行,再之后,整个虚拟机就奔溃掉了,每次重新开启虚拟机的时候,刚启动好,之后就立即奔溃,回到开启虚拟机之前的界面。
负面影响:VMware中的其他虚拟机,运行2011工程时也奔溃,虚拟机上的office软件也是不能够打开多媒体软件。
自己的应对:我首先就从VMwarea安装xp系统的文件夹里的log文件看起, 出现的日志文件,都是堆栈方面的信息,有些不能够解析,就出现乱码,虚拟机重装也还是出现一样的问题,之后就请教有经验的老员工,他们以前也没遇到过类似的问题,所以也是无解,搞的最后我干脆就把系统换掉吧,对那个问题的出现和解决一直还是不知道具体的原因。
2、 第二个问题就是重装系统后,装的是xp,系统用了整整一天,出现office软件运行多媒体时,意外挂掉,并带有log文件!!这个问题很吓人:A fatal error has been detected by the java runtime Environment……
分析流程:多媒体模块要是不能够正常使用的话,怎么调试程序呀,也正是在我调试程序时出现的问题(个人感觉),我百思不得其解,以前也遇到过类似的log文件,只是没办法,我在google上搜到一篇分析这样的帖子,我就试着分析,找到了一些眉目,具体的还是解决不了,说是一些软件和java的运行环境出现了冲突,所以才导致软件运行挂掉。
问题关键:本来我用着好好的,由于我的一些很正常的操作导致软件挂掉,很难想到是那里出了错,根据log文件也是云里雾里。
解决方法:最后只有请教xuggle方面的高手,赵红松师傅,经过他的排查和摸索,因为他以前也没遇到过类似的问题,卸载软件重装,查看一些信息表,得出的结论是:公司软件在运行到多媒体那一块的时候,根据系统的环境变量而去找自己需要的一些信息,如果找不到yozoOffice的默认环境,就会导致运行出错,也就是说,一些软件容易和公司的软件构成冲突,把不需要的软件以及容易造成冲突的软件卸载掉,就可以了。
本次error解决方法,主要是因为本地安装的xuggle,和软件造成冲突,所以使用xuggle时还是有很多值得注意的细节。
8》以上是我的一些个人分享,还有很多心里的体会,也很难几句话就写的出来,我以后还会长时间的去接触xuggle开发库,写出一些心得,以后可以去伪存真,以后复习的时候,也会用的着的,或许以后的某天,也可以给其他人作为参考吧,让他变成公司的一种带有价值的文档。