mediamtx/README.md

105 lines
4.8 KiB
Markdown
Raw Normal View History

2019-12-28 21:07:03 +00:00
2019-12-28 20:08:44 +00:00
# rtsp-simple-server
2019-12-28 21:07:03 +00:00
2019-12-28 21:12:11 +00:00
[![Go Report Card](https://goreportcard.com/badge/github.com/aler9/rtsp-simple-server)](https://goreportcard.com/report/github.com/aler9/rtsp-simple-server)
[![Build Status](https://travis-ci.org/aler9/rtsp-simple-server.svg?branch=master)](https://travis-ci.org/aler9/rtsp-simple-server)
2020-05-03 14:09:48 +00:00
_rtsp-simple-server_ is a simple, ready-to-use and zero-dependency RTSP server, a program that allows multiple users to read or publish live video and audio streams. RTSP is a standardized protocol that defines how to perform these operations with the help of a server, that is contacted by both readers and publishers in order to negotiate a streaming protocol and read or write data. The server is then responsible of linking the publisher stream with the readers.
2019-12-28 21:07:03 +00:00
2020-01-03 20:49:42 +00:00
This software was developed with the aim of simulating a live camera feed for debugging purposes, and therefore to use files instead of real streams. Another reason for the development was the deprecation of _FFserver_, the component of the _FFmpeg_ project that allowed to create a RTSP server (but this server is not bounded to _FFmpeg_ and can be used with any software that supports publishing to RTSP).
2019-12-28 21:07:03 +00:00
2019-12-28 22:46:32 +00:00
Features:
2020-01-01 12:00:54 +00:00
* Read and publish streams via UDP and TCP
* Publish multiple streams at once, each in a separate path, that can be read by multiple users
* Each stream can have multiple video and audio tracks
2019-12-29 08:29:44 +00:00
* Supports the RTP/RTCP streaming protocol
2020-05-08 07:43:08 +00:00
* Supports authentication for publishers
2020-02-16 12:08:54 +00:00
* Run a script when a client connects or disconnects
2020-05-10 22:11:32 +00:00
* Compatible with Linux, Windows and Mac, does not require any dependency or interpreter, it's a single executable
2019-12-28 21:07:03 +00:00
## Installation
Precompiled binaries are available in the [release](https://github.com/aler9/rtsp-simple-server/releases) page. Just download and extract the executable.
## Usage
2020-01-03 21:39:55 +00:00
#### Basic usage
2019-12-28 21:07:03 +00:00
1. Start the server:
```
./rtsp-simple-server
```
2. In another terminal, publish something with FFmpeg (in this example it's a video file, but it can be anything you want):
```
2019-12-31 13:55:46 +00:00
ffmpeg -re -stream_loop -1 -i file.ts -c copy -f rtsp rtsp://localhost:8554/mystream
2019-12-28 21:07:03 +00:00
```
3. Open the stream with VLC:
```
2019-12-31 13:55:46 +00:00
vlc rtsp://localhost:8554/mystream
2019-12-28 21:07:03 +00:00
```
you can alternatively use GStreamer:
```
2019-12-31 13:55:46 +00:00
gst-launch-1.0 -v rtspsrc location=rtsp://localhost:8554/mystream ! rtph264depay ! decodebin ! autovideosink
2019-12-28 21:07:03 +00:00
```
2020-01-03 21:39:55 +00:00
#### Publisher authentication
2019-12-28 21:15:57 +00:00
2020-02-18 12:14:29 +00:00
1. Start the server and set a username and a password:
2020-01-03 21:39:55 +00:00
```
./rtsp-simple-server --publish-user=admin --publish-pass=mypassword
2020-01-03 21:39:55 +00:00
```
2020-02-18 12:14:29 +00:00
2. Only publishers that know both username and password will be able to publish:
2020-01-03 21:39:55 +00:00
```
ffmpeg -re -stream_loop -1 -i file.ts -c copy -f rtsp rtsp://admin:mypassword@localhost:8554/mystream
2020-01-03 21:39:55 +00:00
```
2020-05-18 06:49:50 +00:00
#### Remuxing, re-encoding, compression
2020-05-17 12:51:58 +00:00
2020-05-17 14:58:11 +00:00
`rtsp-simple-server` is an RTSP server: it publishes existing streams and does not touch them. It is not a media server, that is a far more complex software that can receive existing streams, re-encode them and publish them. Therefore, `rtsp-simple-server` alone cannot change the format, codec or compression of a stream.
2020-05-17 12:51:58 +00:00
2020-05-18 06:49:50 +00:00
Nothing forbids from using `ffmpeg` or `gstreamer` together with `rtsp-simple-server`, obtaining the same features of a media server. For instance, if we want to re-encode an existing stream, that is available in the `/original` path, and make the modified stream available in the `/compressed` path, it is enough to launch `ffmpeg` in parallel with `rtsp-simple-server`, with the following syntax:
2020-05-17 12:51:58 +00:00
```
ffmpeg -i rtsp://localhost:8554/original -c:v libx264 -preset ultrafast -tune zerolatency -b 600k -f rtsp rtsp://localhost:8554/compressed
```
2020-01-03 21:39:55 +00:00
#### Full command-line usage
2019-12-28 21:07:03 +00:00
```
usage: rtsp-simple-server [<flags>]
2020-01-03 21:39:55 +00:00
rtsp-simple-server v0.0.0
2019-12-28 21:07:03 +00:00
RTSP server.
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
2020-05-11 07:39:49 +00:00
--version print version
--protocols="udp,tcp" supported protocols
--rtsp-port=8554 port of the RTSP TCP listener
--rtp-port=8000 port of the RTP UDP listener
--rtcp-port=8001 port of the RTCP UDP listener
--read-timeout=5s timeout for read operations
--write-timeout=5s timeout for write operations
--publish-user="" optional username required to publish
--publish-pass="" optional password required to publish
2020-05-10 20:56:46 +00:00
--read-user="" optional username required to read
--read-pass="" optional password required to read
--pre-script="" optional script to run on client connect
--post-script="" optional script to run on client disconnect
2019-12-28 21:07:03 +00:00
```
## Links
2020-01-20 22:04:12 +00:00
Related projects
* https://github.com/aler9/rtsp-simple-proxy
* https://github.com/aler9/gortsplib
2020-02-22 21:52:51 +00:00
* https://github.com/flaviostutz/rtsp-relay
2020-01-20 22:04:12 +00:00
2019-12-28 21:15:57 +00:00
IETF Standard
2020-05-03 14:07:56 +00:00
* (1.0) https://tools.ietf.org/html/rfc2326
* (2.0) https://tools.ietf.org/html/rfc7826