我已成功使用Mobile SDK传输来自DJI飞机的视频。但是,如果我让飞机长时间飞行,那么移动应用突然会无法从飞机上接收视频。
没有发生错误,因此我没有更改代码。我尝试重新启动无人机,控制器和应用程序。 重新安装应用程序后,该应用程序可以再次从飞机接收视频。但是,我想知道如何在不重新安装的情况下重新获取视频。
获取飞机视频的代码如下。
func setupVideoPreviewer() {
DJIVideoPreviewer.instance().setView(self.fpvView)
let product = DJISDKManager.product();
if ((product?.model == DJIAircraftModelNameA3)
|| (product?.model == DJIAircraftModelNameN3)
|| (product?.model == DJIAircraftModelNameMatrice600)
|| (product?.model == DJIAircraftModelNameMatrice600Pro)){
// DJISDKManager.videoFeeder()?.secondaryVideoFeed.add(self, with: nil)
DJISDKManager.videoFeeder()?.primaryVideoFeed.add(self, with: nil)
}else{
DJISDKManager.videoFeeder()?.primaryVideoFeed.add(self, with: nil)
}
DJIVideoPreviewer.instance().start()
}
func resetVideoPreview() {
DJIVideoPreviewer.instance().unSetView()
let product = DJISDKManager.product();
if ((product?.model == DJIAircraftModelNameA3)
|| (product?.model == DJIAircraftModelNameN3)
|| (product?.model == DJIAircraftModelNameMatrice600)
|| (product?.model == DJIAircraftModelNameMatrice600Pro)){
// DJISDKManager.videoFeeder()?.secondaryVideoFeed.remove(self)
DJISDKManager.videoFeeder()?.primaryVideoFeed.remove(self)
}else{
DJISDKManager.videoFeeder()?.primaryVideoFeed.remove(self)
}
}
func videoFeed(_ videoFeed: DJIVideoFeed, didUpdateVideoData rawData: Data) {
let videoData = rawData as NSData
let videoBuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: videoData.length)
videoData.getBytes(videoBuffer, length: videoData.length)
videoix += 1
DJIVideoPreviewer.instance().push(videoBuffer, length: Int32(videoData.length))
//videoBuffer.deallocate(capacity: videoData.length)
}