Docs
How to publish streams, play them back, and run the 1000-user load test.
Publish a stream
Send any of these to the server; the stream name is yours to choose
(mystream below). WebRTC playback needs H.264 video + Opus audio.
RTMP sends AAC audio, so every RTMP stream is automatically copied with Opus audio as
mystream-webrtc. Watch that one at /live/mystream-webrtc/ to get sound.
# RTMP (OBS: set Server to the URL, Stream Key to the name)
rtmp://192.168.10.50:1935/mystream
# RTSP
rtsp://192.168.10.50:8554/mystream
# SRT
srt://192.168.10.50:8890?streamid=publish:mystream
Play a stream
WebRTC (sub-second): /live/mystream/ (player page)
WHEP endpoint: /live/mystream/whep (for custom players)
Live HLS: /hls-live/mystream/index.m3u8 (HTTPS domain only*)
Static demo HLS: /hls/stream.m3u8
Static demo MP4: /test.mp4
Paths work on both http://192.168.10.50:8099 (LAN) and
https://videotest.stormadvsyscorp.com (public, once port
forwards are live). The looping demo stream is named test.
*Live HLS uses secure session cookies, so browsers need the HTTPS URL;
on plain HTTP use WebRTC or the static demo HLS.
Run the 1000-user load test
Best run from a different machine than the server:
docker run --rm -i --network host \
-v /mnt/user/appdata/video-loadtest/loadtest:/scripts grafana/k6 run \
-e BASE_URL=http://192.168.10.50:8099 -e VUS=1000 -e DURATION=5m \
/scripts/page-viewers.js
page-viewers.js hits the site only (the provider's stream is
untouched — k6 doesn't run player JavaScript). hls-viewers.js
simulates full HLS playback against the local demo stream instead.
Pass criteria: error rate under 1%, p95 latency under threshold.
Watch the dashboard while it runs.
Capacity notes
1000 viewers × 2.6 Mbps ≈ 2.6 Gbps sustained. A gigabit uplink saturates near 380 concurrent viewers of this bitrate — if segments slow down, check network throughput before blaming the server. For external WebRTC viewers the router must forward UDP/TCP 8189 in addition to 80/443.