Stream your desktop (or a window) into VRChat’s video player over the internet. OBS captures and sends video via RTMP to MediaMTX, which serves HLS locally; a Cloudflare quick tunnel exposes that stream over HTTPS so you can paste one URL into VRChat. An optional batch file starts MediaMTX and the tunnel for you.
Note: Even with these settings you’ll have about 3–5 seconds delay between desktop and VRChat. Best for streaming content to watch in VRChat rather than a real-time desktop feed.
| Section | Description |
|---|---|
| Dependencies | What you need (OBS, MediaMTX, VB-Cable, Cloudflared) |
| Pipeline | How video flows: Desktop → OBS → RTMP → MediaMTX → HTTPS → VRChat |
| Folder setup | Where to put files for the batch launcher |
| Batch File Launcher | One-click start for MediaMTX + tunnel |
| MediaMTX | Download, configure, run (RTMP → HLS) |
| OBS | Capture, stream settings, output settings |
| Virtual Cable | Route app audio into OBS |
| Cloudflared | Temporary tunnel, batch usage, optional persistent tunnel |
| Notes / Tips | Performance and reminders |
- OBS Studio – captures your desktop or specific windows.
- MediaMTX – converts your OBS stream to a VRChat-compatible format.
- VB-Audio Virtual Cable – routes audio from applications into your stream.
- Cloudflare Tunnel – exposes your stream over HTTPS for remote access.
Video and audio move through the stack like this:
Desktop
↓
OBS (capture + encode, streams via RTMP)
↓
RTMP (rtmp://127.0.0.1/live, key: vrchat)
↓
MediaMTX (RTMP → HLS at http://localhost:8888/live/vrchat/)
↓
HTTPS (Cloudflare Tunnel → public https://….trycloudflare.com)
↓
VRChat Video Player (HLS URL: https://….trycloudflare.com/live/vrchat/index.m3u8)
To use the batch file launcher, create a folder (for example on your C: drive):
C:\vrcstreamserver\
Place the batch file, MediaMTX, and Cloudflared there as described below. The batch file also works if you put it elsewhere—it uses its own folder as the base path.
The launch_vrc_stream.bat file starts MediaMTX and a temporary Cloudflare tunnel so you don’t have to open multiple consoles by hand. You still need to set up OBS, MediaMTX, and Cloudflared once (see sections below); the batch is only a quick launcher.
What it does:
- Checks that MediaMTX and Cloudflared exist at the expected paths; if not, asks you to enter the full path to each.
- Starts MediaMTX in a separate window (local RTMP/HLS server).
- Starts a temporary Cloudflare tunnel in the same window. After a few seconds you’ll see a URL in a box (e.g.
https://something.trycloudflare.com). - Shows clear instructions: your full stream URL for VRChat or OBS is that URL plus
/live/vrchat/index.m3u8(e.g.https://something.trycloudflare.com/live/vrchat/index.m3u8). Copy the URL from the box, add/live/vrchat/index.m3u8, and paste that full URL into VRChat or OBS. - When you’re done streaming, close the tunnel window to stop the tunnel. You can leave MediaMTX running or close that window too.
Expected folder layout (if you use the default paths):
C:\vrcstreamserver\
launch_vrc_stream.bat
mediamtx\
mediamtx.exe
mediamtx.yml
Cloudflared\
cloudflared.exe
You can place the batch file in another folder; it will look for mediamtx\mediamtx.exe and Cloudflared\cloudflared.exe relative to its own location, or prompt you for paths if they’re missing.
Download the Windows zip for MediaMTX and extract it so you have a folder like:
C:\vrcstreamserver\mediamtx\
(with mediamtx.exe and mediamtx.yml inside).
A preconfigured mediamtx.yml can be found at Download mediamtx.yml
Open mediamtx.yml in a text editor and replace or add the following:
rtmp: yes
rtmpAddress: :1935
hls: yes
hlsAddress: :8888
hlsAlwaysRemux: yes
hlsVariant: mpegts # VRChat works best with MPEG-TS segments
hlsSegmentDuration: 500ms # half-second segments
hlsSegmentCount: 3 # keep only 3 segments
hlsPartDuration: 100ms # fine-grained parts
hlsAllowOrigins: ['*'] # allow VRChat to access
paths:
vrchat:Tip: You can try
hlsSegmentDuration: 250msfor even lower latency; if playback stutters, use 500ms or 1s.
Warning: Do not change MediaMTX to
fmp4orlowLatencyvariant unless you’ve confirmed VRChat supports it.
optionally: you can disable unused protocols
rtsp: false
webrtc: false
srt: false
If you use the batch launcher, it starts MediaMTX for you. Otherwise, run mediamtx.exe from the MediaMTX folder. Leave the window open; your PC is then acting as a local stream server.
- In the Sources tab, click
+and add a Display Capture or Window Capture depending on what you want to stream.
Open Settings → Stream:
Service: Custom
Server: rtmp://127.0.0.1/live
Stream Key: vrchat
Click Apply.
- Click Start Streaming in OBS.
- You can test the local HLS stream at:
http://127.0.0.1:8888/live/vrchat/index.m3u8
Settings → Output → Streaming — pick the profile you want (lowest latency, balanced ~5 s, or highest quality), then use the table that matches your Video Encoder.
If your Video Encoder is "NVIDIA NVENC H.264" — use this table (every row is a setting you see in OBS):
| Setting | Lowest latency | Balanced (~5 s, 1080p) | Highest quality |
|---|---|---|---|
| Rate Control | CBR | CBR | CBR |
| Bitrate | 4500–6000 Kbps | 6000–8000 Kbps | 8000–12000 Kbps |
| Keyframe Interval (0=auto) | 1 s | 1 s | 2 s |
| Preset | P3: Fast (Low Quality) | P4: Medium or P5: Slow | P5–P6: Slow (High Quality) |
| Tuning | Ultra Low Latency | High Quality | High Quality |
| Multipass Mode | Two Passes (Quarter Resolution) | Two Passes (Full Resolution) | Two Passes (Full Resolution) |
| Profile | high | high | high |
| Look-ahead | Off | Off | On |
| Psycho Visual Tuning | On (optional) | On | On |
If your Video Encoder is "x264" — use this table instead:
| Setting | Lowest latency | Balanced (~5 s, 1080p) | Highest quality |
|---|---|---|---|
| Rate Control | CBR | CBR | CBR |
| Bitrate | 4500–6000 Kbps | 6000–8000 Kbps | 8000–12000 Kbps |
| Keyframe Interval | 1 s | 1 s | 2 s |
| CPU Preset | veryfast, superfast | veryfast, fast | fast, medium |
| Custom x264 Options (Advanced) | tune=zerolatency |
— | — |
Use Keyframe Interval 1 for HLS compatibility; 2 s is only for the highest-quality profile. For 1080p, set Settings → Video (or Rescale Output in Streaming) to 1920×1080 so the stream is not 4K. FPS: 30.
Settings → Video (FPS and resolution for the stream):
- Open Settings → Video (left sidebar).
- Base (Canvas) Resolution — set to your display or capture size (e.g. 1920×1080 or 3840×2160). This is what OBS captures.
- Output (Scaled) Resolution — set to the resolution you want the stream to be:
- 1920×1080 for 1080p
- 1280×720 for 720p
OBS will scale the canvas down to this before encoding. If you want to stream 1080p, choose 1920×1080 here.
- FPS — set to 30 (or 60 if you prefer). This is the frame rate of the stream.
- Click Apply / OK.
If you use Output → Streaming (Advanced) and see Rescale Output: you can leave Output (Scaled) Resolution as-is in Video and instead enable Rescale Output in the Streaming tab and set it to 1920×1080 (and ensure your encoder is using that). Either method works; the stream resolution is whatever you set in Video’s “Output (Scaled) Resolution” or in Rescale Output.
- Open Windows Settings → System → Sound → Advanced Sound Options → App volume and device preferences.
- For the app/browser you want to capture, set Output to
CABLE Input (VB-Audio Virtual Cable).
- In OBS: Sources → + → Audio Input Capture → Create New.
- Select
CABLE Output (VB-Audio Virtual Cable)as the device.
Temporary tunnels give you a public HTTPS URL so VRChat (or others) can reach your stream. You don’t need a Cloudflare account or your own domain for the temporary tunnel used by the batch file.
Usage and terms (quick tunnels)
Cloudflare documents TryCloudflare / quick tunnels as a free feature intended for testing and development, with no uptime guarantees and some limits. For personal or occasional VRChat streams this is usually fine, but for any regular, production, or commercial use you should set up a named Cloudflare Tunnel under a Cloudflare account instead and follow their terms.
- Go to Cloudflared Releases.
- Download
cloudflared-windows-amd64.exe. - Put it in a folder, for example:
C:\vrcstreamserver\Cloudflared\cloudflared.exe
- Optional: add that folder to your Windows PATH.
When you run launch_vrc_stream.bat, it starts a temporary tunnel in the same window. After a few seconds you’ll see output like:
| Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): |
| https://something-random.trycloudflare.com |
Your full stream URL for VRChat or OBS is:
https://something-random.trycloudflare.com/live/vrchat/index.m3u8
Copy the https://...trycloudflare.com URL from the box, add /live/vrchat/index.m3u8 to the end, and paste that into VRChat or OBS. No login or certificates are required. Close the batch window when you’re done to stop the tunnel. The URL changes each time you start a new tunnel.
To run the tunnel yourself in a command prompt:
cloudflared tunnel --url http://localhost:8888
You’ll see a box with the https://...trycloudflare.com URL. Use that URL + /live/vrchat/index.m3u8 as your stream URL in VRChat or OBS.
For a fixed URL and to run the tunnel as a Windows service (e.g. always on):
-
Create a Cloudflare account and run:
cloudflared tunnel loginWhen the browser opens, log in and select a zone (you need at least one site/domain in Cloudflare for this).
-
Create a named tunnel and route DNS:
cloudflared tunnel create myvrchat cloudflared tunnel route dns myvrchat myvrchat.trycloudflare.com -
Install and run as a Windows service (run Command Prompt as Administrator):
cloudflared service install
Configure the service to run your tunnel (see Cloudflare’s docs). Your stream URL would then be something like https://myvrchat.trycloudflare.com/live/vrchat/index.m3u8. This setup is separate from the batch launcher, which only uses temporary tunnels.
- For best performance, close unnecessary apps while streaming.
- Test your local stream at
http://127.0.0.1:8888/live/vrchat/index.m3u8before using the tunnel. - The temporary tunnel URL changes every time you run the batch file; update VRChat with the new full URL each session.