Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multicast video reader #1

Open
GoogleCodeExporter opened this issue Mar 28, 2015 · 14 comments
Open

Multicast video reader #1

GoogleCodeExporter opened this issue Mar 28, 2015 · 14 comments

Comments

@GoogleCodeExporter
Copy link

The current video implementation uses unicast and does not allow reading the 
video while another application is controlling the drone and displaying the 
video. The attached file implements a multicast video reader for ardrone. Maybe 
its helpful for somebody.

Cheers,
Normen Hansen

Original issue reported on code.google.com by normen667 on 14 May 2011 at 11:17

Attachments:

@GoogleCodeExporter
Copy link
Author

Normen, 

Is it an undocumented AR Drone feature to send multicast packets? I could not 
find it anywhere in the documentation? Very interesting!

Original comment by [email protected] on 15 May 2011 at 3:09

  • Changed state: Accepted
  • Added labels: Type-Enhancement
  • Removed labels: Type-Defect

@GoogleCodeExporter
Copy link
Author

It has been added in the latest firmware and is done by default now, on address 
224.1.1.1 with the same ports as unicast. See this post: 
https://projects.ardrone.org/boards/1/topics/show/2565
I use this listener to view the video on a laptop while controlling the drone 
from an iPhone and it works nicely, see the test attached to this post.

Original comment by normen667 on 15 May 2011 at 10:20

  • Added labels: ****
  • Removed labels: ****

Attachments:

@GoogleCodeExporter
Copy link
Author

I saw that the api has changed a bit since I created the files and I updated 
them to the latest changes. At the same time I changed the handling of the 
BufferedImages a bit so that there is no unnecessary flow of BuffereImages 
through the garbage collector. The synchronization happens on the Reader object 
which is maybe not ideal, I think the VideoListener callback could maybe just 
deliver the BufferedVideoImage so that the listener can write to its own 
BufferedImage and do the synchronization by itself.

Cheers,
Normen

Original comment by normen667 on 15 May 2011 at 11:32

  • Added labels: ****
  • Removed labels: ****

Attachments:

@GoogleCodeExporter
Copy link
Author

Normen, I think we should add multicast support to the project. It looks like 
that 99% of the code is same as unicast, with exception of socket 
initialization. What do you think about adding boolean flag to class 
VideoReader constructor 'use_multicast'. If true, multicast will be used. If 
false, unicast will be used.

If you agree with this approach I think this is a way to go. I will appreciate 
the patch for this, but if you do not want to do it, perhaps I can do this 
change myself in day or two.

Thanks!

Original comment by [email protected] on 16 May 2011 at 2:46

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

The thing is I don't use the application to control the drone but only to 
display the image.. Thats why my callback does not have an ARDrone object 
reference.. The current API does not really account for this case and I could 
not use the DroneVideoListener for it (thats why I started a new class in the 
first place). Apparently the drone now supports multicast also for navdata, 
maybe the java API could be made more flexible in that one could use "readers" 
for both kinds of data separate or they get instantiated by an ARDrone object 
like now (mainly its about wrapping calls to the ARDrone in an interface I 
guess).

Original comment by normen667 on 16 May 2011 at 8:05

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

I think we should add "passive" mode to our ARDrone API when it listens for 
navdata and video stream on multicast sockets without actually sending any 
commands. User can create ARDrone object passing 'passive' flag to constructor 
and register callbacks to receive navdata events and video stream.

We are working on simple Java UI to show status, and it will also work in 
passive mode.

Original comment by [email protected] on 19 May 2011 at 12:13

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

That sounds good. I am not really sure how you plan to implement getting 
information from the drone as theres no listener queue for navigation data (it 
basically is only available inside the ARDrone class) but if you plan to 
instantiate everything via the ARDrone class instead of having listeners that 
can be used outside of it then this sounds like the best idea, yeah. I also dig 
the latest moving to queues for I/O stuff, the mutexes seemed to grow to a 
dangerous level ;) I still have problems with the PS3 controller sometimes 
sending no data even though it got inited.. Maybe a threading issue too.. When 
I find out more I'll post another issue.

Original comment by normen667 on 20 May 2011 at 12:36

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

Thanks for patches. I will review them and incorporate!

Original comment by [email protected] on 22 May 2011 at 2:44

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

I tried to use multicastvideoreader for displaying video but I didn't succeed. 
It seems to me, that multicast is not activated by default. Am I missing 
something?

Original comment by [email protected] on 17 Jun 2011 at 12:58

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

I never get around trying multicast myself. Perhaps original patch submitter 
can help ;)

Original comment by [email protected] on 18 Jun 2011 at 4:25

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

I am running Miru's RC mod that lets me control the drone by RC controller and 
it works great. When I try to connect with a 3rd party software including 
javadrone, the drone does a force landing. I am on firmware 1.7.11. I just want 
to monitor the video by itself and I think this bit of code is perfect for this.

I tried to compile this java program (I am a c/c++ guy, not a java guy) using 
javac in windows command prompt and I have gotten this far.

C:\Users\X\Downloads\ardrone>"C:\Program Files\Java\jdk1.7.0_02\bin\javac.exe" T
est.java
Test.java:28: error: Test is not abstract and does not override abstract method
frameReceived(int,int,int,int,int[],int,int) in DroneVideoListener
public class Test extends javax.swing.JFrame implements DroneVideoListener {
       ^
Test.java:71: error: method does not override or implement a method from a super
type
    @Override
    ^
C:\Users\X\Downloads\ardrone\src\com\codeminders\ardrone\MulticastVideoReader.ja
va:59: error: method frameReceived in interface DroneVideoListener cannot be app
lied to given types;
                    drone.frameReceived(videoImage);
                         ^
  required: int,int,int,int,int[],int,int
  found: BufferedImage
  reason: actual and formal argument lists differ in length
C:\Users\X\Downloads\ardrone\src\com\codeminders\ardrone\MulticastVideoReader.ja
va:83: error: method frameReceived in interface DroneVideoListener cannot be app
lied to given types;
        drone.frameReceived(errorImage);
             ^
  required: int,int,int,int,int[],int,int
  found: BufferedImage
  reason: actual and formal argument lists differ in length
4 errors

I would greatly appreciate is someone could give me a jar file or tell my why 
this isnt meshing well (java version?)

I just want to be able to see video, and record it if possible, while my RC mod 
does all the controlling. 

Original comment by [email protected] on 13 Jan 2012 at 2:16

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

Hi everyone I've been playing around writing a scala app to fly the drone with 
wiimotes and I was trying to get multicast video to work.  Is this still 
working for anyone?  I've seen some folks talking about multicast issues with 
the latest firmware but I had never tried it on the previous firmware.  I don't 
see any code in the posted example that tells the drone to start sending video.

Does multicast only work if another unicast video consumer has been started?

Original comment by [email protected] on 18 Feb 2012 at 9:44

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

Original comment by [email protected] on 19 Jul 2012 at 6:00

  • Added labels: ****
  • Removed labels: ****

@GoogleCodeExporter
Copy link
Author

Original comment by [email protected] on 26 Jul 2012 at 5:21

  • Added labels: Priority-Low
  • Removed labels: Priority-Medium

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant