项目有Rtsp实时视频播放功能 ,现在要实现边播放边保存的功能要求。我在音视频方面技术处理白痴水平,所以
只能简单地实现先把h264格式的视频流保存到SD卡,再把对应地h264文件转码成MP4格式文件,然后删除原H264格式文件。
实时播放实时转码成MP4还处理摸索阶段,因为我还不会用ffmpeg框架。
在网上找了很久,找到了常用的两种方案:
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的文件,其它的目前都转失败了,相关问题正在处理中。