dji msdk

198 阅读3分钟

1. 任务

任务分两种,一种上传到飞机,无线断开可以继续执行,一种由设备实时控制,可以有更复杂的行为。最常见是航点任务,需要上传经纬度及海拔

几个大类

ISDKManager:管理sdk的实例化注册

registerApp() msdk注册

init(Context context, @NonNull SDKManagerCallback callback) msdk初始化 

sdkmanagercallback(DJISDKInitEvent event, int totalProcess) 执行结果回调 

oninitProcess() 初始化进度回调 

onregistersuccess() 注册成功回调 

onregisterfailure(IDJIError error) 注册失败回调 

onproductdisconnect(int productId) 设备断联回调  productId 是断联的设备id

onproductconnect(int productId) 设备连接回调

IWPMZManager: 航线管理

KmzInfo getKmzInfo(String kmzpath) 加载航线文件

void generateKMZFile(String kmzpath, WaylineMission waymission,

WaylineMissionConfig config, Template template) 生成航线文件

void generateKMZFile 同上,但没有template参数,不与dji polit兼容

waylineCheckErrorMsg checkValidation(String kmzPath)检查航线文件有无错误

IWaypointMissionManager: 航线任务的上传,执行,暂停,恢复以及航线任务执行状态的监听等功能

见文档

IMediaDataCenter: 此类是多媒体数据中心管理类,用于获取VideoStreamManager,MediaManager和LiveStreamManager实例,提供了码流管理,多媒体文件管理和直播管理等功能。

推流:

  • 1. 调用[getAvailableStreamSources](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager.html#ivideostreammanager_getavailablestreamsources)获取可用的码流源。

  • 2. 调用[getAvailableVideoChannels](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager.html#ivideostreammanager_getavailablevideochannels)获取可用的码流通道。

  • 3. 调用[getAvailableVideoChannels](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager.html#ivideostreammanager_getavailablevideochannels)中的[startChannel](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager_IVideoChannel.html#ivideostreammanager_ivideochannel_startchannel)设置步骤1获取到的[StreamSource](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager_StreamSource.html#ivideostreammanager_streamsource)把码流源和码流通道进行绑定,并且开启当前码流通道。

  • 4. 如果你希望自己实现解码功能,你通过添加调用[addStreamDataListener](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager_IVideoChannel.html#ivideostreammanager_ivideochannel_addstreamdatalistener)添加码流数据监听器来接收码流数据。

  • 5. 如果你不希望自己实现解码功能,你也可以使用DJI提供的解码器[IVideoDecoder](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IVideoStreamManager_IVideoDecoder.html#ivideostreammanager_ivideodecoder)来进行解码。

addStreamDataListener会onReceive到IVideoFrame 数据类,获取其中的byte[]用于推流直播。同时可设置码流状态监听器addVideoChannelStateChangeListener 以获取推流状态。

如果想用dji的解码功能,使用IVedioDecoder类,VideoDecoder(Context context, VideoChannelType channelType, DecoderOutputMode outputMode, Object outputSurface, int width, int height, boolean isForLiveStream)

Context

context

应用的Context实例。

VideoChannelType

channelType

码流通道类型。

DecoderOutputMode

outputMode

输出模式。

Object

outputSurface

输出Surface实例,可以使用SurfaceView或者SurfaceHolder。

int

width

解码器的宽。

int

height

解码器的高。

boolean

isForLiveStream

true表示该解码器用于直播解码。

解码器有 onresume,onpause,ondestory方法,可恢复、暂停、销毁实例。

文件下载:

void setMediaFileDataSource(MediaFileListDataSource source) 

设置需要获取的多媒体文件数据源。你可以选择拉取不同存储位置和不同负载中的多媒体文件。(一般是相机和sd卡)

pullMediaFileListFromCamera

从相机中拉取多媒体文件列表。当多媒体文件列表状态[MediaFileListState](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IMediaManager.html#imediamanager_mediafileliststate)[IDLE](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IMediaManager.html#imediamanager_mediafileliststate_idle)时,需要调用此方法从相机中拉取全量数据。当有新媒体文件产生的时候,MSDK会自动从相机拉取最新的多媒体文件列表。当多媒体文件列表状态[MediaFileListState](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IMediaManager.html#imediamanager_mediafileliststate)变为[UP_TO_DATE](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IMediaManager.html#imediamanager_mediafileliststate_up_to_date)时,表示拉取多媒体文件列表已完成,请调用[getMediaFileListData](https://developer.dji.com/cn/api-reference-v5/android-api/Components/IMediaDataCenter/IMediaManager.html#imediamanager_getmediafilelistdata)获取多媒体文件列表数据。