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的文件,其它的目前都转失败了,相关问题正在处理中。
相关文章推荐
- 【多媒体】Android使用MediaCodec硬解码播放H264格式视频文件
- FFMpeg压缩Android摄像头数据写成H264格式文件
- [置顶] Android使用MediaCodec硬解码播放H264格式视频文件
- Android使用MediaCodec硬解码播放H264格式视频文件
- Android 文件格式
- Android 初始化语言(init.*.rc、init.conf文件格式)
- mp4(H264容器)的详细文件格式分析
- mp4(H264容器)的详细文件格式分析
- 【持续更新】多媒体文件格式
- Android 获取SD卡上的多媒体文件
- mp4(H264容器)的详细文件格式分析
- (转)android操作sdcard中的多媒体文件(二)——音乐列表的更新
- Android为多媒体文件生成缩略图
- android操作sdcard中的多媒体文件(一)——音乐列表的制作
- 多媒体文件格式MIME(转)
- Android 文件格式
- MIME类型-多媒体文件格式
- 多媒体计算机图像文件格式
- 多媒体文件格式简单介绍
- android 进行多文件压缩处理格式zip