Как отобразить видео из UDP-сокета с помощью OpenCV в Android? (DjiTello) - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь получить видео, которое транслируется с дрона Dji Tello. Он передает через сокет UDP по IP-адресу 0.0.0.0 и по порту 11111.

Я пытаюсь отобразить видео на виде с поверхности и запускаю следующий код после нажатия кнопки.

String udp_address = "udp://@" + "0.0.0.0" + ':' + 11111;
cap = new VideoCapture(udp_address);

cap.open(udp_address);

Mat frame = new Mat();
cap.read(frame);

Log.d("Matrix", frame.toString());

Mat frameOut = new Mat(frame.cols(), frame.rows(), CvType.CV_8UC1);
Imgproc.cvtColor(frame, frameOut, Imgproc.COLOR_BGR2RGB);

Bitmap bm = Bitmap.createBitmap(frameOut.cols(), frameOut.rows(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(frame, bm);

Canvas canvas = new Canvas(bm);

surfaceView.draw(canvas);

И я получаю следующую ошибку:

2019-05-11 23:32:11.500 11883-11883/com.example.telloandroid E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.telloandroid, PID: 11883
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6329)
        at android.view.View$PerformClick.run(View.java:25002)
        at android.os.Handler.handleCallback(Handler.java:809)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7555)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6329) 
        at android.view.View$PerformClick.run(View.java:25002) 
        at android.os.Handler.handleCallback(Handler.java:809) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:166) 
        at android.app.ActivityThread.main(ActivityThread.java:7555) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963) 
     Caused by: CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.1.0) /build/master_pack-android/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
    ]
        at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method)
        at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:2309)
        at com.example.telloandroid.MainActivity.startVideo(MainActivity.java:153)
            ... 11 more

Я знаю, что я ничего не получаю от Drone, потому что рамка выглядит как

Mat [0 * 0 * CV_8UC1, isCont = false, isSubmat = false, nativeObj = 0x72c3555d00, dataAddr = 0x0]

Что я могу делать не так?

Спасибо заранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...