Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions blueprints/oryx/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
version: "3.8"
services:
oryx:
image: ossrs/oryx:5.15.20
restart: unless-stopped
ports:
# RTMP, WebRTC and SRT are not HTTP protocols, so Traefik cannot route
# them through the domain. They must be published directly on the host
# (same approach as the poste.io template with its mail ports). Use the
# server IP (not the domain) for these protocols.
- "1935:1935" # RTMP ingest/playback (TCP)
- "8000:8000/udp" # WebRTC media transport (UDP)
- "10080:10080/udp" # SRT ingest/playback (UDP)
volumes:
- oryx-data:/data

volumes:
oryx-data: {}
29 changes: 29 additions & 0 deletions blueprints/oryx/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Oryx (SRS Stack)

Oryx is an all-in-one video streaming server built on [SRS](https://github.com/ossrs/srs), with a web console for managing streams, recording, forwarding, transcoding and virtual live streaming.

## First login

Open the domain assigned to this service. On the first visit Oryx asks you to **create the admin password** — set it right away, since anyone who reaches the page first can claim the instance. The password (and all other state) is stored in the `oryx-data` volume, so it survives restarts and upgrades.

## Publishing streams

The web console (Scenarios > Streaming) shows ready-to-copy URLs that include your stream secret. The streaming protocols are **not HTTP**, so Traefik cannot route them through your domain — they are published directly on the server's host ports instead. Use the **server IP address** (not the domain) for these:

| Protocol | URL format | Host port |
| --- | --- | --- |
| RTMP (OBS, ffmpeg) | `rtmp://SERVER_IP/live/livestream?secret=xxx` | `1935/tcp` |
| SRT | `srt://SERVER_IP:10080?streamid=#!::r=live/livestream,secret=xxx,m=publish` | `10080/udp` |
| WebRTC (WHIP) | `https://your-domain/rtc/v1/whip/?app=live&stream=livestream&secret=xxx` | signaling via domain, media via `8000/udp` |

Make sure your server firewall / cloud security group allows `1935/tcp`, `8000/udp` and `10080/udp`. Because these are fixed host ports, only one Oryx instance can run per server.

## Playback

HTTP-based playback goes through your domain (HTTPS via Traefik):

- HLS: `https://your-domain/live/livestream.m3u8`
- HTTP-FLV: `https://your-domain/live/livestream.flv`
- WebRTC (WHEP): available from the console's preview page; media flows over `8000/udp`.

If WebRTC playback or publishing connects but produces no media, verify that UDP port `8000` is reachable from the client — WebRTC media bypasses the reverse proxy entirely.
52 changes: 52 additions & 0 deletions blueprints/oryx/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions blueprints/oryx/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"id": "oryx",
"name": "Oryx",
"version": "5.15.20",
"description": "Oryx (formerly SRS Stack) is an all-in-one, open-source video streaming server with a web console. It ingests RTMP, WebRTC (WHIP) and SRT streams and plays them back over HLS, HTTP-FLV and WebRTC (WHEP), with built-in recording, forwarding, transcoding and virtual live streaming.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/ossrs/oryx",
"website": "https://ossrs.io/",
"docs": "https://ossrs.io/lts/en-us/docs/v6/doc/getting-started-oryx",
"docker": "https://hub.docker.com/r/ossrs/oryx"
},
"tags": [
"streaming",
"video",
"rtmp",
"webrtc",
"srt",
"hls",
"media-server"
]
}
8 changes: 8 additions & 0 deletions blueprints/oryx/template.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[variables]
main_domain = "${domain}"

[config]
[[config.domains]]
serviceName = "oryx"
port = 2022
host = "${main_domain}"
Loading