Streaming raspi camera video to Tower video widget

I am reporting how to stream Raspberry pi camera video to Tower video widget. 

On the last weekend, I attended a drone meeting. I brought my IRIS which was given from my friend. It flew well and I was very satisfied with my first flight. In the meeting, other people brought their brand new drones like SOLO,  Phantom, and Inspire. I had a chance to fly them and I felt something was missing in my old IRIS. It was FPV! I live in Japan and because of a regulation, we can't use a 5.8GHz video transmitter without a licence. Furthermore, SOLO costs twice as in USA. However, I noticed a video widget(small screen) in Android "Tower" app and it was said that it receive custom video streaming.   In that article, the author used Ubuntu as the source. Since I had a raspberry pi 2 with pi camera, I had tried to use it as a FPV camera server. The followings are how to set up video streaming. I hope it will work with your environment.

1. Set up raspberry pi for streaming video

From the shell type the commands in the following post or clone a repo. to execute the srcript

Install gstreamer and enable hardware h264 encoding with gstreamer ...

2. Enable a camera module


$ sudo raspi-config

From the menu, Select "Enable camera" and then select "Enable".

If you already did it. You can move to the next step.

3. Start streaming

$ raspivid -n -t 0 -w 640 -h 360 -fps 24 -b 6000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host= port=9000

You should configure an address of the host and port. The address is the clients(an android tablet)' IP address. You can change port number. You can change the resolution of the video -w: wide -h: height. There are so many parameters to control the video format.

4. Show video on Tower widget

Please follow the instruction here.

You need to set the port number as same as the one specified above.

You only have video while connecting to your pixhawk. 

Now you can watch a flight data and video footage on a same screen as the latest drones!

On Wifi network, latency was not unbearable. I hope to install a raspi on my IRIS soon.

In a future, I would like to use 4G/LTE network for telemetry and video streaming. 

note: The current supply of the usb ports of a raspberry pi is limited. It is better to supply external power to wifi or 4G/LTE usb dongle or the system may hang up soon or later.

You may need to install rpicamsrc



Views: 4973

Comment by benbojangles on May 20, 2016 at 11:17am

There's an .img file if you don't wish to go through the setup of raspberry pi (gstreamer, camera), it works with pi2/3/Zero:

There's some guides and test experiments here:

Comment by Randy on May 20, 2016 at 5:26pm

Great stuff.  The video feature in Tower is one of my favourites.  Great to see practical advice on getting it going.  I suspect this would work for the NAVIO2 boards as well.

Comment by Rana on May 20, 2016 at 7:00pm

Its really nice, thanks for sharing !

Comment by Fnoop on May 21, 2016 at 1:22am

Hi, there's no need for step 1., gstreamer-omx is available in modern raspbian.

Comment by Kaizu on May 21, 2016 at 2:52am

Thanks a lot for comments! I will try Navio soon.

Comment by Fredia Huya-Kouadio on May 21, 2016 at 8:42am

@Kaizu, great job with the write-up! 

Would you consider posting it on the tower wiki as well at


Comment by Kaizu on May 22, 2016 at 7:58am

Dear Fredia. 

Thanks for your recommendation. I have not posted on your wiki. Can I make a new page or edit your page and add link to this article?

Comment by Artem on May 25, 2016 at 1:56pm

It would be good if we could use CSI-2  (pi camera input) for HDMI 'IN' 

this is entirely possible hardware wise with multiple HDMI to CSI-2 adapter boards built around Toshiba TC358743XBG 

this will open up doors to single bidirectional ground-air link for combined RC telemetry and HD video downlink. 

right now the only piece of the puzzle missing is kernel level support for hardware based encoding/decoding. I believe that with Dronecode direct communication (request from high level developers like Trdige) to Raspberi Pi foundation is entirely doable. In fact, development platform was created by Pi foundation years ago (based on which all other boards are created), but driver development was halted and never resumed. 

Comment by Matthias Pletl on May 29, 2016 at 2:20am

Hi, is it possibble to use a UVC device (/dev/video0) instead of rapicam? How to change the gstream-command to get the this working?


Comment by Fnoop on May 29, 2016 at 2:44am

@Matthias, sure you can use any v4l2 device.  It depends on the capability of the camera, so if it outputs h264 just do something like:

gst-launch-1.0 v4l2src device=/dev/video0 ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host= port=5000

If it only outputs raw or mjpeg, then do something like this for mjpeg:

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegparse ! jpegdec ! queue ! videoconvert ! omxh264enc ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host= port=5000

It works similarly for raw, just alter the caps and remove the jpeg elements.  You can also process h264 from the raspberry camera in the same way, although the current gstreamer that comes with the current raspbian is broken.


You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service