V5-MSDK-图片很多时,拉取图片过慢
已完成您好,M30航线飞行时,一边拍照,一边上传照片到服务器,这种场景下,我实现的流程主要如下:
第一步:监听是否有新的照片
KeyManager.getInstance().listen(KeyTools.createKey(
CameraKey.KeyNewlyGeneratedMediaFile
)
第二步:当有新的照片时,更新文件列表
MediaManager.getInstance().pullMediaFileListFromCamera(
new PullMediaFileListParam.Builder().filter(MediaFileFilter.PHOTO).build(),
new CommonCallbacks.CompletionCallback() {}
第三步:获取文件
MediaManager.getInstance().getMediaFileListData().getData()
第四步:用第一步返回的
GeneratedMediaFileInfo.index
和第三步返回的
List<MediaFile>的
mediaFile.getFileIndex()
进行匹配,如果相同则得到 新拍照片的MediaFile
第五步:拉取源文件
mediaFile.pullOriginalMediaFileFromCamera
最后是上传到服务器
-------------------------------------------------
但这种场景下我遇到了一个问题:
当飞机中的照片数量特别多,比如1500张时,第二步更新文件列表的时间就会很长,差不多5秒多。而且经过日志时间推断,当第二步”更新文件列表“执行时,第五步的”拉取原文件“就会阻塞。
所以,当飞行航线时,如果间隔3秒拍一次照,则会出现:有新照片--更新文件列表--有新照片--更新文件列表-- 拉取文件一直会被阻塞,直到不再有新照片,才会开始拉取源文件。
这样的话,拍一张照片 --上传一张照片的需求就可能难实现了。
不过,当飞机中的照片数量不多时,第二步的”更新文件列表“会很快,不影响边飞边上传。
目前我是通过删除飞机中的照片来保证飞机中的照片数量不会太多,从而使”更新文件列表“快起来,但删除飞机中的文件并不是我希望的,因为飞机中的图片通常会作为一种兜底。
所以,这种场景下,我的调用方法是不是有什么问题?有没有更好的方案?如何能使无人机在照片很多时,”pullMediaFileListFromCamera“方法的执行会快一些?
-
所以,这种场景下,我的调用方法是不是有什么问题? -->调用的逻辑上是没有问题的。 有没有更好的方案?如何能使无人机在照片很多时,”pullMediaFileListFromCamera“方法的执行会快一些? -->首先文件比较多的时候拉取文件列表花费的时间一定是会比数量少的时候多的,在这个方面没办法做到都是一样的时间。但是V5对获取媒体文件做了优化,应该是可以有更好的方案。 在pullMediaFileListFromCamera获取到的是全部的媒体文件列表,pull之后可以监听MediaFileListState的状态,拍照的时候MediaFileListState是会变化的,当MediaFileListState自动变为UP_TO_DATE的时候,你可以直接在getMediaFileListData获取到包含最新照片的数据,这样就避免了多次pullMediaFileListFromCamera。 你可以按照上面的描述尝试一下。
请先登录再写评论。
评论
6 条评论