Android多媒体:H264格式文件转MP4格式文件

项目有Rtsp实时视频播放功能 ,现在要实现边播放边保存的功能要求。我在音视频方面技术处理白痴水平,所以
只能简单地实现先把h264格式的视频流保存到SD卡,再把对应地h264文件转码成MP4格式文件,然后删除原H264格式文件。
实时播放实时转码成MP4还处理摸索阶段,因为我还不会用ffmpeg框架。
在网上找了很久,找到了常用的两种方案:
  1. 使用谷歌的开源项目mp4v2框架,如何时使用可以参考http://blog.csdn.net/chezi008/article/details/70172785。文章结尾给了相应DEMO的下载地址。官方源码地址:http://code.google.com/p/mp4v2/downloads/list
    在项目中使用了下,发现可以把H264格式 文件转成MP4格式 文件,但是只能转时长最多28秒的文件,而且转化时间长,效率不高。我也尝试修改其C代码,不成功,所以放弃了。
  2. 也是我现在项目中使用的第三方开源框架mp4parse,开源地址:https://github.com/sannies/mp4parser。
    对照github上的代码,使用非常方便:
    第一步:在gradle文件中添加引用:
compile 'com.googlecode.mp4parser:isoparser:1.1.21'

第二步:直接使用转码相关代码:

 FileOutputStream fos = null;
        try {
        //这里传入的file是指H264格式对应的文件
            H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl(file));
            Movie m = new Movie();
            m.addTrack(h264Track);
            Container out = new DefaultMp4Builder().build(m);
            //这里传入的就是要保存的mp4文件目录
            fos = new FileOutputStream(FileUtil.getSaveFile(getPackageName(), descName + ".mp4"));
            FileChannel fc = fos.getChannel();
            out.writeContainer(fc);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fos)
                    fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

主要代码就这些,在使用的时候 发现一个小问题,就是只能转码h264文件中对应帧数据第四位为67的文件,其它的目前都转失败了,相关问题正在处理中。

你可能感兴趣的:(安卓整理)