我目前正在使用您的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。由此产生的视频质量是完美的。
但是,使用遥控器时,我得到的数据完全不同。尽管“ size”变量告诉我所接收的帧重约2000个字节,但帧本身(包含在名为“ bytes”的变量中)重30多个字节。而且,此30 Kb帧似乎已损坏,因为它主要包含我认为是缓冲区字节的内容(一长串0)。
此外,函数“ getVideoWidth”和“ getVideoHeight”分别返回“ 9px”和“ 16px”,这显然是错误的。而且,那些功能在使用无人机WiFi时会返回正确的值。
我尝试过的方法:
更新固件
更新DJI Go 4应用程序。
截断在帧中看到的缓冲区字节(序列“ 0”)。如以下图片所示,这会产生一个充满伪像的视频
系统信息:
Drone:DJI Mavic Pro,固件截至2018年7月9日最新
电话:Panasonic FZ-N1 "Toughpad"-安卓版本:6.0.1
您知道导致腐败的原因是什么吗?
答案 0 :(得分:0)
您必须一个个地排除问题
(1)可以尝试降级一个版本吗?这将是固件问题。 DJI已知存在此类问题。最新并不意味着最安全。有关消费品的评论,您可以在这里https://forum.dji.com/thread-120739-1-1.html进行参考。
如果您是DJI合作伙伴,可以致电他们进行固件确认。今天,我们刚刚遇到了M200和PSDK的固件问题。我们向他们发送消息,然后他们迅速答复。我们必须更改固件才能为DJI PSDK启用云台电源控制。
(2)将RF频谱从15更改为18。确保不是由于某些跳频或其他人的故意干扰造成的
(3)如果更改固件版本和RF无法解决问题,请尝试借用第二套固件并运行相同的代码以排除硬件问题,例如RF链接断开。
(4)如果您借用了无人驾驶飞机,并且它们都有相同的问题,那么它可能在您的代码中的某个位置,这是一个错误。
到目前为止,我能想到的就是这些。如果我还记得别的东西,我会加病