java - DJI mavic pro:使用遥控器时接收到损坏的视频
问题描述
我目前正在使用您的 SDK 开发一个 Android 应用程序。该应用程序应该连接到 Mavic Pro 无人机以接收其视频流和其他相关数据。
当手机通过WiFi连接到无人机时,此应用程序运行良好,但是通过遥控器连接手机时视频流损坏。
要接收视频帧,我使用以下代码:
// Callback fired when receiving a new frame of 'size' bytes
VideoFeeder.getInstance().getPrimaryVideoFeed().setCallback((bytes, size) -> {
if (codecManager != null) {
// Shows the video in a "SurfaceTexture" on the phone
codecManager.sendDataToDecoder(bytes, size, UsbAccessoryService.VideoStreamSource.Camera.getIndex());
DroneVideoFrame videoFrame = new DroneVideoFrame(bytes, size, getVideoWidth(), getVideoHeight());
}
});
如上所述,当通过 WiFi 连接到无人机时,此代码段可以完美运行。确切地说,每帧包含约 2000 字节的数据,视频为 1280x720p,24fps。由此产生的视频质量是完美的。
但是,当使用遥控器时,我得到的数据完全不同。虽然“大小”变量告诉我接收到的帧重约 2000 字节,但帧本身(包含在名为“字节”的变量中)的重量超过 30 KB。此外,这个 30 Kb 的帧似乎已损坏,因为它主要包含我认为是缓冲区字节的内容(一长串 0)。
此外,函数“getVideoWidth”和“getVideoHeight”分别返回“9px”和“16px”,这显然是错误的。此外,这些函数在使用无人机 WiFi 时返回正确的值。
我尝试过的:
更新固件
更新 DJI Go 4 应用程序。
截断帧中看到的缓冲区字节(“0”序列)。这会产生一个充满伪影的视频,如下图所示
系统信息:
无人机:DJI Mavic Pro,固件更新至 2018 年 7 月 9 日
电话:松下 FZ-N1“Toughpad” -Android 版本:6.0.1
你知道是什么导致了这种腐败吗?
解决方案
你得一一排除问题
(1) 可以尝试降级一个版本吗?这将是一个固件问题。众所周知,DJI 存在此类问题。最新并不意味着最安全。消费品评论可以参考这里https://forum.dji.com/thread-120739-1-1.html。
如果您是 DJI 合作伙伴,您可以致电他们确认固件。今天我们刚刚遇到了 M200 和 PSDK 的一些固件问题。我们给他们发了信息,他们很快就回复了。我们必须更改固件以启用 DJI PSDK 的云台电源控制。
(2) 更改射频频谱,例如从 15 到 18。以确保它不是因为某些跳频或其他人的故意干扰
(3) 如果更改固件版本和 RF 没有帮助,请尝试借用第二组并运行相同的代码以排除硬件问题,例如断开的 RF 链接。
(4)如果你借了一架无人机,他们都有同样的问题,那么它可能在你的代码的某个地方,有一个错误。
到目前为止我能想到的就是这些。如果我记得别的东西,我会补充
推荐阅读
- c++ - insertElement() 函数无法按预期工作
- ios - 尽管在代码和属性检查器中设置了 UITextfield.Text 颜色,但它不起作用 - Swift/Xcode
- javascript - 从javascript casperjs中的DOM元素中提取文本
- python - 理解具有并发期货的概念以加速网络抓取
- gerrit - gerrit 设置项目访问权限添加单个用户无效
- enums - typedef 的 System Verilog typedef
- mysql - 我如何检查我的 Db.Query 是否返回空行
- node.js - 如何让 Axios 使用 FormData 发送请求?
- python - 使用可修改符号进行比较(python)
- shell - 当我们使用 Shell 脚本 AIX Unix 添加用户时,如何验证 sudoers 中的某些用户?