Anafi & VLC / RTSP Stream

We need an Anafi category :wink:

Is there way to host the Anafi live stream in a player such as VLC similar to what is offered on the Mambo? I see there is an RTSP listener on port 554.

Thanks in advance.

Yes, you can use RTSP to get a video stream from an Anafi:

  • vlc rtsp://anafi.local/live
  • Note that there is a bug in VLC 2.x with some features used on the Anafi live stream, so the video won’t be perfect :wink: The bug is corrected on VLC 3 and newer versions.
  • All PC-based players (vlc, mplayer …) won’t have the same error concealment as we have in FreeFlight, so expect a “worse” video stream for the same wifi conditions.
  • Anafi only accepts ONE video client, so if you have FreeFlight (or a SkyController3 with FreeFlight attached), you won’t be able to get the video this way.
  • Adaptive bitrate will be best when connected to a SkyController3 (we have a better control of the available wifi bandwidth between our two devices :wink: )

With that said, there is a slightly better option: Get the video stream from the SkyController3 !

Connecting the SkyController3 to your computer with the USB-C cable (with no smartphone connected) should create an RNDIS interface on your computer (linux shoud work out of the box, Windows requires a driver install, and to my knowledge there is no RNDIS driver available on macOS :confused: )

With the SkyController3 connected, you can just change the address of the stream to the one of the SkyController:
vlc rtsp://192.168.53.1/live

And get the same result.

3 Likes

So what I’d like to do is control the drone via the SkyController, while simultaneously feeding the live video to a perception pipeline. Ideally, I’d want the operator to use video on the SkyController, while simultaneously also streaming to a PC. It looks like this is not possible, however.
Next best option would be using the SkyController for control and the video shown on the PC monitor via RTSP. However, so far my testing with VLC and gstreamer shows significant latency, making controlling the drone infeasible. If you have any suggestions to improve the situation, they would be welcome.

1 Like

Hi,

You can try to reduce the latency in VLC by changing the “Network Caching” setting (in Tools > Preferences > Check “All” at the bottom > Input / Codecs) from the default 1s value to a lower value. Doing this also reduces the stream resiliency, so expect to see more artifacts than with the longer setting.

Regards,
Nicolas.

1 Like

Hello Nicolas,

I can connect a skycontroller 2 via a USB hub on an Android smartphone with FreeFligh and a USB Ethernet adapter to recover the video stream.

Is it possible to do the same with a skycontroller 3?

Thanks in advance.

Hi,

Yes. if your USB-Eth adapter works on a SkyController 2, it should work on a SkyController 3 too, with the same setup :wink:

Regards,
Nicolas.

1 Like

Thank you Nicolas for your quick response.

Also, in an old post you were talking about a wiki where all USB ethernet dongles that work will be referenced.
Does this wiki exist?

The firmware of sky controller 2 is currently at version 1.0.9.
What are supported dongles / chipsets?
I am currently using an apple dongle.

The broadcast address of the image is in http for sky 2 and in rtmp for sky 3. Is the broadcast flow different between the two models of sky controller?

Thanks again.

Hi,

Unfortunately, the wiki does not exists because we never took the time to test a whole lot of devices. Note that the usb-ethernet functionality of the SkyControllers is not a core feature, and thus will probably never have a complete compatibility list.

As stated previously, we use Trendnet TU2-ET100 adapters, which do work on every SkyController models (latest firmwares), and most (if not all) USB 2.0 hubs should work too.
If your adapter works on a SkyController 2, if should work on the 3. (The opposite is not true !)

Regarding the protocols, both generations (Bebop 2 + Sky 2, and Anafi + Sky 3) are using RTP for actual video transmission, but they differ in their session creation protocol:

  • The old generation (Bebop / Sky 2) used a custom session creation protocol, which is triggered by the http request.
  • The new generation (Anafi / Sky 3) uses RTSP, which is directly implemented in many video players.

For more informations about the protocols used in an Anafi + SkyController 3 setup, you can refer to the PDrAW documentation.

Regards,
Nicolas.

Merci Nicolas

Hi Nicolas

I have a sky 2 for a bebop and a sky 3 for an Anafi.

When I get the video stream by VLC, everything is fine (respectively by http and RTSP)

But when I try with mplayer or omxplayer (on raspberry) I got this error message:

With mplayer:

[ffmpeg/demuxer] sdp: getaddrinfo(addr:192.168.53.1): Name or service not known
[ffmpeg/demuxer] sdp: getnameinfo: ai_family not supported
[lavf] avformat_open_input() failed
Failed to recognize file format.

And with omxplayer:

[sdp @ 0x4d6a30] getaddrinfo(addr:192.168.53.1): Name or service not known
[sdp @ 0x4d6a30] getnameinfo: ai_family not supported

The sky controller get their ip by DHCP (here 192.168.1.127).
I tried to disable DHCP but a network scan by nmap does not detect them.
It seems that it is necessary to assign an IP by DHCP.
Can you confirm it to me ?

In this case why is the IP 192.168.53.1 displayed in the error message?
I even tried giving them this IP in DHCP but I got the same error message.

Can you Help me ?

Regards,
Olivier

Hi,

When the SkyController is connected to a network (via usb-eth dongle or directly through the USB-C port for the Sky3), it will search the network for a DHCP server, and if no DHCP server is found, it will start its own. This is done to avoid conflicts if the SkyController is connected to an existing network instead of creating its own.

This means that, in the case your network already has a DHCP server, the SkyController will not use its default 192.168.53.1 address. This also means that you will need to find its real IP address, and use it in your video player command line:
If your SkyController gets assigned the 192.168.1.127 address, then running mplayer rtsp://192.168.1.127/live should work.

Regards,
Nicolas.

Hi Nicolas,

Mplayer work with `rtsp://192.168.1.127/live.

But mplayer does not work with sky controller 2.
I’ve set the ip 192.168.53.1 on the sky 2.
Wireshark shows a different http header if VLC or Mplayer is used.

Mplayer - GET:
GET /video HTTP/1.1
Host: 192.168.53.1:7711
Connection: close
Accept-Charset: ISO-8859-1,utf-8;q=0.7,;q=0.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,
/*;q=0.8
Accept-Encoding: *
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/47.0 (Chrome)
Accept-Language: en-us,en;q=0.5

So, mplayer send a head request (but not VLC):

Mplayer - HEAD:
HEAD /video HTTP/1.1
Host: 192.168.53.1:7711
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/47.0 (Chrome)
Connection: close
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Language: en-us,en;q=0.5

VLC - GET:
GET /video HTTP/1.0
Host: 192.168.53.1:7711
User-Agent: VLC/3.0.6 LibVLC/3.0.6
Icy-MetaData: 1

Why is the mplayer http trigger different from VLC?

Is it a house trigger?
In this case why does VLC know how to manage it?

Do you know how can I handle this with mplayer?

I try this command but it’s no ok.

#!/bin/bash
curl -H "Accept-Language: fr" -H "User-Agent: VLC/3.0.6 LibVLC/3.0.6" -H "Range: bytes=0-" http://192.168.53.1:7711/video 
curl -H "User-Agent: VLC/3.0.6 LibVLC/3.0.6" -H "Icy-MetaData: 1" -H "Accept:" http://192.168.53.1:7711/video | mplayer -

The goal is to develop a professional application “Plug and Play” streaming video to a network independent of the skycontrolleur used because our park is composed of bebop and anafi.

Thanks again.

1 Like

Hi,

It seems that mplayer does not understand properly the SDP document we provide through the http request. I was able to get a stream with the following method:

wget http://192.168.53.1/video; sed -i 's/addr://' video; mplayer video

Regards,
Nicolas.

2 Likes

@Nicolas I was able to play directly through SkyController 3 and mplayer.

I had luck connecting to livestream on a Mac with the following gstreamer pipeline:

gst-launch-1.0 rtspsrc location=rtsp://anafi.local/live latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=640,height=480 ! autovideosink

2 Likes

Hi Nicolas,

Is it possible to use exiftool to extract streamed metadata from Parrot’s RTP old and new generation ?
(https://exiftool.org/TagNames/Parrot.html)
Maybe with piping ? (https://exiftool.org/exiftool_pod.html#curl--s-http:-a.domain.com-bigfile.jpg-exiftool--fast)

  • Have you ever try it ?
  • Its look like complicated with the old generation which used a custom session creation protocol triggered by the http request.

My objective is to obtained metadata in real time regardless the type of Drone.

Regards,
Pierre