mirror of https://github.com/ArduPilot/ardupilot
106 lines
2.7 KiB
Markdown
106 lines
2.7 KiB
Markdown
|
# AP_Camera examples
|
||
|
|
||
|
|
||
|
## GStreamer examples
|
||
|
|
||
|
The following examples demonstrate how to manipulate GStreamer pipelines to
|
||
|
capture and display video streams from a UDP or RTSP source. They are useful
|
||
|
for providing test images to camera algorithms, or forwarding streams from
|
||
|
simulators such as Gazebo to ground control stations.
|
||
|
|
||
|
For further details see:
|
||
|
|
||
|
- [GStreamer tutorials](https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c)
|
||
|
|
||
|
|
||
|
### Install dependencies
|
||
|
|
||
|
#### Ubuntu
|
||
|
|
||
|
```bash
|
||
|
sudo apt install libopencv-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl gstreamer1.0-tools gstreamer1.0-plugins-ugly libgstrtspserver-1.0-dev
|
||
|
```
|
||
|
|
||
|
#### macOS
|
||
|
|
||
|
```bash
|
||
|
brew install gstreamer opencv
|
||
|
```
|
||
|
|
||
|
### `gst_rtsp_server.py`
|
||
|
|
||
|
The example provides a number of test images as an RTSP stream that may be accessed at:
|
||
|
|
||
|
- rtsp://127.0.0.1:8554/camera
|
||
|
- rtsp://127.0.0.1:8554/ball
|
||
|
- rtsp://127.0.0.1:8554/snow
|
||
|
|
||
|
|
||
|
Start the RTSP server:
|
||
|
|
||
|
```bash
|
||
|
python ./gst_rtsp_server.py
|
||
|
```
|
||
|
|
||
|
Display the RTSP stream:
|
||
|
|
||
|
```bash
|
||
|
gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/camera latency=50 ! decodebin ! autovideosink
|
||
|
```
|
||
|
|
||
|
### `gst_rtsp_to_wx.py`
|
||
|
|
||
|
The example displays an RTSP stream in a wxPython application.
|
||
|
|
||
|
Start the RTSP server:
|
||
|
|
||
|
```bash
|
||
|
python ./gst_rtsp_server.py
|
||
|
```
|
||
|
|
||
|
Display the RTSP stream in wxPython
|
||
|
|
||
|
```bash
|
||
|
python ./gst_rtsp_to_wx.py
|
||
|
```
|
||
|
|
||
|
### `gst_udp_to_rtsp.py`
|
||
|
|
||
|
Convert a UDP stream to RTSP. This example is configured to use the same UDP
|
||
|
pipeline provided by the ArduPilot Gazebo [`GstCameraPlugin`](https://github.com/ArduPilot/ardupilot_gazebo?tab=readme-ov-file#3-streaming-camera-video). By converting the
|
||
|
UDP stream to RTSP is may be consumed by multiple applications
|
||
|
(e.g. a camera tracking algorithm and a GCS).
|
||
|
|
||
|
Create a UDP video stream
|
||
|
|
||
|
```bash
|
||
|
gst-launch-1.0 -v videotestsrc ! 'video/x-raw,format=I420,width=640,height=480,framerate=50/1' ! queue ! videoconvert ! x264enc bitrate=800 speed-preset=6 tune=4 key-int-max=10 ! rtph264pay ! udpsink host=127.0.0.1 port=5600
|
||
|
```
|
||
|
|
||
|
Convert to RTSP:
|
||
|
|
||
|
```bash
|
||
|
python ./gst_udp_to_rtsp.py
|
||
|
```
|
||
|
|
||
|
Display the RTSP stream:
|
||
|
|
||
|
```bash
|
||
|
gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/camera latency=50 ! decodebin ! autovideosink
|
||
|
```
|
||
|
|
||
|
### `gst_udp_to_wx.py`
|
||
|
|
||
|
The example displays a UDP video stream in a wxPython application.
|
||
|
|
||
|
Create a UDP video stream:
|
||
|
|
||
|
```bash
|
||
|
gst-launch-1.0 -v videotestsrc ! 'video/x-raw,format=I420,width=640,height=480,framerate=50/1' ! queue ! videoconvert ! x264enc bitrate=800 speed-preset=6 tune=4 key-int-max=10 ! rtph264pay ! udpsink host=127.0.0.1 port=5600
|
||
|
```
|
||
|
|
||
|
Display the UDP video stream in wxPython:
|
||
|
|
||
|
```bash
|
||
|
python ./gst_udp_to_wx.py
|
||
|
```
|