在本篇文章中,你能学习到以下内容:
-下载简要过程
-对不同机型下载采取不同做法
-可能遇到的下载问题及对应解法
一,下载功能整体概括
MSDK下载功能即你可以通过DJI MSDK将飞机自身存储或者SD卡存储中的照片,视频文件下载到你的本地手机中。
MSDK整个下载功能可以从以下步骤实现:确认下载位置->进入下载模式->获取/刷新文件列表状态->获取文件列表->进行下载->退出下载模式
流程图如下:
二,具体步骤解析
1.确认下载位置
大疆无人机一般存储方式有两种,内部存储,外部SD卡存储。确认你需要下载照片,视频来源工作是第一步骤。
2.进入下载模式
MSDK进入下载模式根据机型划分为三种,PLAYBACK,MEDIA_DOWNLOAD,enterPlayback,进入下载模式后图传通道会被下载占用图传中断。
本篇文章仅针对MEDIA_DOWNLOAD和enterPlayback模式进行说明,PLAYBACK由于支持机型较老不在赘述。
对PLAYBACK模式下载需求的可以自行访问相关API文档自行学习。
https://developer.dji.com/api-reference/android-api/Components/Camera/DJIPlaybackManager.html
根据机型划分:
其中老旧一些的机型如P3P是通过PLAYBACK模式进行下载的,通过Camera下setMode方法进入;
一般新机型均是通过MEDIA_DOWNLOAD模式进行下载,通过Camera下setMode方法进入;
enterPlayback是本贴发帖时仅对M300RTK机型推出的进入下载模式,可能是后续MSDK对后续机型发展方向,通过Camera下enterPlayback方法进入。
3.获取/刷新文件列表状态
对文件下载前需要获取文件列表,获取文件列表前需要获取文件列表状态。因为实际开发中,每次拍照或者录像都会生成新的文件,所以对于确认当前文件列表状态尤为重要。
刷新列表状态前,先需要进入下载模式,再通过Camera获取到MediaManager媒体管理实例,通过MediaManager进行后续的操作。
刷新和获取文件列表状态方法根据存储位置有不同,分别如下
获取内部存储文件列表状态:getInternalStorageFileListState
获取SD卡文件列表状态:getSDCardFileListState
refreshFileListOfStorageLocation根据给定形参不同而刷新不同存储位置的文件列表状态
void refreshFileListOfStorageLocation(SettingsDefinitions.StorageLocation storageLocation,
CompletionCallback callback)
文件列表状态分为如下状态:
其中只有当前文件状态为UP_TO_DATE时候,代表文件状态最新,进而能够获取到最新的文件列表。
4.获取文件列表
在确认当前文件列表状态已经处于UP_TO_DATE最新后,可以获取文件列表,即存储的照片,视频文件的List集合,MSDK使用MediaFile类进行文件管理。
MediaFile类包含着对文件的所有操作,如获取文件信息(创建时间,大小,类型),下载,删除,预览,缩略图等。
获取内部存储文件列表:getInternalStorageFileListSnapshot
获取SD卡文件列表:getSDCardFileListSnapshot
5.进行下载
当获取到文件列表中List的单独文件MediaFile后,即可调用相关方法进行下载。
MSDK提供了三种下载方式,具体如下:
-预览图,getPreview,返回低分辨率(960 x 540)的预览图,不返回完整信息
-缩略图,getThumbnail,返回低分辨率 (99 x 99)的缩略图,不返回完整信息
-原图,fetchFileData,返回原始分辨率并携带完整信息的原始图(即SD卡或者内部存储中的原始图片),完整信息指的EXIF信息(GPS信息,海拔,姿态等数据),即可以通过外部库手段获取到EXIIF信息,对于实际开发意义重大
6.退出下载模式
当下载结束后后,需要退出下载模式,前面讲过进入下载模式,下载功能会占用图传通道,导致图传中断。退出下载模式即是为了让图传恢复。
退出方法根据机型划分,M300RTK机型使用exitPlayback方法退出,其他机型通过setMode设置为SHOOT_PHOTO或者RECORD_VIDEO模式即可。
三,可能会遇到的问题和解法:
Q:无法进入下载模式,进入失败或正忙?
A:检查一下是否相机正在拍照或者录像等处于正忙的状态,当拍照后也不要立即进入下载模式,因为拍照是一个过程,拍照->到生成照片,建议等待几秒后再进入下载模式。
Q:开多线程下载经常导致失败?
A:MSDK下载功能内部是单线程的,无法多线程下载,建议单线程下载。
Q:刚拍的照片文件列表中找不到?
A:尝试获取下文件列表状态,做对应刷新。
Q:下载的文件可以重命名吗?
A:设置fetchFileData中第二个形参即可重命名。
评论
3 条评论
getInternalStorageFileListSnapshot这个每次取全部是不是非常慢?有没取指定日期的?有的文件特别多时,基本卡着不动
是的 这个没办法,官方没有指定获取或者分页,都是获取全部的,目前是只能尽可能的在SD卡中存在少量数据。 MsdkV5对这块有优化,但是msdkV5现在还没稳定呢,而且还缺少一些功能未集成
在mediaManagerDemo app中,使用demo中的下载功能,选中列表中的图片,调用方法fetchFileData 后,直接在 onFailure方法做中报错 error为The execution could not be executed.(255)。请问是什么情况。
请登录写评论。