[Android]IsoParser讲解

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

这个作者很勤奋啊。又有新版本了。
https://oss.sonatype.org/content/repositories/comgooglecodemp4parser-135/com/googlecode/mp4parser/isoparser/1.0-RC-11/

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讲解

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

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

下载编译好的jar
还是在这个路径:https://oss.sonatype.org/content/repositories/comgooglecodemp4parser-568/com/googlecode/mp4parser/isoparser/1.0-RC-10/
选择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
原创粉丝点击