我们正在开发一个利用Android预览功能的项目。我们以最大可用分辨率(目前为1600 x 1200)捕获预览。
要求是在二级存储上保存每个预览框架。 OnPreviewFrame
能够以30 FPS(约30毫秒/帧)进行预览,但是当添加代码以保存数据时,它会限制FPS。
到目前为止已经过测试:
主线程中的OnPreviewFrame
和保存JPEG。在这种情况下,保存大致需要250-260毫秒。因此,FPS变为5-6。
OnPreviewFrame
和另一个线程中的JPEG保存。因此,为每个帧创建一个新线程以进行保存。如果内存中的线程(每个线程的质量因子60大约需要450-500毫秒),它会创建很多内容,当释放内存时,预览中会出现间隙。
那么,有没有可能的解决方法,我们可以将所有帧保存在30 FPS?
YuvImage yuvImage = new YuvImage(data, activity.previewFormat, activity.previewWidth, activity.previewHeight, null);
FileOutputStream fos = new FileOutputStream(this.file);
yuvImage.compressToJpeg(new Rect(0, 0, activity.previewWidth, activity.previewHeight), 60, fos);
fos.flush();
fos.close();
答案 0 :(得分:0)
您正在进行大量资源消耗操作。有些像磁盘I / O一样无法避免,其他的可以大大减少。