[Android]IsoParser讲解

公司要做一个在线播放视频的APP。这玩意可真是麻烦啊。咱们可从来没接触过多媒体开发啊。55555~~~。在google搜了半天,都没有一个Open Source的project。郁闷啊郁闷!!
开始恶补MP4的知识。OMG!!光MP4就有200多页的书。唉唉。好不容易将MP4的结构大概明白了。在网上也找到了一个解析MP4的源码。就是这个让我吃尽苦头的IsoParser,可能叫MP4Parser更好些。这个的介绍在
IsoViewer
里面的IsoViewer是用来查看MP4结构的。用法可查看这篇博文: http://blog.sina.com.cn/s/blog_6c762bb301016swe.html
现在我需要的是解析MP4的java源代码。
解析MP4的Java源代码
源代码的下载地址在:
如果要下载源代码,选择 isoparser-1.0-RC-10-sources.jar 下载就可以了。下载后直接解压,就能看到很多java文件。这就是源代码了。

这个作者很勤奋啊。又有新版本了。

Aspecj
本来以为捡到一个宝贝,结果导入到project中,用不了。需要aspectjrt.jar。在eclipse网站下载下来,然后安装。检查下"C:\aspectj1.7\lib\aspectjrt.jar" 是否有aspectjrt.jar存在。如果有就ok了。
打开刚刚导入了isoparser源代码的工程。在工程名称上右击,选择属性,在属性里选择Java Build Path。
[Android]IsoParser讲解

点击Add External JARS,选择aspectjrt.jar
[Android]IsoParser讲解
就可以了。

nu.xom.*

接着又说这个nu.xom.*找不到。唉唉。
[Android]IsoParser讲解

上网找了一下,终于找到一个地方下载:
xom-1.0b3.jar下载下来。然后按上面aspectjrt的方法导入。终于都没有错误了。

这样源代码可以编译通过了。但是解析MP4还是不对。只能得到ftyp,moov和mdat这三个box。moov下面的子box都取不到。唉!!问了IsoParser的开发者,人家说自己编译源代码就是只能取到三个box。最好用他已经编译好了的IsoParser.jar。里面有用到aspectj技术去解析所有的box。
没办法。 下载编译好的jar。

下载编译好的jar
选择 isoparser-1.0-RC-10.jar下载就可以。
导入project中时,也是有讲究的。必须按照下面步骤导入,否则就会报奇奇怪怪的错。譬如下图所示:
[Android]IsoParser讲解

首先在这个project下,建立一个目录,叫libs。
[Android]IsoParser讲解
然后将aspectjrt.jar和isoparser-1.0-RC-10.jar拷贝到这个目录下。
[Android]IsoParser讲解
接着在project的名称上右击,选择属性。选择Java Build Path,在后边点击Add Library...,如下图:
[Android]IsoParser讲解

接着选择User Library。
[Android]IsoParser讲解
点击Next按钮,出现下图
[Android]IsoParser讲解
点击User Libraries...按钮,
[Android]IsoParser讲解
点击New...按钮,随便输入一个User Library Name,
[Android]IsoParser讲解
点击OK按钮
[Android]IsoParser讲解

然后点击Add JARs...选择aspectjrt.jar就可以了。
IsoParser-1.0-RC-10.jar都是这样导入。导入后project结构如下:
[Android]IsoParser讲解
这时候运行project,就不会报错了。而且能正确取得MP4的文件内容。
注意:Android Dependencies目录下亚欧有这两个jar文件。如果没有,就重复删除粘贴jar包到libs目录下或者重复删除libs新建libs目录几次,系统又会自动添加进来了。
可用以下代码进行测试。
 
private  void  parseMP4()
{
           String  localFilePath  =  "/sdcard/test.mp4";     
           IsoFile  isoFile  =  null;
           try  {
                 isoFile  =  new  IsoFile( new  RandomAccessFile( localFilePath , "r" ). getChannel());                                   
           }  catch ( Exception  e{
                 e . printStackTrace();
           }

           if ( isoFile  ==  null{
                 Log . i( TAG ,  "isoFile == null");
                 return;
           }                       
          
           List < Box >  boxes  =  isoFile . getBoxes();
           Log . i( TAG ,  "box size:"  +  boxes . size());
           MovieBox  moov  =  isoFile . getBoxes( MovieBox . class ). get( 0);
           if( moov  !=  null)
           {
                 int  nLen  =  moov . getBoxes (). size();
                 Log . i( TAG ,  "movie box:"  +  nLen);
                 MovieHeaderBox  hb  =  moov . getMovieHeaderBox();
                 Log . i( TAG ,  "MovieHeaderBox:"  +  hb);                 
                 Log . d( TAG ,  "duration:"  +  hb . getDuration());
           }
}

转载自:http://blog.sina.com.cn/s/blog_6c762bb301017f24.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值