您的位置:首页 > 移动开发 > Android开发

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

2017-11-09 16:56 1001 查看
项目有Rtsp实时视频播放功能 ,现在要实现边播放边保存的功能要求。我在音视频方面技术处理白痴水平,所以
只能简单地实现先把h264格式的视频流保存到SD卡,再把对应地h264文件转码成MP4格式文件,然后删除原H264格式文件。
实时播放实时转码成MP4还处理摸索阶段,因为我还不会用ffmpeg框架。
在网上找了很久,找到了常用的两种方案:


使用谷歌的开源项目mp4v2框架,如何时使用可以参考http://blog.csdn.net/chezi008/article/details/70172785。文章结尾给了相应DEMO的下载地址。官方源码地址:http://code.google.com/p/mp4v2/downloads/list

在项目中使用了下,发现可以把H264格式 文件转成MP4格式 文件,但是只能转时长最多28秒的文件,而且转化时间长,效率不高。我也尝试修改其C代码,不成功,所以放弃了。

也是我现在项目中使用的第三方开源框架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的文件,其它的目前都转失败了,相关问题正在处理中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: