We have published Camera Streaming Daemon, a functional, but still under development, project to discover, publish and stream videos from a drone. It was based on the previously discussed proposal published at http://discuss.ardupilot.org/t/review-camera-streaming-custom-mavlink-message/11132, but with several major changes. Code and documentation are available at https://github.com/01org/camera-streaming-daemon.
After some suggestions at the Ardupilot gitter we decided to use RTSP for video streaming and ZeroConf (using avahi library) for advertisement. With this approach we are completely independent from the flight stack and with no need to create new Mavlink messages. The single requirement is to have a ip connection between the drone and the ground system.
The basic flow of a ground control software accessing the cameras from drone is:
1 - Camera Streaming Daemon running on the drone looks for cameras connected in the drone.
2 - Daemon creates a RTSP server to stream the videos
3 - Daemon advertise all available video streams using Zeroconf
4 - Ground Control System scans for Zeroconf RTSP streams
5 - Streams published by drone are found
6 - Ground Control System makes a request for video streaming using a URI with information provided by Zeroconf service and extra parameters (example: rtsp://192.168.1.1:8544/video1?format=YUYV&width=800&height=600)
7 - Drone open the video device and streams it to the Ground Control System
Extra information is published at the project wiki page: https://github.com/01org/camera-streaming-daemon/wiki/
So far we don't have a fully working implementation in a Ground Control System to support the Camera Streaming Daemon, but we am working in some patches to QGroundControl to support this. I'll make them available as a pull request as soon as possible.
I would like to hear from you comments about this proposal and help with implementation and review. Please, let me know if you have any problems testing it.