Android如何录制视频过程中切换保存路径?【已解决】
2016-03-24 13:25
429 查看
有一个需求,在录像过程中,满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帧的编码,内存缓存过多的帧数据,会造成内存溢出,需要用多线程,有要管理音频,难度太大了。
这个问题看似简单,是现实来好难,难点是切换保存路径。
我做了一些尝试:
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帧的编码,内存缓存过多的帧数据,会造成内存溢出,需要用多线程,有要管理音频,难度太大了。
相关文章推荐
- 48.Android中android studio导入ApiDemos 问题小结
- Android大图片裁剪终极解决方案 原理分析
- 非堵塞socket实现android手机与PC的文件传输
- 通过wifi连接adb调试
- Android自定义标题栏
- Android界面布局大集合(Fragment+ViewPager)
- android studio 中创建java项目的服务器端并运行
- Android开发之获取时间SystemClock
- android iBeacon开发模拟实例
- android 广告平台 keymob
- RxJavaRxAndroid入门资料 基本方法
- android bitmap设置图片内存溢出的解决神器
- Android开发之android:process=":remote"
- Android 上传头像
- Android 五大布局
- Android学习手札-Service探究(LocalService)
- 自动生成android dimens.xml适配屏幕
- Android 通知 Notification 使用详情
- 转 Android智能手机上捕获数据包
- Android ListView物流获取追踪功能实现