DJI Telloを使ってVideoとStateを取得するプログラムを書いていたときの出来事。
Tello SDK User Guide
Receive Tello State
Tello IP: 192.168.10.1 ->> PC/Mac/Mobile UDP Server: 0.0.0.0 UDP PORT: 8890
Remark3: Set up a UDP server on PC, Mac or Mobile device and listen the message from IP 0.0.0.0 via UDP PORT 8890. Do Remark2 to start receiving state data if you haven’t.
事前に192.168.10.1:8889に任意の任意のデータを送信しないと、Stateの受信に失敗する。
Receive Tello Video Stream
Tello IP: 192.168.10.1 ->> PC/Mac/Mobile UDP Server: 0.0.0.0 UDP PORT:1111
Remark4: Set up a UDP server on PC, Mac or Mobile device and listen the message from IP 0.0.0.0 via UDP PORT 11111.
Remark5: Do Remark2 if you haven’t. Then send “streamon” command to Tello via UDP PORT 8889 to start the streaming.
事前に192.168.10.1:62512に任意のデータを送信しないと、Videoの受信に失敗する。
Wiresharkを覗いてみた
どうやらStateの送信元ポートが8889、Videoの送信元ポートが62512らしい。つまり送信元ポートを叩いていることになる。
謎仕様と書いたが結局のところ...
PythonでOpenCVのVideoCaptureでVideoを受信する際にはポートを叩く必要はなかった。VideoとStateを取得するプログラムはRustで書いているので、言語の問題なのかもしれない。