README.md 5.33 KB
Newer Older
1 2 3 4
# QGroundControl

## Video Streaming

Gus Grubba's avatar
Gus Grubba committed
5
For supported platforms, QGroundControl implements an UDP RTP and RSTP video streaming receiver in its Main Flight Display. It uses GStreamer and a stripped down version of QtGstreamer. We've standardized on **GStreamer 1.5.2**. It has been reliable and we will be using it until a reason to change it surfaces. Newer versions of GStreamer will break the build as some dependent libraries changed.
Gus Grubba's avatar
Gus Grubba committed
6 7 8 9 10 11
To build video streaming support, you will need to install the GStreamer development packages for the desired target platform.

If you do have the proper GStreamer development libraries installed where QGC looks for it, the QGC build system will automatically use it and build video streaming support. If you would like to disable video streaming support, you can add **DISABLE_VIDEOSTREAMING** to the **DEFINES** build variable.

### Pipeline

Gus Grubba's avatar
Gus Grubba committed
12
For the time being, the pipeline is somewhat hardcoded, using h.264. It's best to use a camera capable of hardware encoding h.264, such as the Logitech C920. On the sender end, for RTP (UDP Streaming) you would run something like this:
Gus Grubba's avatar
Gus Grubba committed
13 14

```
Don Gagne's avatar
Don Gagne committed
15
gst-launch-1.0 uvch264src initial-bitrate=1000000 average-bitrate=1000000 iframe-period=1000 device=/dev/video0 name=src auto-start=true src.vidsrc ! video/x-h264,width=1920,height=1080,framerate=24/1 ! h264parse ! rtph264pay ! udpsink host=xxx.xxx.xxx.xxx port=5600
Gus Grubba's avatar
Gus Grubba committed
16 17 18 19
```

Where xxx.xxx.xxx.xxx is the IP address where QGC is running. You may tweak the bitrate, the resolution and the FPS based on your needs and/or available bandwidth.

20 21
To test using a test source on localhost, you can run this command:
```
Don Gagne's avatar
Don Gagne committed
22
gst-launch-1.0 videotestsrc pattern=ball ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5600
23
```
24 25 26 27
Or this one:
```
gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 ! videoconvert ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5600
```
28

Gus Grubba's avatar
Gus Grubba committed
29 30
On the receiving end, if you want to test it from the command line, you can use something like:
```
Don Gagne's avatar
Don Gagne committed
31
gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! avdec_h264 ! autovideosink fps-update-interval=1000 sync=false
Gus Grubba's avatar
Gus Grubba committed
32 33 34 35 36 37
```

### Linux

Use apt-get to install GStreamer 1.0
```
38 39 40 41
list=$(apt-cache --names-only search ^gstreamer1.0-* | awk '{ print $1 }' | grep -v gstreamer1.0-hybris)
```
```
sudo apt-get install $list
Gus Grubba's avatar
Gus Grubba committed
42
```
43 44 45
```
sudo apt-get install libgstreamer-plugins-base1.0-dev
```
Gus Grubba's avatar
Gus Grubba committed
46 47 48 49 50

The build system is setup to use pkgconfig and it will find the necessary headers and libraries automatically.

### Mac OS

Don Gagne's avatar
Don Gagne committed
51
Download the gstreamer framework from here: http://gstreamer.freedesktop.org/data/pkg/osx. Supported version is 1.5.2. QGC may work with newer version, but it is untested.
Gus Grubba's avatar
Gus Grubba committed
52

Gus Grubba's avatar
Gus Grubba committed
53 54 55 56 57
You need two packages:
- [gstreamer-1.0-devel-1.5.2-x86_64.pkg](http://gstreamer.freedesktop.org/data/pkg/osx/1.5.2/gstreamer-1.0-devel-1.5.2-x86_64.pkg)
- [gstreamer-1.0-1.5.2-x86_64.pkg](http://gstreamer.freedesktop.org/data/pkg/osx/1.5.2/gstreamer-1.0-1.5.2-x86_64.pkg)

The installer places them under /Library/Frameworks/GStreamer.framework, which is where the QGC build system will look for it. That's all that is needed. When you build QGC and it finds the gstreamer framework, it automatically builds video streaming support.
Gus Grubba's avatar
Gus Grubba committed
58 59 60 61 62 63 64 65

:point_right: To run gstreamer commands from the command line, you can add the path to find them (either in ~/.profile or ~/.bashrc):
```
export PATH=$PATH:/Library/Frameworks/GStreamer.framework/Commands
```

### iOS

Gus Grubba's avatar
Gus Grubba committed
66 67 68
Download the gstreamer framework from here: http://gstreamer.freedesktop.org/data/pkg/ios

The installer places them under ~/Library/Developer/GStreamer/iPhone.sdk/GStreamer.framework, which is where the QGC build system will look for it. That's all that is needed. When you build QGC and it finds the gstreamer framework, it automatically builds video streaming support.
Gus Grubba's avatar
Gus Grubba committed
69 70 71

### Android

72
Binaries found in http://gstreamer.freedesktop.org/data/pkg/android
Gus Grubba's avatar
Gus Grubba committed
73
Download the [gstreamer-1.0-android-armv7-1.5.2.tar.bz2](http://gstreamer.freedesktop.org/data/pkg/android/1.5.2/gstreamer-1.0-android-armv7-1.5.2.tar.bz2) archive (assuming you want the ARM V7 platform. For x86, replace `armv7` with `x86` accordingly). 
74 75

Create a directory named "gstreamer-1.0-android-armv7-1.5.2" under the root qgroundcontrol directory (the same directory qgroundcontrol.pro is located). Extract the gstreamer tar file under this directory. That's where the build system will look for it. Make sure your archive tool doesn't create any additional top level directories. The structure after extracting the archive should look like this:
Gus Grubba's avatar
Gus Grubba committed
76
```
77 78 79 80 81 82
qgroundcontrol
├── gstreamer-1.0-android-armv7-1.5.2
│   ├── etc
│   ├── include
│   ├── lib
│   └── share
Gus Grubba's avatar
Gus Grubba committed
83
```
Gus Grubba's avatar
Gus Grubba committed
84 85
### Windows

Don Gagne's avatar
Don Gagne committed
86 87 88 89 90
Download the gstreamer framework from here: http://gstreamer.freedesktop.org/data/pkg/windows. Supported version is 1.5.2. QGC may work with newer version, but it is untested.

You need two packages:
- [gstreamer-1.0-devel-x86-1.5.2.msi](https://gstreamer.freedesktop.org/data/pkg/windows/1.5.2/gstreamer-1.0-devel-x86-1.5.2.msi)
- [gstreamer-1.0-x86-1.5.2.msi](https://gstreamer.freedesktop.org/data/pkg/windows/1.5.2/gstreamer-1.0-x86-1.5.2.msi)
91

92
Make sure you select "Complete" installation instead of "Typical" installation during the install process. The installer places them under c:\gstreamer, which is where the QGC build system will look for it.