# Mavlink Camera Manager
[![Build status](https://github.com/patrickelectric/mavlink-camera-manager/workflows/Rust/badge.svg)](https://github.com/patrickelectric/mavlink-camera-manager/actions)
[![Cargo download](https://img.shields.io/crates/d/mavlink-camera-manager)](https://crates.io/crates/mavlink-camera-manager)
[![Crate info](https://img.shields.io/crates/v/mavlink-camera-manager.svg)](https://crates.io/crates/mavlink-camera-manager)
[![Documentation](https://docs.rs/mavlink-camera-manager/badge.svg)](https://docs.rs/mavlink-camera-manager)

The Mavlink Camera Manager is an extensible cross-platform camera server.

It provides a RTSP service for sharing video stream and a MAVLink camera protocol compatible API to configure ground control stations (E.g: QGroundControl).

# How to test it

## Get video via player
You can get the video via VLC or any other media player that can receive video via rtsp

### Guide:
1. Start `mavlink-camera-manager` via `cargo run` or calling the binary directly.
2. Open player and set the rtsp string that the command line provides
3. Done

## Get video via Ground Control Stations
The video should automatically popup if you are using any modern GCS, like QGroundControl, that has support for MAVLink camera messages.

### Guide:
1. Start `mavlink-camera-manager` via `cargo run` or calling the binary directly.
2. Start `mavproxy` or `sim_vehicle` with `--out=udpbcast:0.0.0.0:14550`
   - By default mavlink-camera-manager uses 14550 to perform the mavlink connection
3. Open your Ground Control Station
4. Done

# Use your own pipeline
You can use your own pipeline via `--pipeline-rtsp` parameter, some examples:
- `'videotestsrc ! video/x-raw,width=640,height=480 ! videoconvert ! x264enc ! rtph264pay name=pay0'`
- `'rtspsrc location="rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov" latency=100 ! rtph264depay ! rtph264pay name=pay0'`
- `'v4l2src device=/dev/video0 ! video/x-h264,width=1920,height=1080,type=video ! rtph264pay name=pay0'`

> Note that some GCS only supports video encoded with H264

# How to build it
Remember to install:
- libgstreamer1.0-dev
- libgstreamer-plugins-base1.0-dev
- libgstrtspserver-1.0-dev

If the compilation is failing to find one of this packages, make sure that they are visible for `pkg-config`, may be necessary to set **PKG_CONFIG_PATH** environment variable.

Example:
- export `PKG_CONFIG_PATH=/usr/local/Cellar/gst-plugins-base/1.16.2/lib/pkgconfig/`

After having installed all dependencies, you'll be able to build via cargo after cloning.
- `cargo build`

If `cargo` is not available, install and configure [rustup](https://rustup.rs/).
