Android如何录制视频过程中切换保存路径?【已解决】

有一个需求,在录像过程中,满1分钟后,保存为另一个文件,而且要求不许丢秒。


这个问题看似简单,是现实来好难,难点是切换保存路径。

我做了一些尝试:

1、使用Anroid自带的MediaRecorder,录制过程中不允许调用setOutputFile切换路径。

2、MediaRecorder录制过程中瞬间stop、setOutputFile、start,可是中间丢了1.5秒

3、通过查资料得知,MediaRecorder有个这个方法,public void setOutputFile(FileDescriptor fd),可以绑定socket,然后接受数据。可是接受的数据如何编码?如何保存为可播放的视频文件?即使从socket中得到了视频数据,那音频数据还要从其他方式采集,最后合并?找了好久也没找到解决办法。

4、ffmpeg方案,在github和csdn寻找相关demo(下载点击这里)发现所有demo都一样,出于一个作者,原理是,

在Camera的回调函数public void onPreviewFrame(byte[] data, Camera camera),可以拿到每一帧的数据,把data矫正一下角度

然后初始化一个FFmpegRecorder,,一帧一帧的写入文件,与此同时,开启一个线程记录声音,记录声音和记录帧是同时进行的。

我又把帧数据和声音数据放到队列里,分别开线程遍历队列进行保存帧数据和声音数据,遍历队列的时候就有时间去切换路径了。

但是。。。。。出现问题了,录制过程中有些报出帧编码失败异常,声音和视频不同步,而且声音听起来有噪声,如果只写视频倒是问题不大,这个方案目前还处于失败的状态。


目前还没有解决这个问题,如果谁有好想法可以告诉一下我,纠结中。


2016.03.29

用另一个方式解决了,来记录一下。

办法是:切换到下一个文件,重启FrameRecorder,中间仅仅丢掉0.1秒,这样还是可以忍受的。


大问题解决了,还有一些小问题,那就是在onPreviewFrame方法里做编码,会导致丢帧,每秒才7帧。

如果先放到 缓存里也不行,先不谈音频同步问题,加入1秒产生24帧,同时放到缓存,有另外一个线程从缓存取出将编码操作,那么仍然无法在1秒钟完成24帧的编码,内存缓存过多的帧数据,会造成内存溢出,需要用多线程,有要管理音频,难度太大了。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值