anqixu / tello_driver

ROS driver for DJI/Ryze Tello drones
Apache License 2.0
97 stars 95 forks source link

Unable to video stream using ROS tello driver #5

Closed amymoz closed 5 years ago

amymoz commented 5 years ago

Greetings, I have trouble streaming live video using ROS Tello package (specifically the tello_driver tello_node.launch). I run into this error: [ERROR] [1548937379.184698]: fgrab: pyav stream failed - [Errno 1094995529] Invalid data found when processing input: ''

anqixu commented 5 years ago

For me, this typically means that the Wifi connection to the drone is unstable and noisy. Try again with the drone next to the WiFi antenna, and/or use a WiFi dongle with full-length antenna, and/or use a WiFi repeater.

Good luck.

slamlixiaodong commented 5 years ago

I encountered the similar problem, The words taht "[ERROR] [1553923975.539334]: fgrab: pyav stream failed - Expected bytes, got VideoStream" always are sent. How can we resolve it?

JaySurplus commented 5 years ago

I encountered the similar problem, The words taht "[ERROR] [1553923975.539334]: fgrab: pyav stream failed - Expected bytes, got VideoStream" always are sent. How can we resolve it?

@slamlixiaodong I encountered the same issue, got any solutions? Thank you.

anqixu commented 5 years ago

I'm not sure why this is happening, but I suspect that there might be a mismatch in code versions. Can you report the following?

Cynthia-324 commented 5 years ago

Hello, anqixu~ I've met with this problem too. I run this code in Linux ubuntu16, 64bit ROS kinetic, python 2.7, pyav 0.1.3. Is that match with your code versions?

anqixu commented 5 years ago

I tested with pyav 0.5.2 on 64-bit Ubuntu 18.04 and ROS Melodic, Python 2.7.15+. The error traces to pyav's open function, which appears to be expecting a bytes object rather than a file object. While I couldn't find the specific codebase for pyav 0.1.3, I suspect that it's because of this outdated pyav that the codebase broke. Unfortunately, I did not write the pyav + stream integration, and simply derived from the original TelloPy repo. Later versions of pyav can work with file-like objects, rather than expecting raw bytes, and my understanding is that TelloPy utilizes this fact to hook up a lazy UDP client class to pyav that streams packets when they arrive.

Aside: I loaded Ubuntu 16.04 on docker, installed python-pip, and tried to pip install av. While I couldn't install and test successfully due to difficulties such as ffmpeg version incompatibility etc., pip did try to install pyav 0.6.2. So my first recommendation to you would be to try to upgrade your pyav version: pip2 install --upgrade av (either with --user also, or pre-appended with sudo -H). Otherwise, I unfrotunately don't have the time currently to work on making TelloPy backwards-compatible with pyav 0.1.3, but do welcome contribution from community :)

Cynthia-324 commented 5 years ago

I tested with pyav 0.5.2 on 64-bit Ubuntu 18.04 and ROS Melodic, Python 2.7.15+. The error traces to pyav's open function, which appears to be expecting a bytes object rather than a file object. While I couldn't find the specific codebase for pyav 0.1.3, I suspect that it's because of this outdated pyav that the codebase broke. Unfortunately, I did not write the pyav + stream integration, and simply derived from the original TelloPy repo. Later versions of pyav can work with file-like objects, rather than expecting raw bytes, and my understanding is that TelloPy utilizes this fact to hook up a lazy UDP client class to pyav that streams packets when they arrive.

Aside: I loaded Ubuntu 16.04 on docker, installed python-pip, and tried to pip install av. While I couldn't install and test successfully due to difficulties such as ffmpeg version incompatibility etc., pip did try to install pyav 0.6.2. So my first recommendation to you would be to try to upgrade your pyav version: pip2 install --upgrade av (either with --user also, or pre-appended with sudo -H). Otherwise, I unfrotunately don't have the time currently to work on making TelloPy backwards-compatible with pyav 0.1.3, but do welcome contribution from community :)

Thanks for your detailed answer, I've solved this problem by resetting the environment. Now I found that when using 'rqt_image_view', the image had a delay about 10 seconds. Do you meet with this problem?

Best Regards

anqixu commented 5 years ago

the delay should be temporary, since pyav buffers the first 10-30 seconds of frames. but then it should catch up. If not, I don't know the solution, maybe try a faster computer?