2017-01-15 17 views
0

私はパノラマデモの例に従い、無人機に接続しています。私は正しいモデルとDJICameraを持つDJIA機を手に入れていますが、ビデオは決して始まらない(画像なし& didReceiveVideoDataは決して呼び出されません)。私がDJI GO 4アプリに切り替えると、ライブビデオのフィードを見ることができます。何か案は?ファントム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

DJIのiOSのPanoDemoは、Objective-Cで書かれて、私はファントム4 Proの上でそれを試してみましたが、デモアプリケーションが正常にライブビデオフィードを表示することができます。 Swiftを使って自分のDJI SDKアプリを作っているようです。

上記のコードでは、あなたはアプリを正常に登録していないと思います。 registerApp()楽しい場合は、正しくないDJISDKManager.registerApp()メソッドに "****************"を渡します。あなたのXcodeを使用してAppキーを作成する必要がありますDJI開発者ウェブサイトのユーザーID:https://developer.dji.com/user/apps/にバンドルIDを入力し、registerApp()メソッドに貼り付けます。

詳細については、DJI SwiftサンプルコードのGithub: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") 
} 
関連する問題