diff options
| author | yum <yum.food.vr@gmail.com> | 2025-10-14 13:36:14 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-10-28 17:19:35 -0700 |
| commit | 8a852c013733d0170ac80a761e6b9414c02a2078 (patch) | |
| tree | 11ac026ac5018c364e4b1861fb70c91398cd93dc /README.md | |
| parent | c3fa121f1a3ec74c5980bc8981e4836ca3a708f2 (diff) | |
switch to HLS, works better
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 17 |
1 files changed, 11 insertions, 6 deletions
@@ -1,14 +1,19 @@ -Shitty service to proxy data from OBS into a low-latency MPEG-DASH stream VRChat understands. +Shitty service to proxy data from OBS into an HTTP Live Streaming (HLS) feed VRChat understands. ## Usage 1. Configure OBS with a custom server pointing at `rtmp://<your-domain>/live` and the pre-shared key stored in `STREAM_PSK`. -2. Start the Python service (see `etc/systemd/system/obsproxy.service` for a sample unit). -3. When the service starts it prints a session-specific manifest URL like `https://<your-domain>/dash/<session-hex>/manifest.mpd`; share that exact URL with your VRChat video player. Multiple viewers can consume the feed concurrently. +2. Install runtime dependencies: `pip install -r opt/obsproxy/requirements.txt`. +3. Start the Python service (see `etc/systemd/system/obsproxy.service` for a sample unit). The bundled entrypoint now runs under [Waitress](https://docs.pylonsproject.org/projects/waitress/en/stable/) so you get a production-grade WSGI server out of the box. +4. When the service starts it prints a session-specific playlist URL like `https://<your-domain>/hls/<session-hex>/stream.m3u8`; share that exact URL with your VRChat video player. Multiple viewers can consume the feed concurrently. Environmental knobs: -- `STREAM_PSK`: required PSK for the single ingest client. -- `DASH_SEGMENT_TIME` / `DASH_FRAGMENT_TIME`: tweak DASH segment/fragment durations to balance latency vs resilience. +- `OBS_STREAM_KEY` / `STREAM_PSK`: required PSK for the single ingest client. +- `HLS_SEGMENT_TIME`: length (in seconds) of the `.ts` segments emitted by FFmpeg (defaults to `2`). +- `HLS_PLAYLIST_SIZE`: number of segments retained in the rolling playlist (defaults to `6`). +- `HOST`: interface Waitress binds to (defaults to `0.0.0.0`). +- `PORT`: TCP port Waitress listens on (defaults to `5000`). +- `FFMPEG_LOGLEVEL`: override the log verbosity passed to FFmpeg (defaults to `info`). -The server seeds a fresh 128-bit session ID on every restart and writes DASH fragments under `<STREAM_DIR>/live/<session-hex>`. The manifest and segments are only exposed under `/dash/<session-hex>/`, making it infeasible to guess a live session path. +The server seeds a fresh 128-bit session ID on every restart and writes HLS artifacts under `<STREAM_DIR>/live/<session-hex>`. The playlist and segments are only exposed under `/hls/<session-hex>/`, making it infeasible to guess a live session path. |
