diff --git a/README.md b/README.md index 864d6aa7..e3612578 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Ultimate camera streaming application with support for dozens formats and protoc - [streaming audio](#stream-to-camera) to all cameras with [two-way audio](#two-way-audio) support - mixing tracks from different sources to single stream - [auto-match](www/README.md#javascript-api) client-supported streaming formats and codecs +- [streaming stats](#streaming-stats) for all active connections - can be [integrated to any project](#projects-using-go2rtc) or be used as [standalone app](#go2rtc-binary) #### Inspired by @@ -64,6 +65,7 @@ Ultimate camera streaming application with support for dozens formats and protoc - [Stream to camera](#stream-to-camera) - [Publish stream](#publish-stream) - [Preload stream](#preload-stream) + - [Streaming stats](#streaming-stats) - [Codecs](#codecs) - [Codecs filters](#codecs-filters) - [Codecs madness](#codecs-madness) @@ -82,9 +84,7 @@ Ultimate camera streaming application with support for dozens formats and protoc 2. Open web interface: `http://localhost:1984/` 3. Add [streams](#streaming-input) to [config](#configuration) -**Developers:** - -- integrate [HTTP API](internal/api/README.md) into your smart home platform +**Developers:** integrate [HTTP API](internal/api/README.md) into your smart home platform. ### go2rtc: Binary @@ -141,14 +141,16 @@ Latest, but maybe unstable version: ## Configuration This is the `go2rtc.yaml` file in [YAML-format](https://en.wikipedia.org/wiki/YAML). -The configuration can be changed in the [web interface](www/README.md) at `http://localhost:1984`. +The configuration can be changed in the [WebUI](www/README.md) at `http://localhost:1984`. The editor provides syntax highlighting and checking. +![go2rtc webui config](website/images/webui-config.png) + The simplest config looks like this: ```yaml streams: - hall_camera: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 + hall-camera: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0 ``` - by default go2rtc will search `go2rtc.yaml` in the current work directory @@ -162,6 +164,12 @@ More information can be [found here](internal/app/README.md). A summary table of all modules and features can be found [here](internal/README.md). +**Core modules** + +- [`app`](internal/app/README.md) - Reading [configs](internal/app/README.md) and setting up [logs](internal/app/README.md#log). +- [`api`](internal/api/README.md) - Handle [HTTP](internal/api/README.md) and [WebSocket](internal/api/ws/README.md) API. +- [`streams`](internal/streams/README.md) - Handle a list of streams. + ### Streaming input #### public protocols @@ -298,6 +306,13 @@ You can preload any stream on go2rtc start. This is useful for cameras that take [read more](internal/streams/README.md#preload-stream) +### Streaming stats + +[WebUI](www/README.md) provides detailed information about all active connections, including IP-addresses, formats, protocols, number of packets and bytes transferred. +Via the [HTTP API](internal/api/README.md) in [`json`](https://en.wikipedia.org/wiki/JSON) or [`dot`](https://en.wikipedia.org/wiki/DOT_(graph_description_language)) format on an interactive connection map. + +![go2rtc webui net](website/images/webui-net.png) + ## Codecs If you have questions about why video or audio is not displayed, you need to read the following sections. diff --git a/internal/README.md b/internal/README.md index 17a7e69d..08b078dd 100644 --- a/internal/README.md +++ b/internal/README.md @@ -3,9 +3,9 @@ go2rtc tries to name formats, protocols and codecs the same way they are named in FFmpeg. Some formats and protocols go2rtc supports exclusively. They have no equivalent in FFmpeg. -- The `echo`, `expr`, `hass` and `onvif` modules receive a link to a stream. They don't know the protocol in advance. -- The `exec` and `ffmpeg` modules support many formats. They are identical to the `http` module. -- The `api`, `app`, `debug`, `ngrok`, `pinggy`, `srtp`, `streams` are supporting modules. +- The [`echo`], [`expr`], [`hass`] and [`onvif`] modules receive a link to a stream. They don't know the protocol in advance. +- The [`exec`] and [`ffmpeg`] modules support many formats. They are identical to the [`http`] module. +- The [`api`], [`app`], [`debug`], [`ngrok`], [`pinggy`], [`srtp`], [`streams`] are supporting modules. **Modules** implement communication APIs: authorization, encryption, command set, structure of media packets. @@ -13,55 +13,99 @@ Some formats and protocols go2rtc supports exclusively. They have no equivalent **Protocols** implement transport for data transmission. -| module | formats | protocols | input | output | ingest | two-way | -|--------------|-----------------|------------------|-------|--------|--------|---------| -| `alsa` | `pcm` | `ioctl` | yes | | | | -| `bubble` | - | `http` | yes | | | | -| `doorbird` | `mulaw` | `http` | yes | | | yes | -| `dvrip` | - | `tcp` | yes | | | yes | -| `echo` | * | * | yes | | | | -| `eseecloud` | `rtp` | `http` | yes | | | | -| `exec` | * | `pipe`, `rtsp` | yes | | | yes | -| `expr` | * | * | yes | | | | -| `ffmpeg` | * | `pipe`, `rtsp` | yes | | | | -| `flussonic` | `mp4` | `ws` | yes | | | | -| `gopro` | `mpegts` | `udp` | yes | | | | -| `hass` | * | * | yes | | | | -| `hls` | `mpegts`, `mp4` | `http` | | yes | | | -| `homekit` | `rtp` | `hap` | yes | yes | | no | -| `http` | `adts` | `http`, `tcp` | yes | | | | -| `http` | `flv` | `http`, `tcp` | yes | | | | -| `http` | `h264` | `http`, `tcp` | yes | | | | -| `http` | `hevc` | `http`, `tcp` | yes | | | | -| `http` | `hls` | `http`, `tcp` | yes | | | | -| `http` | `mjpeg` | `http`, `tcp` | yes | | | | -| `http` | `mpjpeg` | `http` | yes | | | | -| `http` | `mpegts` | `http`, `tcp` | yes | | | | -| `http` | `wav` | `http`, `tcp` | yes | | | | -| `http` | `yuv4mpegpipe` | `http`, `tcp` | yes | | | | -| `isapi` | `alaw`, `mulaw` | `http` | | | | yes | -| `ivideon` | `mp4` | `ws` | yes | | | | -| `mjpeg` | `ascii` | `http` | | yes | | | -| `mjpeg` | `jpeg` | `http` | | yes | | | -| `mjpeg` | `mpjpeg` | `http` | | yes | yes | | -| `mjpeg` | `yuv4mpegpipe` | `http` | | yes | | | -| `mp4` | `mp4` | `http`, `ws` | | yes | | | -| `mpegts` | `adts` | `http` | | yes | | | -| `mpegts` | `mpegts` | `http` | | yes | yes | | -| `multitrans` | `rtp` | `tcp` | | | | yes | -| `nest` | `srtp` | `rtsp`, `webrtc` | yes | | | no | -| `onvif` | `rtp` | * | yes | yes | | | -| `ring` | `srtp` | `webrtc` | yes | | | yes | -| `roborock` | `srtp` | `webrtc` | yes | | | yes | -| `rtmp` | `rtmp` | `rtmp` | yes | yes | yes | | -| `rtmp` | `flv` | `http` | | yes | yes | | -| `rtsp` | `rtsp` | `rtsp` | yes | yes | yes | yes | -| `tapo` | `mpegts` | `http` | yes | | | yes | -| `tuya` | `srtp` | `webrtc` | yes | | | yes | -| `v4l2` | `rawvideo` | `ioctl` | yes | | | | -| `webrtc` | `srtp` | `webrtc` | yes | yes | yes | yes | -| `webtorrent` | `srtp` | `webrtc` | yes | yes | | | -| `wyoming` | `pcm` | `tcp` | | yes | | | -| `wyze` | - | `tutk` | yes | | | yes | -| `xiaomi` | - | `cs2`, `tutk` | yes | | | yes | -| `yandex` | `srtp` | `webrtc` | yes | | | | +| module | formats | protocols | input | output | ingest | two-way | +|----------------|-----------------|------------------|-------|--------|--------|---------| +| [`alsa`] | `pcm` | `ioctl` | yes | | | | +| [`bubble`] | - | `http` | yes | | | | +| [`doorbird`] | `mulaw` | `http` | yes | | | yes | +| [`dvrip`] | - | `tcp` | yes | | | yes | +| [`echo`] | * | * | yes | | | | +| [`eseecloud`] | `rtp` | `http` | yes | | | | +| [`exec`] | * | `pipe`, `rtsp` | yes | | | yes | +| [`expr`] | * | * | yes | | | | +| [`ffmpeg`] | * | `pipe`, `rtsp` | yes | | | | +| [`flussonic`] | `mp4` | `ws` | yes | | | | +| [`gopro`] | `mpegts` | `udp` | yes | | | | +| [`hass`] | * | * | yes | | | | +| [`hls`] | `mpegts`, `mp4` | `http` | | yes | | | +| [`homekit`] | `srtp` | `hap` | yes | yes | | no | +| [`http`] | `adts` | `http`, `tcp` | yes | | | | +| [`http`] | `flv` | `http`, `tcp` | yes | | | | +| [`http`] | `h264` | `http`, `tcp` | yes | | | | +| [`http`] | `hevc` | `http`, `tcp` | yes | | | | +| [`http`] | `hls` | `http`, `tcp` | yes | | | | +| [`http`] | `mjpeg` | `http`, `tcp` | yes | | | | +| [`http`] | `mpjpeg` | `http` | yes | | | | +| [`http`] | `mpegts` | `http`, `tcp` | yes | | | | +| [`http`] | `wav` | `http`, `tcp` | yes | | | | +| [`http`] | `yuv4mpegpipe` | `http`, `tcp` | yes | | | | +| [`isapi`] | `alaw`, `mulaw` | `http` | | | | yes | +| [`ivideon`] | `mp4` | `ws` | yes | | | | +| [`mjpeg`] | `ascii` | `http` | | yes | | | +| [`mjpeg`] | `jpeg` | `http` | | yes | | | +| [`mjpeg`] | `mpjpeg` | `http` | | yes | yes | | +| [`mjpeg`] | `yuv4mpegpipe` | `http` | | yes | | | +| [`mp4`] | `mp4` | `http`, `ws` | | yes | | | +| [`mpegts`] | `adts` | `http` | | yes | | | +| [`mpegts`] | `mpegts` | `http` | | yes | yes | | +| [`multitrans`] | `rtp` | `tcp` | | | | yes | +| [`nest`] | `srtp` | `rtsp`, `webrtc` | yes | | | no | +| [`onvif`] | `rtp` | * | yes | yes | | | +| [`ring`] | `srtp` | `webrtc` | yes | | | yes | +| [`roborock`] | `srtp` | `webrtc` | yes | | | yes | +| [`rtmp`] | `flv` | `rtmp` | yes | yes | yes | | +| [`rtmp`] | `flv` | `http` | | yes | yes | | +| [`rtsp`] | `rtsp` | `rtsp` | yes | yes | yes | yes | +| [`tapo`] | `mpegts` | `http` | yes | | | yes | +| [`tuya`] | `srtp` | `webrtc` | yes | | | yes | +| [`v4l2`] | `rawvideo` | `ioctl` | yes | | | | +| [`webrtc`] | `srtp` | `webrtc` | yes | yes | yes | yes | +| [`webtorrent`] | `srtp` | `webrtc` | yes | yes | | | +| [`wyoming`] | `pcm` | `tcp` | | yes | | | +| [`wyze`] | - | `tutk` | yes | | | yes | +| [`xiaomi`] | - | `cs2`, `tutk` | yes | | | yes | +| [`yandex`] | `srtp` | `webrtc` | yes | | | | + +[`alsa`]: alsa/README.md +[`api`]: api/README.md +[`app`]: app/README.md +[`bubble`]: bubble/README.md +[`debug`]: debug/README.md +[`doorbird`]: doorbird/README.md +[`dvrip`]: dvrip/README.md +[`echo`]: echo/README.md +[`eseecloud`]: eseecloud/README.md +[`exec`]: exec/README.md +[`expr`]: expr/README.md +[`ffmpeg`]: ffmpeg/README.md +[`flussonic`]: flussonic/README.md +[`gopro`]: gopro/README.md +[`hass`]: hass/README.md +[`hls`]: hls/README.md +[`homekit`]: homekit/README.md +[`http`]: http/README.md +[`isapi`]: isapi/README.md +[`ivideon`]: ivideon/README.md +[`mjpeg`]: mjpeg/README.md +[`mp4`]: mp4/README.md +[`mpegts`]: mpegts/README.md +[`multitrans`]: multitrans/README.md +[`nest`]: nest/README.md +[`ngrok`]: ngrok/README.md +[`onvif`]: onvif/README.md +[`pinggy`]: pinggy/README.md +[`ring`]: ring/README.md +[`roborock`]: roborock/README.md +[`rtmp`]: rtmp/README.md +[`rtsp`]: rtsp/README.md +[`srtp`]: srtp/README.md +[`streams`]: streams/README.md +[`tapo`]: tapo/README.md +[`tuya`]: tuya/README.md +[`v4l2`]: v4l2/README.md +[`webrtc`]: webrtc/README.md +[`webtorrent`]: webtorrent/README.md +[`wyoming`]: wyze/README.md +[`wyze`]: wyze/README.md +[`xiaomi`]: xiaomi/README.md +[`yandex`]: yandex/README.md diff --git a/internal/app/README.md b/internal/app/README.md index aa3b96cf..440bea1d 100644 --- a/internal/app/README.md +++ b/internal/app/README.md @@ -1,6 +1,6 @@ # App -The application module is responsible for reading configuration files and running other modules. +The application module is responsible for reading configuration files, running other modules and setting up [logs](#log). The configuration can be edited through the application's WebUI with code highlighting, syntax and specification checking. @@ -60,10 +60,10 @@ api: listen: ":1984" # default public port for WebUI and HTTP API ffmpeg: - bin: "ffmpeg" # default binary path for FFmpeg + bin: "ffmpeg" # default binary path for FFmpeg log: - level: "info" # default log level + level: "info" # default log level output: "stdout" time: "UNIXMS" diff --git a/website/.vitepress/config.js b/website/.vitepress/config.js index a31d9b94..fba61bd1 100644 --- a/website/.vitepress/config.js +++ b/website/.vitepress/config.js @@ -41,6 +41,7 @@ export default defineConfig({ {text: 'Stream to camera', link: '/#stream-to-camera'}, {text: 'Publish stream', link: '/#publish-stream'}, {text: 'Preload stream', link: '/#preload-stream'}, + {text: 'Streaming stats', link: '/#streaming-stats'}, ], collapsed: false, }, diff --git a/website/images/webui-config.png b/website/images/webui-config.png new file mode 100644 index 00000000..9a98afb2 Binary files /dev/null and b/website/images/webui-config.png differ diff --git a/website/images/webui-net.png b/website/images/webui-net.png new file mode 100644 index 00000000..7c2ea6a0 Binary files /dev/null and b/website/images/webui-net.png differ