问题标签 [dji-sdk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 无法同时使用虚拟摇杆和遥控器
当我启用虚拟摇杆控制并尝试使用虚拟摇杆控制更新控制值时,它会更新值但遥控器被禁用(在未启用虚拟摇杆模式的情况下无法发送数据)。虚拟摇杆和遥控器命令都不会被传输。
android - DJI Phantom 3 标准连接问题
根据我的阅读,在 Phantom 3 标准中,飞行器、控制器和移动应用程序都连接到控制器上 wifi 的 WIFI 接入点。
我们仍然可以使用 DJI SDK 从移动应用程序上通过移动互联网将数据发送回服务器吗?
dji-sdk - 连接到 Phantom 4 Pro 但收不到视频
我遵循全景演示示例并连接到无人机。我得到了一个具有正确型号的 DJIAircraft 和一个 DJICamera,但视频永远不会开始(没有图像和 didReceiveVideoData 永远不会被调用)。如果我切换到 DJI GO 4 应用程序,我可以看到实时视频源。有任何想法吗?
android - 将 Wikiitude ArchitectView 中的相机流替换为外部视频流
我正在开发一个 Android 移动应用程序,该应用程序面向无人机摄像头视图的实时增强可视化(特别是我正在开发带有相关 SDK 的 DJI Phantom 3 Professional)。我正在为 AR 部分使用 Wikiitude 框架。每个 Wikiitude 示例都通过增强智能手机的摄像头视图来工作,因此我需要重定向输入视频流。在这个阶段,通过使用 DJI SDK 功能,我有一个 TextureView 对象,其中包含来自无人机的正确解码的流。以下是当前视图的 .xml 文件顶部的相关说明:
实际上,Wikitude Architect View 是由相机流的渲染和增强的渲染组成的,如下图所示: Architect View Composition
sample_cam.xml 文件:
有没有办法用我的TextureView的内容替换 Wikitude Architect View 的当前相机流?
或者,有没有办法让 ArchitectView 的相机流作为透明背景,以便将此层与TextureView重叠?
以下可能是 .xml 最终文件的部分代码:
ios - 可以使用 DJI SDK 复制 DJI Go 应用程序的“音高锁定”功能吗?
我正在尝试复制 DJI Go 应用程序的“音高锁定”开/关功能。我怎样才能做到这一点?
我正在使用 XCode 8.2.1,为 iOS 10.1 构建,连接到带有 iPhone 6s 的 Osmo Mobile。Osmo Mobile 具有最新的固件(版本 01.30.01.52)。
到目前为止一切正常(registerApp、通过蓝牙连接、按下手持按钮、获取云台电池更新、获取云台更新)。
将 setGimbalWorkMode 设置为 .freeMode 或 .yawFollowMode 似乎没有任何效果。完成块没有返回错误,但对云台操作没有影响。
云台的行为就像它处于 .freeMode 状态(总是移动到手持摇杆指向的确切方向),但 DJIGimbalDelegate 只接收 .yawFollowMode 更新(这是 pitchLock 模式应该做的)。
将 setGimbalWorkMode 设置为其他模式会导致错误(正如 Osmo 移动设备所预期的那样)。
这是我尝试打开/关闭pitchLock的方式。
这是委托,无论我做什么,它都只报告 .yawFollowMode:
有人让 setGimbalWorkMode 真正改变云台模式吗?
dji-sdk - 直播直接到电脑
我是一名学生,目前正在使用 Matrice 100 进行项目。我知道目前您可以从移动应用程序流式传输到 YouTube/Facebook,但有没有办法将流直接传输到计算机?我注意到控制器上有一个 mini hdmi 端口,您可以将电缆插入该端口和计算机以访问流吗?
ios - DJI 无人机未连接(未调用 sdkManagerProductDidChange 委托方法)
我似乎无法让自己的应用程序连接到特定的无人机。我已经下载了桥接器应用程序并正在使用它进行调试。我从示例应用程序中复制了“DJIBaseViewController”,并将我自己的视图控制器作为它的代表。在代码中添加了很多断点后,我发现我的应用程序和示例应用程序之间的主要区别在于委托方法“sdkManagerProductDidChange”。
在启动画面加载后加载的第一个视图是。
sdkManager 正在使用给定的应用程序密钥和捆绑程序标识符正确注册。我还在 info.plist 文件中添加了“支持的外部附件协议”,其中包含三个元素 com.dji.video、com.dji.protocol 和 com.dji.common。
被困在这里很长一段时间了,真是令人沮丧。希望有人打电话求助。
提前致谢。
ios - DJI SDK“尚未记录返航点。” 错误代码:-5010
嘿你们,所以我试图启动一个 DJIWaypointMission 并且当我调用“startMissionExecutionWithCompletion”时出现错误我显然已经使用 prepareMission 成功地将任务上传到无人机。
它给我的错误是“尚未记录主页点”。我查看了有关设置起始点的方法的文档,但没有找到任何东西,并且我已经扫描了 DJIMissionManager 对象以及 DJIWayPointObject 的列出方法,但无济于事。我还尝试添加取自无人机当前状态的“aircraftLocation”。
下面是代码。
我已经被困了几个小时,希望有人以前见过这个。与往常一样,当我解决问题时,我会在此处和 DJI 论坛上发布解决方案。
我打电话给它的夜晚。
干杯
android - DJI“视频流解码示例”:MediaCodec 配置为 null Surface 问题
我正在开发一个 Android 移动应用程序,该应用程序面向无人机摄像头视图的实时增强可视化(特别是我正在开发带有相关 SDK 的 DJI Phantom 3 Professional)。为了研究如何用外部视频流替换我的 AR 框架中的摄像头流,我正在尝试 DJI 演示“视频流解码示例”(https://developer.dji.com/mobile-sdk/documentation/示例代码/index.html)。
特别是,我试图通过在 configure() 方法中将 Surface 参数设置为 null 来获取来自 MediaCodec 的原始视频数据。所以,我不需要让 MediaCodec 渲染视频流,但我想使用 onYuvDataReceived() 方法重定向每个输出 YUV 帧。所以我在 MainActivity.java 中更改了以下两行代码:
现在我的问题是,虽然在第一种情况下(将 Surface 设置为 MediaCodec)我可以计算每秒 30 帧的平均帧速率,但在这种情况下(将 Surface 设置为空)平均帧速率约为 15-每秒 16 个解码帧(这可能会严重影响视频渲染的质量!)。特别是,通过调试,我观察到问题出在以下部分:
日志文件:02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992):文件:DJIVideoStreamDecoder.java;类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 1 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;方法:decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.112 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 班级:DJIVideoStream解码器;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 02-05 21:42:58.122 I/DJIVideoStreamDecoder(27992): 文件: DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6 DJIVideoStreamDecoder.java; 类:DJIVideoStreamDecoder;METODO: decodeFrame() -- 6
如日志文件所示,通常 dequeueInputBuffer() 返回负 inIndex 值,并且某些帧无法输入到编解码器中,因为没有可用的输入缓冲区:这导致只有大约一半的帧将被正确解码。我只在表面为空的情况下观察到这个问题!怎么了?请给我一些建议。
android - 如何从 DJI 相机 Phantom 3 Professional 无人机中检索 NV21 数据
正如我在上一篇文章中所描述的,我正在开发一个 Android 移动应用程序,该应用程序面向无人机摄像头视图的实时增强可视化(特别是我正在开发带有相关 SDK 的 DJI Phantom 3 Professional),使用 Wikiitude 框架AR部分。感谢Alex 的回复,我结合dji 的 Video Stream Decoding实现了我自己的Wikitude Input Plugin。
我现在有一些问题。首先,《大疆的视频流解码》demo使用FFmpeg进行视频帧解析,使用MediaCodec进行硬件解码。因此,它有助于解析视频帧并解码来自 DJI Camera 的原始视频流数据并输出 YUV 数据。您建议我“从 dji sdk 获取原始视频数据并将其传递给 Wikitude SDK”:由于 Wikitude 输入插件需要 YUV 420 格式,为了提供自定义相机,我应该符合 NV21 标准将 MediaCodec 的 YUV 数据输出传递给它,对吗?
关于这一点,我尝试从 MediaCodec 输出中检索字节缓冲区(这可以通过在 configure() 方法中将 Surface 参数设置为 null 来实现,这具有调用回调并将其传递给外部侦听器的效果),但是我'我在可视化中遇到了一些关于颜色的问题,因为编码的视频颜色不正确(蓝色和红色似乎颠倒了,相机移动时噪音太大)..(请注意,当我通过 Surface 时不是null,在 codec.releaseOutputBuffer(outIndex, true) 指令之后,MediaCodec 在其上渲染帧并正确显示视频流,但我需要将视频流传递给 Wikitude 插件,因此我必须将表面设置为 null)。
我尝试设置不同的 MediaFormat.KEY_COLOR_FORMAT 但它们都不能正常工作。我该如何解决这个问题?