2017-01-15 1 views
0

파노라마 데모 예제를 따라 드론과 연결되어 있습니다. 나는 올바른 모델과 DJICamera를 가진 DJIAircraft를 얻고 있지만 비디오는 결코 시작하지 않습니다 (아무런 이미지도 없습니다 & didReceiveVideoData는 결코 호출되지 않습니다). DJI 4 앱으로 전환하면 라이브 비디오 피드를 볼 수 있습니다. 어떤 아이디어? DJI의 아이폰 OS PanoDemo은 오브젝티브 C로 작성팬텀 4에 연결되었지만 비디오를 수신하지 못했습니다.

// 
// CaptureViewController.swift 
// 

// MARK: - Source https://developer.dji.com/mobile-sdk/documentation/ios-tutorials/PanoDemo.html 

import UIKit 
import VideoPreviewer 
import ToastSwiftFramework 

class CaptureViewController: UIViewController, DJISDKManagerDelegate, DJICameraDelegate, DJIPlaybackDelegate, DJIMissionManagerDelegate, DJIFlightControllerDelegate { 
    @IBOutlet var fpvPreviewView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tabBarItem.title = "CAPTURE".localized 

     VideoPreviewer.instance().setView(fpvPreviewView) 
     self.registerApp() 
    } 

    func registeredAppWithError(error: Error?) { 
     guard error == nil else { 
      makeToast("Error registering app \(error)") 

      return 
     } 

     VideoPreviewer.instance().start() 
    } 

    //MARK: - DJI Delegate 

    func registerApp() { 
     DJISDKManager.registerApp("******************", with: self) 
    } 

    func sdkManagerDidRegisterAppWithError(_ error: Error?) { 
     guard error == nil else { 
      makeToast("Error registering SDK Manager \(error)") 

      return 
     } 

     DJISDKManager.startConnectionToProduct() 

     makeToast("Registered app with DJISDKManager") 
    } 

    func camera(product: DJIBaseProduct?) -> DJICamera? { 
     guard let aircraft = DJISDKManager.product() as? DJIAircraft else { return nil } 

     return aircraft.camera 
    } 

    func sdkManagerProductDidChange(from oldProduct: DJIBaseProduct?, to newProduct: DJIBaseProduct?) { 
     makeToast("Found \(newProduct?.model ?? "")") 

     guard let camera = camera(product: newProduct) else { 
      makeToast("No camera!") 

      return 
     } 

     makeToast("Camera \(camera.displayName)") 

     camera.delegate = self 
     camera.playbackManager?.delegate = self 
    } 

    var receivedVideo = false 

    func camera(_ camera: DJICamera, didReceiveVideoData videoBuffer: UnsafeMutablePointer<UInt8>, length size: Int) { 
     makeToast("Receiving video!") 

     VideoPreviewer.instance().push(videoBuffer, length: Int32(size)) 
    } 

    func playbackManager(_ playbackManager: DJIPlaybackManager, didUpdate playbackState: DJICameraPlaybackState) { 
     makeToast("PlaybackState: \(playbackState.playbackMode)") 
    } 
} 
+0

동일한 문제가 있습니다. 찾으십니까? –

+0

예, 리모콘, 브리지 장치 및 개발 장치를 다시 시작하면 제대로 작동합니다. –

답변

-1

, 나는 팬텀 사 프로에 그것을 시도, 데모 응용 프로그램은 성공적으로 라이브 비디오 피드를 표시 할 수 있습니다. Swift를 사용하여 자신의 DJI SDK 앱을 작성하는 것처럼 보입니다.

위에 표시된 코드에서 앱을 성공적으로 등록하지 않은 것 같습니다. registerApp() 재미 있으면, 올바르지 않은 DJISDKManager.registerApp() 메소드에서 "****************"를 전달하면 Xcode를 사용하여 App 키를 만들어야합니다 DJI 개발자 웹 사이트 사용자 센터 번들 ID : https://developer.dji.com/user/apps/을 입력 한 다음 registerApp() 방법으로 붙입니다.

자세한 내용은 Github의 DJI Swift 샘플 코드 (https://github.com/dji-sdk/Mobile-SDK-iOS/tree/master/Sample%20Code/SwiftSampleCode)를 참조하여 자신의 DJI SDK 앱을 만드는 방법을 알아볼 수 있습니다. 희망이 도움이!

+2

물론 모든 사람이 StackOverflow에 API 키를 게시하기 때문입니다. 분명히 **************** 대신 등록 된 앱 키를 사용했습니다. –

0

나는 우리의 응용 프로그램에서 비슷한 문제에 직면했다. 문제는 DJI 무인기가 연결될 때 동시에 우리는 연결시 카메라 인스턴스를 얻지 못한다는 것이다. 연결 후 5-10 초의 지연을 추가하십시오. 나는 비슷한 일을했고 그것은 지금 모든 무인 항공기를 위해 일하고있다.

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(7 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { 
        let camera = ConnectedDroneManager.sharedDroneInstance.fetchCamera() 
       camera?.delegate = self 
       camera?.playbackManager?.delegate = self 

}) 

희망이 도움이 될 것입니다.

0

앱을 DJI 제품에 연결 한 후에 비디오 스트리밍을 시작해야합니다. VideoPreviewer.instance().start()sdkManagerProductDidChange 대리자 방법에 넣으면 문제가 해결됩니다.

func sdkManagerDidRegisterAppWithError(_ error: Error?) { 
    guard error == nil else { 
     makeToast("Error registering SDK Manager \(error)") 

     return 
    } 

    DJISDKManager.startConnectionToProduct() 
    VideoPreviewer.instance().start() 

    makeToast("Registered app with DJISDKManager") 
} 
관련 문제