diff --git a/api/openapi.yaml b/api/openapi.yaml
index db48d9ce..2a7fddaa 100644
--- a/api/openapi.yaml
+++ b/api/openapi.yaml
@@ -252,10 +252,10 @@ components:
# RTMP server
rtmp:
type: boolean
- rtmpAddress:
- type: string
rtmpEncryption:
type: string
+ rtmpAddress:
+ type: string
rtmpsAddress:
type: string
rtmpServerKey:
diff --git a/docs/1-kickoff/2-install.md b/docs/1-kickoff/2-install.md
index b13618ba..97bc0dcf 100644
--- a/docs/1-kickoff/2-install.md
+++ b/docs/1-kickoff/2-install.md
@@ -1,6 +1,6 @@
# Install
-There are several installation methods available: standalone binary, Docker image, Arch Linux package, FreeBSD Ports Collection or package and OpenWrt binary.
+There are several installation methods available: standalone binary, Docker image, Arch Linux package, FreeBSD or OpenWrt binary.
## Standalone binary
@@ -31,7 +31,7 @@ bluenviron/mediamtx:1
Fill the `MTX_WEBRTCADDITIONALHOSTS` environment variable with the IP that will be used to connect to the server.
-The `MTX_RTSPTRANSPORTS=tcp` environment variable is meant to disable the RTSP UDP transport protocol. If you want to use it, you also need `--network=host` (which is not compatible with Windows, macOS and Kubernetes):
+The `MTX_RTSPTRANSPORTS=tcp` environment variable is meant to disable the UDP transport protocol of the RTSP server (which require the real IP address and port of incoming UDP packets, that are sometimes replaced by the Docker network stack). If you want to use it, you need to bypass the Docker network stack through the `--network=host` flag (which is not compatible with Windows, macOS and Kubernetes):
```sh
docker run --rm -it --network=host bluenviron/mediamtx:1
@@ -48,6 +48,25 @@ There are four image variants:
The `1` tag corresponds to the latest `1.x.x` release, that should guarantee backward compatibility when upgrading. It is also possible to bind the image to a specific release, by using the release name as tag (`bluenviron/mediamtx:{docker_version_tag}`).
+The base image does not contain any utility, in order to minimize size and frequency of updates. If you need additional software (like curl, wget, GStreamer), you can build a custom image by using the _MediaMTX_ image as a base stage, by creating a file name `Dockerfile` with this content:
+
+```
+FROM bluenviron/mediamtx:1 AS mediamtx
+FROM ubuntu:24.04
+
+COPY --from=mediamtx /mediamtx /
+COPY --from=mediamtx.yml /
+
+RUN apt update && apt install -y \
+ (insert here additional utilities)
+```
+
+And then build it:
+
+```
+docker build . -t my-mediamtx
+```
+
## Arch Linux package
If you are running the Arch Linux distribution, launch:
diff --git a/docs/1-kickoff/3-upgrade.md b/docs/1-kickoff/3-upgrade.md
index 73eeaa66..c7049e7d 100644
--- a/docs/1-kickoff/3-upgrade.md
+++ b/docs/1-kickoff/3-upgrade.md
@@ -14,13 +14,21 @@ This will replace the _MediaMTX_ executable with its latest version. Privileges
## Docker image
-If you used the `1` tag or the `latest` tag, remove the image from cache and re-download it:
+Stop and remove the container:
+
+```sh
+docker stop id-of-mediamtx-container
+docker rm id-of-mediamtx-container
+```
+
+Remove the _MediaMTX_ image from cache:
```sh
docker rm bluenviron/mediamtx:1
-docker restart id-of-mediamtx-container
```
+Then recreate the container as described in [Install](install#docker-image).
+
## Arch Linux package
Repeat the installation procedure.
diff --git a/docs/2-usage/02-publish.md b/docs/2-usage/02-publish.md
index e521ccb2..c63edf9f 100644
--- a/docs/2-usage/02-publish.md
+++ b/docs/2-usage/02-publish.md
@@ -4,19 +4,19 @@
Live streams can be published to the server with the following protocols and codecs:
-| protocol | variants | video codecs | audio codecs |
-| ----------------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
-| [SRT clients](#srt-clients) | | H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3 |
-| [SRT cameras and servers](#srt-cameras-and-servers) | | H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3 |
-| [WebRTC clients](#webrtc-clients) | WHIP | AV1, VP9, VP8, H265, H264 | Opus, G722, G711 (PCMA, PCMU) |
-| [WebRTC servers](#webrtc-servers) | WHEP | AV1, VP9, VP8, H265, H264 | Opus, G722, G711 (PCMA, PCMU) |
-| [RTSP clients](#rtsp-clients) | UDP, TCP, RTSPS | AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG and any RTP-compatible codec | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM and any RTP-compatible codec |
-| [RTSP cameras and servers](#rtsp-cameras-and-servers) | UDP, UDP-Multicast, TCP, RTSPS | AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG and any RTP-compatible codec | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM and any RTP-compatible codec |
-| [RTMP clients](#rtmp-clients) | RTMP, RTMPS, Enhanced RTMP | AV1, VP9, H265, H264 | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
-| [RTMP cameras and servers](#rtmp-cameras-and-servers) | RTMP, RTMPS, Enhanced RTMP | AV1, VP9, H265, H264 | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
-| [HLS cameras and servers](#hls-cameras-and-servers) | Low-Latency HLS, MP4-based HLS, legacy HLS | AV1, VP9, H265, H264 | Opus, MPEG-4 Audio (AAC) |
-| [MPEG-TS](#mpeg-ts) | MPEG-TS over UDP, MPEG-TS over Unix socket | H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3 |
-| [RTP](#rtp) | RTP over UDP, RTP over Unix socket | AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG and any RTP-compatible codec | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM and any RTP-compatible codec |
+| protocol | variants | codecs |
+| ----------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [SRT clients](#srt-clients) | | **Video**: H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3
**Other**: KLV |
+| [SRT cameras and servers](#srt-cameras-and-servers) | | **Video**: H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3
**Other**: KLV |
+| [WebRTC clients](#webrtc-clients) | WHIP | **Video**: AV1, VP9, VP8, H265, H264
**Audio**: Opus, G722, G711 (PCMA, PCMU) |
+| [WebRTC servers](#webrtc-servers) | WHEP | **Video**: AV1, VP9, VP8, H265, H264
**Audio**: Opus, G722, G711 (PCMA, PCMU) |
+| [RTSP clients](#rtsp-clients) | UDP, TCP, RTSPS | **Video**: AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, MJPEG
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM
**Other**: KLV, MPEG-TS, any RTP-compatible codec |
+| [RTSP cameras and servers](#rtsp-cameras-and-servers) | UDP, UDP-Multicast, TCP, RTSPS | **Video**: AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, MJPEG
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM
**Other**: KLV, MPEG-TS, any RTP-compatible codec |
+| [RTMP clients](#rtmp-clients) | RTMP, RTMPS, Enhanced RTMP | **Video**: AV1, VP9, H265, H264
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
+| [RTMP cameras and servers](#rtmp-cameras-and-servers) | RTMP, RTMPS, Enhanced RTMP | **Video**: AV1, VP9, H265, H264
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
+| [HLS cameras and servers](#hls-cameras-and-servers) | Low-Latency HLS, MP4-based HLS, legacy HLS | **Video**: AV1, VP9, H265, H264
**Audio**: Opus, MPEG-4 Audio (AAC) |
+| [MPEG-TS](#mpeg-ts) | MPEG-TS over UDP, MPEG-TS over Unix socket | **Video**: H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3
**Other**: KLV |
+| [RTP](#rtp) | RTP over UDP, RTP over Unix socket | **Video**: AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM
**Other**: KLV, MPEG-TS, any RTP-compatible codec |
We provide instructions for publishing with the following devices:
@@ -42,7 +42,7 @@ SRT is a protocol that allows to publish and read live data stream, providing en
srt://localhost:8890?streamid=publish:mystream&pkt_size=1316
```
-Replace `mystream` with any name you want. The resulting stream is available in path `/mystream`.
+Replace `mystream` with any name you want. The resulting stream will be available on path `/mystream`.
If you need to use the standard stream ID syntax instead of the custom one in use by this server, see [Standard stream ID syntax](srt-specific-features#standard-stream-id-syntax).
@@ -69,7 +69,7 @@ WebRTC is an API that makes use of a set of protocols and methods to connect two
http://localhost:8889/mystream/publish
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
WHIP is a WebRTC extensions that allows to publish streams by using a URL, without passing through a web page. This allows to use WebRTC as a general purpose streaming protocol. If you are using a software that supports WHIP (for instance, latest versions of OBS Studio), you can publish a stream to the server by using this URL:
@@ -110,7 +110,7 @@ RTSP is a protocol that allows to publish and read streams. It supports several
rtsp://localhost:8554/mystream
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
Some clients that can publish with RTSP are [FFmpeg](#ffmpeg), [GStreamer](#gstreamer), [OBS Studio](#obs-studio), [OpenCV](#opencv).
@@ -125,7 +125,7 @@ paths:
source: rtsp://original-url
```
-The resulting stream is available in path `/proxied`.
+The resulting stream will be available on path `/proxied`.
It is possible to tune the connection by using some additional parameters:
@@ -168,7 +168,7 @@ RTMP is a protocol that allows to read and publish streams. It supports encrypti
rtmp://localhost/mystream
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
Some clients that can publish with RTMP are [FFmpeg](#ffmpeg), [GStreamer](#gstreamer), [OBS Studio](#obs-studio).
@@ -183,7 +183,7 @@ paths:
source: rtmp://original-url
```
-The resulting stream is available in path `/proxied`.
+The resulting stream will be available on path `/proxied`.
### HLS cameras and servers
@@ -196,7 +196,7 @@ paths:
source: http://original-url/stream/index.m3u8
```
-The resulting stream is available in path `/proxied`.
+The resulting stream will be available on path `/proxied`.
### MPEG-TS
@@ -284,46 +284,47 @@ paths:
### Raspberry Pi Cameras
-_MediaMTX_ natively supports most of the Raspberry Pi Camera models, enabling high-quality and low-latency video streaming from the camera to any user, for any purpose. There are some additional requirements:
+_MediaMTX_ natively supports most Raspberry Pi Camera models, enabling high-quality and low-latency video streaming from the camera to any user, for any purpose. There are some additional requirements:
1. The server must run on a Raspberry Pi, with one of the following operating systems:
- Raspberry Pi OS Trixie
- Raspberry Pi OS Bookworm
- Raspberry Pi OS Bullseye
- Both 32 bit and 64 bit architectures are supported.
+ Both 32-bit and 64-bit architectures are supported.
2. If you are using Raspberry Pi OS Bullseye, make sure that the legacy camera stack is disabled. Type `sudo raspi-config`, then go to `Interfacing options`, `enable/disable legacy camera support`, choose `no`. Reboot the system.
-If you want to run the standard (non-Docker) version of the server:
+The setup procedure depends on whether you want to run the server outside or inside Docker:
-1. Download the server executable. If you're using 64-bit version of the operative system, make sure to pick the `arm64` variant.
+- If you want to run the standard (non-Dockerized) version of the server:
+ 1. Download the server executable. If you're using 64-bit version of the operative system, make sure to pick the `arm64` variant.
-2. Edit `mediamtx.yml` and replace everything inside section `paths` with the following content:
+ 2. Edit `mediamtx.yml` and replace everything inside section `paths` with the following content:
- ```yml
- paths:
- cam:
- source: rpiCamera
- ```
+ ```yml
+ paths:
+ cam:
+ source: rpiCamera
+ ```
-The resulting stream is available in path `/cam`.
+ The resulting stream will be available on path `/cam`.
+
+- If you want to run the server inside Docker, you need to use the `1-rpi` image and launch the container with some additional flags:
+
+ ```sh
+ docker run --rm -it \
+ --network=host \
+ --privileged \
+ --tmpfs /dev/shm:exec \
+ -v /run/udev:/run/udev:ro \
+ -e MTX_PATHS_CAM_SOURCE=rpiCamera \
+ bluenviron/mediamtx:1-rpi
+ ```
The Raspberry Pi Camera can be controlled through a wide range of parameters, that are listed in the [configuration file](/docs/references/configuration-file).
-If you want to run the server inside Docker, you need to use the `1-rpi` image and launch the container with some additional flags:
-
-```sh
-docker run --rm -it \
---network=host \
---privileged \
---tmpfs /dev/shm:exec \
--v /run/udev:/run/udev:ro \
--e MTX_PATHS_CAM_SOURCE=rpiCamera \
-bluenviron/mediamtx:1-rpi
-```
-
-Be aware that precompiled binaries and Docker images are not compatible with cameras that require a custom `libcamera` (like some ArduCam products), since they come with a bundled `libcamera`. If you want to use a custom one, you can [compile from source](/docs/other/compile#custom-libcamera).
+Be aware that cameras that require a custom `libcamera` (like some ArduCam products) are not compatible with precompiled binaries and Docker images of _MediaMTX_, since these come with a bundled `libcamera`. If you want to use a custom one, you need to [compile from source](/docs/other/compile#custom-libcamera).
#### Adding audio
@@ -366,7 +367,7 @@ paths:
runOnInitRestart: yes
```
-The resulting stream is available in path `/cam_with_audio`.
+The resulting stream will be available on path `/cam_with_audio`.
#### Secondary stream
@@ -401,7 +402,7 @@ paths:
rpiCameraMJPEGQuality: 60
```
-The secondary stream is available in path `/secondary`.
+The secondary stream will be available on path `/secondary`.
### Generic webcams
@@ -429,7 +430,7 @@ Where `USB2.0 HD UVC WebCam` is the name of a webcam, that can be obtained with:
ffmpeg -list_devices true -f dshow -i dummy
```
-The resulting stream is available in path `/cam`.
+The resulting stream will be available on path `/cam`.
## Software
@@ -443,7 +444,7 @@ FFmpeg can publish a stream to the server in several ways. The recommended one c
ffmpeg -re -stream_loop -1 -i file.ts -c copy -f rtsp rtsp://localhost:8554/mystream
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
#### FFmpeg and RTMP
@@ -523,7 +524,7 @@ gst-launch-1.0 filesrc location=file.mp4 ! qtdemux name=d \
d.video_0 ! rtspclientsink location=rtsp://localhost:8554/mystream
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
For advanced options, see [RTSP-specific features](rtsp-specific-features).
@@ -593,7 +594,7 @@ Recent versions of OBS Studio can also publish to the server with the [WebRTC /
Save the configuration and click `Start streaming`.
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
### OpenCV
@@ -668,7 +669,7 @@ while True:
start = now
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
### Unity
@@ -779,7 +780,7 @@ public class WebRTCPublisher : MonoBehaviour
In the _Hierarchy_ window, find or create a scene and a camera, then add the `WebRTCPublisher.cs` script as component of the camera, by dragging it inside the _Inspector_ window. then Press the _Play_ button at the top of the page.
-The resulting stream is available in path `/unity`.
+The resulting stream will be available on path `/unity`.
### Web browsers
@@ -789,7 +790,7 @@ Web browsers can publish a stream to the server by using the [WebRTC protocol](#
http://localhost:8889/mystream/publish
```
-The resulting stream is available in path `/mystream`.
+The resulting stream will be available on path `/mystream`.
This web page can be embedded into another web page by using an iframe:
diff --git a/docs/2-usage/03-read.md b/docs/2-usage/03-read.md
index 5e58fa74..7f203863 100644
--- a/docs/2-usage/03-read.md
+++ b/docs/2-usage/03-read.md
@@ -4,13 +4,13 @@
Live streams can be read from the server with the following protocols and codecs:
-| protocol | variants | video codecs | audio codecs |
-| ----------------- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
-| [SRT](#srt) | | H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3 |
-| [WebRTC](#webrtc) | WHEP | AV1, VP9, VP8, H265, H264 | Opus, G722, G711 (PCMA, PCMU) |
-| [RTSP](#rtsp) | UDP, UDP-Multicast, TCP, RTSPS | AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG and any RTP-compatible codec | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM and any RTP-compatible codec |
-| [RTMP](#rtmp) | RTMP, RTMPS, Enhanced RTMP | AV1, VP9, H265, H264 | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
-| [HLS](#hls) | Low-Latency HLS, MP4-based HLS, legacy HLS | AV1, VP9, H265, H264 | Opus, MPEG-4 Audio (AAC) |
+| protocol | variants | codecs |
+| ----------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [SRT](#srt) | | **Video**: H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3
**Other**: KLV |
+| [WebRTC](#webrtc) | WHEP | **Video**: AV1, VP9, VP8, H265, H264
**Audio**: Opus, G722, G711 (PCMA, PCMU)
**Other**: KLV |
+| [RTSP](#rtsp) | UDP, UDP-Multicast, TCP, RTSPS | **Video**: AV1, VP9, VP8, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G726, G722, G711 (PCMA, PCMU), LPCM
**Other**: KLV, MPEG-TS, any RTP-compatible codec |
+| [RTMP](#rtmp) | RTMP, RTMPS, Enhanced RTMP | **Video**: AV1, VP9, H265, H264
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
+| [HLS](#hls) | Low-Latency HLS, MP4-based HLS, legacy HLS | **Video**: AV1, VP9, H265, H264
**Audio**: Opus, MPEG-4 Audio (AAC) |
We provide instructions for reading with the following software:
diff --git a/docs/2-usage/05-authentication.md b/docs/2-usage/05-authentication.md
index d9d860b8..e971c9fd 100644
--- a/docs/2-usage/05-authentication.md
+++ b/docs/2-usage/05-authentication.md
@@ -24,7 +24,7 @@ authInternalUsers:
pass:
# IPs or networks allowed to use this user. An empty list means any IP.
ips: []
- # List of permissions.
+ # Permissions.
permissions:
# Available actions are: publish, read, playback, api, metrics, pprof.
- action: publish
diff --git a/docs/2-usage/07-record.md b/docs/2-usage/07-record.md
index bbd50977..1c16c086 100644
--- a/docs/2-usage/07-record.md
+++ b/docs/2-usage/07-record.md
@@ -4,10 +4,10 @@
Live streams be recorded and played back with the following file containers and codecs:
-| container | video codecs | audio codecs |
-| --------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
-| fMP4 | AV1, VP9, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
-| MPEG-TS | H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video | Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3 |
+| container | codecs |
+| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| fMP4 | **Video**: AV1, VP9, H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video, M-JPEG
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3, G711 (PCMA, PCMU), LPCM |
+| MPEG-TS | **Video**: H265, H264, MPEG-4 Video (H263, Xvid), MPEG-1/2 Video
**Audio**: Opus, MPEG-4 Audio (AAC), MPEG-1/2 Audio (MP3), AC-3 |
## Usage
diff --git a/docs/2-usage/15-embed-streams-in-a-website.md b/docs/2-usage/15-embed-streams-in-a-website.md
index c8ee2656..b367687d 100644
--- a/docs/2-usage/15-embed-streams-in-a-website.md
+++ b/docs/2-usage/15-embed-streams-in-a-website.md
@@ -63,6 +63,12 @@ After the video tag, add a script that initializes the stream when the page is f
onTrack: (evt) => {
document.getElementById("myvideo").srcObject = evt.streams[0];
},
+ onDataChannel: (evt) => {
+ evt.channel.binaryType = "arraybuffer";
+ evt.channel.onmessage = (evt) => {
+ console.log("data channel message", evt.data);
+ };
+ },
});
});
diff --git a/docs/2-usage/17-logging.md b/docs/2-usage/17-logging.md
index f35b95ff..f39e981e 100644
--- a/docs/2-usage/17-logging.md
+++ b/docs/2-usage/17-logging.md
@@ -48,14 +48,18 @@ journalctl -u mediamtx
Log collectors (like Loki, Logstash, CloudWatch and fluentd) parse logs in a more reliable way if they are fed with entries in structured format (JSONL). This can be enabled with the `logStructured` parameter:
```yml
-# When destination is "stdout" or "file", emit logs in structured format (JSON).
+# When destination is "stdout" or "file", emit logs in structured format (JSONL).
logStructured: true
```
Obtaining:
```
-{"timestamp":"2003-05-01T20:34:14+01:00","level":"INF","message":"[RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)"}
+{"timestamp":"20XX-YY-ZZT10:45:05+01:00","level":"INF","message":"[RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)"}
+{"timestamp":"20XX-YY-ZZT10:45:05+01:00","level":"INF","message":"[RTMP] listener opened on :1935"}
+{"timestamp":"20XX-YY-ZZT10:45:05+01:00","level":"INF","message":"[HLS] listener opened on :8888"}
+{"timestamp":"20XX-YY-ZZT10:45:05+01:00","level":"INF","message":"[WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)"}
+{"timestamp":"20XX-YY-ZZT10:45:05+01:00","level":"INF","message":"[SRT] listener opened on :8890 (UDP)"}
```
## Log file rotation
diff --git a/docs/2-usage/20-metrics.md b/docs/2-usage/20-metrics.md
index 92dcd493..00bf5e00 100644
--- a/docs/2-usage/20-metrics.md
+++ b/docs/2-usage/20-metrics.md
@@ -135,6 +135,8 @@ webrtc_sessions_rtcp_packets_received{id="[id]",path="[path]",remoteAddr="[remot
webrtc_sessions_rtcp_packets_sent{id="[id]",path="[path]",remoteAddr="[remoteAddr]",state="[state]"} 123
```
+Bitrates are not provided directly as metrics because they can be computed from received and sent bytes by any metrics analyzer (i.e. Grafana).
+
Metrics can be filtered by using HTTP query parameters:
- `type=[TYPE]`: show metrics of a certain type only (where TYPE can be `paths`, `hls_muxers`, `rtsp_conns`, `rtsp_sessions`, `rtsps_conns`, `rtsps_sessions`, `rtmp_conns`, `rtmps_conns`, `srt_conns`, `webrtc_sessions`)
diff --git a/docs/2-usage/23-webrtc-specific-features.md b/docs/2-usage/23-webrtc-specific-features.md
index f0d7c044..9854d3f2 100644
--- a/docs/2-usage/23-webrtc-specific-features.md
+++ b/docs/2-usage/23-webrtc-specific-features.md
@@ -8,7 +8,7 @@ The server can ingest and broadcast with WebRTC a wide variety of video and audi
In particular, reading and publishing H265 tracks with WebRTC was not possible until some time ago due to lack of browser support. The situation improved recently and can be described as following:
-- Safari on iOS and macOS fully supports publishing and reading H265 tracks
+- Safari on iOS and macOS fully support publishing and reading H265 tracks
- Chrome on Windows supports publishing and reading H265 tracks when a GPU is present and when the browser is launched with the following flags:
```
diff --git a/docs/2-usage/24-rtsp-specific-features.md b/docs/2-usage/24-rtsp-specific-features.md
index 49d198b3..4e7f4002 100644
--- a/docs/2-usage/24-rtsp-specific-features.md
+++ b/docs/2-usage/24-rtsp-specific-features.md
@@ -4,9 +4,9 @@ RTSP is a protocol that can be used for publishing and reading streams. Regardin
## Transport protocols
-The RTSP protocol supports several underlying transport protocols, that are chosen by clients during the handshake with the server:
+A RTSP session is splitted in two parts: the handshake, which is always performed with the TCP protocol, and data streaming, which can be performed with an arbitrary underlying transport protocol, which is chosen by the client during the handshake:
-- UDP: the most performant, but doesn't work when there's a NAT/firewall between server and clients.
+- UDP: the most performant, but require clients to access two additional UDP ports on the server, which is often impossible due to blocking or remapping by NATs/firewalls in between.
- UDP-multicast: allows to save bandwidth when clients are all in the same LAN, by sending packets once to a fixed multicast IP.
- TCP: the most versatile.
@@ -51,7 +51,7 @@ vlc --network-caching=50 rtsp://localhost:8554/mystream?vlcmulticast
## Encryption
-Incoming and outgoing RTSP streams can be encrypted by using a secure protocol variant, called RTSPS, that replaces all the subprotocols that are normally used in RTSP with their secure variant (TLS, SRTP, SRTCP). A TLS certificate is needed and can be generated with OpenSSL:
+Incoming and outgoing RTSP streams can be encrypted by replacing all the subprotocols that are normally used in RTSP with their secure variants (RTSPS, SRTP, SRTCP). A TLS certificate is needed and can be generated with OpenSSL:
```sh
openssl genrsa -out server.key 2048
diff --git a/docs/2-usage/25-rtmp-specific-features.md b/docs/2-usage/25-rtmp-specific-features.md
index ad2481e7..8005eec3 100644
--- a/docs/2-usage/25-rtmp-specific-features.md
+++ b/docs/2-usage/25-rtmp-specific-features.md
@@ -4,7 +4,7 @@ RTMP is a protocol that can be used for publishing and reading streams. Regardin
## Encryption
-RTMP connections can be encrypted with TLS, obtaining the RTMPS protocol. A TLS certificate is needed and can be generated with OpenSSL:
+RTMP connections can be encrypted by using the secure protocol variant (RTMPS). A TLS certificate is needed and can be generated with OpenSSL:
```yml
openssl genrsa -out server.key 2048
diff --git a/docs/2-usage/26-decrease-packet-loss.md b/docs/2-usage/26-decrease-packet-loss.md
index 313ace30..5bd0bbd5 100644
--- a/docs/2-usage/26-decrease-packet-loss.md
+++ b/docs/2-usage/26-decrease-packet-loss.md
@@ -9,7 +9,7 @@ Packet losses are usually detected and printed in _MediaMTX_ logs.
If you need to improve the stream reliability and decrease packet losses, the first thing to do is to check whether the physical network between the _MediaMTX_ instance and the intended publishers and readers has sufficient bandwidth for transmitting the media stream. Most of the times, packet losses are caused by a network which is not fit for this scope. This limitation can be overcome by either recompressing the stream with a lower bitrate, or by upgrading the network infrastructure (routers, cables, Wi-Fi, firewalls, topology, etc).
-There are however some parameters that can be tuned to improve the situation, at cost of increasing RAM consumption:
+Nonetheless there are some parameters that can be tuned to improve the situation, at cost of increasing RAM consumption:
- When publishing a stream with a UDP-based protocol (currently RTSP, MPEG-TS, RTP, SRT, WebRTC), packets might get discarded by the server because the read buffer size of UDP sockets is too small. It can be increased with this parameter:
diff --git a/docs/4-other/1-compile.md b/docs/4-other/1-compile.md
index d874d5a8..f7675f95 100644
--- a/docs/4-other/1-compile.md
+++ b/docs/4-other/1-compile.md
@@ -1,98 +1,90 @@
# Compile from source
-## Standard method
+## Standard procedure
-Install git and Go ≥ 1.25. Clone the repository, enter into the folder and start the building process:
+1. Install git and Go ≥ 1.25.
-```sh
-git clone https://github.com/bluenviron/mediamtx
-cd mediamtx
-go generate ./...
-CGO_ENABLED=0 go build .
-```
+2. Clone the repository, enter into the folder and start the building process:
-The command will produce the `mediamtx` binary.
+ ```sh
+ git clone https://github.com/bluenviron/mediamtx
+ cd mediamtx
+ go generate ./...
+ CGO_ENABLED=0 go build .
+ ```
-## OpenWrt
-
-The compilation procedure is the same as the standard one. On the OpenWrt device, install git and Go:
-
-```sh
-opkg update
-opkg install golang git git-http
-```
-
-Clone the repository, enter into the folder and start the building process:
-
-```sh
-git clone https://github.com/bluenviron/mediamtx
-cd mediamtx
-go generate ./...
-CGO_ENABLED=0 go build .
-```
-
-The command will produce the `mediamtx` binary.
-
-If the OpenWrt device doesn't have enough resources to compile, you can [cross compile](#cross-compile) from another machine.
+ This will produce the `mediamtx` binary.
## Custom libcamera
-If you need to use a custom or external libcamera when interacting with the Raspberry Pi Camera, some additional steps are needed:
+If you need to use a custom or external libcamera to interact with some Raspberry Pi Camera model that requires it, additional steps are required:
1. Download [mediamtx-rpicamera source code](https://github.com/bluenviron/mediamtx-rpicamera) and compile it against the external libcamera. Instructions are in the repository.
-2. Download [MediaMTX source code](https://github.com/bluenviron/mediamtx) and run:
+2. Install git and Go ≥ 1.25.
+
+3. Clone the _MediaMTX_ repository:
+
+ ```sh
+ git clone https://github.com/bluenviron/mediamtx
+ ```
+
+4. Inside the _MediaMTX_ folder, run:
```sh
go generate ./...
```
-3. Copy `build/mtxrpicam_32` and/or `build/mtxrpicam_64` (depending on the architecture) from `mediamtx-rpicamera` to `mediamtx`, inside folder `internal/staticsources/rpicamera/`, overriding existing folders.
+5. Copy `build/mtxrpicam_32` and/or `build/mtxrpicam_64` (depending on the architecture) from `mediamtx-rpicamera` to `mediamtx`, inside folder `internal/staticsources/rpicamera/`, overriding existing folders.
-4. Compile:
+6. Compile:
```sh
go run .
```
+ This will produce the `mediamtx` binary.
+
## Cross compile
Cross compilation allows to build an executable for a target machine from another machine with different operating system or architecture. This is useful in case the target machine doesn't have enough resources for compilation or if you don't want to install the compilation dependencies on it.
-On the machine you want to use to compile, install git and Go ≥ 1.25. Clone the repository, enter into the folder and start the building process:
+1. On the machine you want to use to compile, install git and Go ≥ 1.25.
-```sh
-git clone https://github.com/bluenviron/mediamtx
-cd mediamtx
-go generate ./...
-CGO_ENABLED=0 GOOS=my_os GOARCH=my_arch go build .
-```
+2. Clone the repository, enter into the folder and start the building process:
-Replace `my_os` and `my_arch` with the operating system and architecture of your target machine. A list of all supported combinations can be obtained with:
+ ```sh
+ git clone https://github.com/bluenviron/mediamtx
+ cd mediamtx
+ go generate ./...
+ CGO_ENABLED=0 GOOS=my_os GOARCH=my_arch go build .
+ ```
-```sh
-go tool dist list
-```
+ Replace `my_os` and `my_arch` with the operating system and architecture of your target machine. A list of all supported combinations can be obtained with:
-For instance:
+ ```sh
+ go tool dist list
+ ```
-```sh
-CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build .
-```
+ For instance:
-In case of the `arm` architecture, there's an additional flag available, `GOARM`, that allows to set the ARM version:
+ ```sh
+ CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build .
+ ```
-```sh
-CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=7 go build .
-```
+ In case of the `arm` architecture, there's an additional flag available, `GOARM`, that allows to set the ARM version:
-In case of the `mips` architecture, there's an additional flag available, `GOMIPS`, that allows to set additional parameters:
+ ```sh
+ CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=7 go build .
+ ```
-```sh
-CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build .
-```
+ In case of the `mips` architecture, there's an additional flag available, `GOMIPS`, that allows to set additional parameters:
-The command will produce the `mediamtx` binary.
+ ```sh
+ CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build .
+ ```
+
+ The command will produce the `mediamtx` binary.
## Compile for all supported platforms
@@ -120,4 +112,6 @@ The official Docker image can be recompiled by following these steps:
docker build . -f docker/standard.Dockerfile -t my-mediamtx
```
+ This will produce the `my-mediamtx` image.
+
A Dockerfile is available for each image variant (`standard.Dockerfile`, `ffmpeg.Dockerfile`, `rpi.Dockerfile`, `ffmpeg-rpi.Dockerfile`).
diff --git a/internal/conf/conf.go b/internal/conf/conf.go
index 78a9690a..8dbe1007 100644
--- a/internal/conf/conf.go
+++ b/internal/conf/conf.go
@@ -338,8 +338,8 @@ type Conf struct {
// RTMP server
RTMP bool `json:"rtmp"`
RTMPDisable *bool `json:"rtmpDisable,omitempty"` // deprecated
- RTMPAddress string `json:"rtmpAddress"`
RTMPEncryption Encryption `json:"rtmpEncryption"`
+ RTMPAddress string `json:"rtmpAddress"`
RTMPSAddress string `json:"rtmpsAddress"`
RTMPServerKey string `json:"rtmpServerKey"`
RTMPServerCert string `json:"rtmpServerCert"`
diff --git a/internal/core/core.go b/internal/core/core.go
index 9f70b224..fa24d883 100644
--- a/internal/core/core.go
+++ b/internal/core/core.go
@@ -160,8 +160,8 @@ func New(args []string) (*Core, bool) {
}
if cli.Upgrade {
- err = upgrade()
- if err != nil {
+ err = upgrade() //nolint:staticcheck
+ if err != nil { //nolint:staticcheck
fmt.Printf("ERR: %v\n", err)
os.Exit(1)
}
diff --git a/mediamtx.yml b/mediamtx.yml
index b0124081..1724a779 100644
--- a/mediamtx.yml
+++ b/mediamtx.yml
@@ -10,7 +10,7 @@
logLevel: info
# Destinations of log messages; available values are "stdout", "file" and "syslog".
logDestinations: [stdout]
-# When destination is "stdout" or "file", emit logs in structured format (JSON).
+# When destination is "stdout" or "file", emit logs in structured format (JSONL).
logStructured: no
# When "file" is in logDestinations, this is the file which will receive logs.
logFile: mediamtx.log
@@ -55,7 +55,7 @@ runOnDisconnect:
authMethod: internal
# Internal authentication.
-# list of users.
+# Enabled users.
authInternalUsers:
# Default unprivileged user.
# Username. 'any' means any user, including anonymous ones.
@@ -64,7 +64,7 @@ authInternalUsers:
pass:
# IPs or networks allowed to use this user. An empty list means any IP.
ips: []
- # List of permissions.
+ # Permissions.
permissions:
# Available actions are: publish, read, playback, api, metrics, pprof.
- action: publish
@@ -151,7 +151,7 @@ authJWTInHTTPQuery: true
api: no
# Address of the Control API listener.
apiAddress: :9997
-# Enable TLS/HTTPS on the Control API server.
+# Enable HTTPS on the Control API server.
apiEncryption: no
# Path to the server key. This is needed only when encryption is yes.
# This can be generated with:
@@ -160,10 +160,10 @@ apiEncryption: no
apiServerKey: server.key
# Path to the server certificate.
apiServerCert: server.crt
-# List of allowed CORS origins.
+# Allowed CORS origins.
# Supports wildcards: ['http://*.example.com']
apiAllowOrigins: ['*']
-# List of IPs or CIDRs of proxies placed before the HTTP server.
+# IPs or CIDRs of proxies placed before the HTTP server.
# If the server receives a request from one of these entries, IP in logs
# will be taken from the X-Forwarded-For header.
apiTrustedProxies: []
@@ -175,7 +175,7 @@ apiTrustedProxies: []
metrics: no
# Address of the metrics HTTP listener.
metricsAddress: :9998
-# Enable TLS/HTTPS on the Metrics server.
+# Enable HTTPS on the Metrics server.
metricsEncryption: no
# Path to the server key. This is needed only when encryption is yes.
# This can be generated with:
@@ -184,10 +184,10 @@ metricsEncryption: no
metricsServerKey: server.key
# Path to the server certificate.
metricsServerCert: server.crt
-# List of allowed CORS origins.
+# Allowed CORS origins.
# Supports wildcards: ['http://*.example.com']
metricsAllowOrigins: ['*']
-# List of IPs or CIDRs of proxies placed before the HTTP server.
+# IPs or CIDRs of proxies placed before the HTTP server.
# If the server receives a request from one of these entries, IP in logs
# will be taken from the X-Forwarded-For header.
metricsTrustedProxies: []
@@ -199,7 +199,7 @@ metricsTrustedProxies: []
pprof: no
# Address of the pprof listener.
pprofAddress: :9999
-# Enable TLS/HTTPS on the pprof server.
+# Enable HTTPS on the pprof server.
pprofEncryption: no
# Path to the server key. This is needed only when encryption is yes.
# This can be generated with:
@@ -208,10 +208,10 @@ pprofEncryption: no
pprofServerKey: server.key
# Path to the server certificate.
pprofServerCert: server.crt
-# List of allowed CORS origins.
+# Allowed CORS origins.
# Supports wildcards: ['http://*.example.com']
pprofAllowOrigins: ['*']
-# List of IPs or CIDRs of proxies placed before the HTTP server.
+# IPs or CIDRs of proxies placed before the HTTP server.
# If the server receives a request from one of these entries, IP in logs
# will be taken from the X-Forwarded-For header.
pprofTrustedProxies: []
@@ -223,7 +223,7 @@ pprofTrustedProxies: []
playback: no
# Address of the playback server listener.
playbackAddress: :9996
-# Enable TLS/HTTPS on the playback server.
+# Enable HTTPS on the playback server.
playbackEncryption: no
# Path to the server key. This is needed only when encryption is yes.
# This can be generated with:
@@ -232,10 +232,10 @@ playbackEncryption: no
playbackServerKey: server.key
# Path to the server certificate.
playbackServerCert: server.crt
-# List of allowed CORS origins.
+# Allowed CORS origins.
# Supports wildcards: ['http://*.example.com']
playbackAllowOrigins: ['*']
-# List of IPs or CIDRs of proxies placed before the HTTP server.
+# IPs or CIDRs of proxies placed before the HTTP server.
# If the server receives a request from one of these entries, IP in logs
# will be taken from the X-Forwarded-For header.
playbackTrustedProxies: []
@@ -245,37 +245,32 @@ playbackTrustedProxies: []
# Enable publishing and reading streams with the RTSP protocol.
rtsp: yes
-# List of enabled RTSP transport protocols.
-# UDP is the most performant, but doesn't work when there's a NAT/firewall between
-# server and clients.
-# UDP-multicast allows to save bandwidth when clients are all in the same LAN.
-# TCP is the most versatile.
-# The handshake is always performed with TCP.
+# Enabled RTSP transport protocols. The handshake is always performed with TCP.
rtspTransports: [udp, multicast, tcp]
-# Use secure protocol variants (RTSPS, TLS, SRTP).
+# Use secure protocol variants (RTSPS, SRTP, SRTCP).
# Available values are "no", "strict", "optional".
rtspEncryption: "no"
# Address of the TCP/RTSP listener. This is needed only when encryption is "no" or "optional".
rtspAddress: :8554
-# Address of the TCP/TLS/RTSPS listener. This is needed only when encryption is "strict" or "optional".
+# Address of the TCP/RTSPS listener. This is needed only when encryption is "strict" or "optional".
rtspsAddress: :8322
-# Address of the UDP/RTP listener. This is needed only when "udp" is in rtspTransports.
+# Address of the UDP/RTP listener. This is needed only when "udp" is in rtspTransports and encryption is "no" or "optional".
rtpAddress: :8000
-# Address of the UDP/RTCP listener. This is needed only when "udp" is in rtspTransports.
+# Address of the UDP/RTCP listener. This is needed only when "udp" is in rtspTransports and encryption is "no" or "optional".
rtcpAddress: :8001
-# IP range of all UDP-multicast listeners. This is needed only when "multicast" is in rtspTransports.
+# IP range of all UDP-multicast listeners. This is needed only when "multicast" is in rtspTransports and encryption is "no" or "optional".
multicastIPRange: 224.1.0.0/16
-# Port of all UDP-multicast/RTP listeners. This is needed only when "multicast" is in rtspTransports.
+# Port of all UDP-multicast/RTP listeners. This is needed only when "multicast" is in rtspTransports and encryption is "no" or "optional".
multicastRTPPort: 8002
-# Port of all UDP-multicast/RTCP listeners. This is needed only when "multicast" is in rtspTransports.
+# Port of all UDP-multicast/RTCP listeners. This is needed only when "multicast" is in rtspTransports and encryption is "no" or "optional".
multicastRTCPPort: 8003
-# Address of the UDP/SRTP listener. This is needed only when "udp" is in rtspTransports and encryption is enabled.
+# Address of the UDP/SRTP listener. This is needed only when "udp" is in rtspTransports and encryption is "strict" or "optional".
srtpAddress: :8004
-# Address of the UDP/SRTCP listener. This is needed only when "udp" is in rtspTransports and encryption is enabled.
+# Address of the UDP/SRTCP listener. This is needed only when "udp" is in rtspTransports and encryption is "strict" or "optional".
srtcpAddress: :8005
-# Port of all UDP-multicast/SRTP listeners. This is needed only when "multicast" is in rtspTransports and encryption is enabled.
+# Port of all UDP-multicast/SRTP listeners. This is needed only when "multicast" is in rtspTransports and encryption is "strict" or "optional".
multicastSRTPPort: 8006
-# Port of all UDP-multicast/SRTCP listeners. This is needed only when "multicast" is in rtspTransports and encryption is enabled.
+# Port of all UDP-multicast/SRTCP listeners. This is needed only when "multicast" is in rtspTransports and encryption is "strict" or "optional".
multicastSRTCPPort: 8007
# Path to the server key. This is needed only when encryption is "strict" or "optional".
# This can be generated with:
@@ -293,11 +288,11 @@ rtspAuthMethods: [basic]
# Enable publishing and reading streams with the RTMP protocol.
rtmp: yes
-# Address of the RTMP listener. This is needed only when encryption is "no" or "optional".
-rtmpAddress: :1935
-# Encrypt connections with TLS (RTMPS).
+# Use the secure protocol variant (RTMP).
# Available values are "no", "strict", "optional".
rtmpEncryption: "no"
+# Address of the RTMP listener. This is needed only when encryption is "no" or "optional".
+rtmpAddress: :1935
# Address of the RTMPS listener. This is needed only when encryption is "strict" or "optional".
rtmpsAddress: :1936
# Path to the server key. This is needed only when encryption is "strict" or "optional".
@@ -315,7 +310,7 @@ rtmpServerCert: server.crt
hls: yes
# Address of the HLS listener.
hlsAddress: :8888
-# Enable TLS/HTTPS on the HLS server.
+# Enable HTTPS on the HLS server.
# This is required for Low-Latency HLS to function correctly on Apple devices.
hlsEncryption: no
# Path to the server key. This is needed only when encryption is yes.
@@ -325,10 +320,10 @@ hlsEncryption: no
hlsServerKey: server.key
# Path to the server certificate.
hlsServerCert: server.crt
-# List of allowed CORS origins.
+# Allowed CORS origins.
# Supports wildcards: ['http://*.example.com']
hlsAllowOrigins: ['*']
-# List of IPs or CIDRs of proxies placed before the HLS server.
+# IPs or CIDRs of proxies placed before the HLS server.
# If the server receives a request from one of these entries, IP in logs
# will be taken from the X-Forwarded-For header.
hlsTrustedProxies: []
@@ -374,7 +369,7 @@ hlsMuxerCloseAfter: 60s
webrtc: yes
# Address of the WebRTC HTTP listener.
webrtcAddress: :8889
-# Enable TLS/HTTPS on the WebRTC server.
+# Enable HTTPS on the WebRTC server.
webrtcEncryption: no
# Path to the server key.
# This can be generated with:
@@ -383,10 +378,10 @@ webrtcEncryption: no
webrtcServerKey: server.key
# Path to the server certificate.
webrtcServerCert: server.crt
-# List of allowed CORS origins.
+# Allowed CORS origins.
# Supports wildcards: ['http://*.example.com']
webrtcAllowOrigins: ['*']
-# List of IPs or CIDRs of proxies placed before the WebRTC server.
+# IPs or CIDRs of proxies placed before the WebRTC server.
# If the server receives a request from one of these entries, IP in logs
# will be taken from the X-Forwarded-For header.
webrtcTrustedProxies: []
@@ -400,10 +395,10 @@ webrtcLocalTCPAddress: ''
# WebRTC clients need to know the IP of the server.
# Gather IPs from interfaces and send them to clients.
webrtcIPsFromInterfaces: yes
-# List of interfaces whose IPs will be sent to clients.
+# Interfaces whose IPs will be sent to clients.
# An empty value means to use all available interfaces.
webrtcIPsFromInterfacesList: []
-# List of additional hosts or IPs to send to clients.
+# Additional hosts or IPs to send to clients.
webrtcAdditionalHosts: []
# ICE servers. Needed only when local listeners can't be reached by clients.
# STUN servers allows to obtain and share the public IP of the server.