Phone and browser app
Publish from a phone or browser, follow chat, and control OBS remotely.
The VISP app publishes the selected camera and microphone over SRT to your relay path. Direct sends that feed to Twitch, Kick, or YouTube. OBS can optionally read the original contribution feed for monitoring, recording, and scenes.
For the first-run path — sign in, authorize Direct, go live, and optionally add OBS — follow Get started.
Platforms
| Client | Requirement | Transport |
|---|---|---|
| iOS app | iOS 16.4+, arm64 iPhone | SRT (H.264/AAC) |
| Android app | Android 7+ | SRT (H.264/AAC) |
| Browser app | Current Chrome, Edge, or Safari at stream.visp-stream.com | WebRTC (H.264/Opus) |
The iOS build ships through the App Store and Android through Google Play. Client links live on visp-stream.com/download. The browser app is a static site served by the app host; it publishes over WHIP through the relay's WebRTC port.
Sign in and go live
- Sign in with Twitch, Kick, or Google. The app creates a publishing device for this phone automatically and stores its publish URL in the platform's secure storage — you never copy credentials by hand.
- Open settings to pick the camera, resolution, and frame rate, then tap Go Live. Direct sends the feed to your platform. If you also use OBS, the stream appears there as that device's Media Source.
- Stopping releases the publisher and the media devices.
Each phone is its own publishing device: revoking or rotating one phone in the portal never disconnects the others. Use two signed-in phones to feed two scenes of the same broadcast, each with its own microphone.
A short signal drop does not end the broadcast. With Direct, turn on the optional BRB card on the dashboard BRB tab (off by default) to hold the broadcast while the phone reconnects. With OBS, the home studio keeps the show alive on its fallback scene (see Encoders and fallback).
Network bonding
The iOS and Android apps can send over Wi-Fi and cellular at the same time. Bonding is off by default. Open Settings → Network, turn on Network bonding, then pick a Mode:
- SRTLA (aggregating) is the default. It sends each packet once over whichever link is coping best, so both links add headroom (relay UDP 5000).
- Broadcast sends every packet over both links; the relay uses the first copy and discards duplicates. This improves redundancy but can roughly double mobile data use, and the app warns before the first Broadcast stream.
- Main + backup prefers Wi-Fi and uses cellular when the main link fails.
The app shows Wi-Fi and cellular separately and warns when bonding is running on one link. If bonding is off, publishing continues directly to UDP 8890.
Low-latency OBS mode
By default the app sends with a 2-second SRT window, so a phone uplink has time to retransmit a burst of lost packets. That is right for platforms, but in OBS it means you see yourself about three seconds late.
Signed in to a VISP account, open Settings → Network and turn on Low-latency OBS mode for this device. When you go live, the app measures the round trip to your relay and picks the shortest window that connection can take (about 300 ms on Wi-Fi, 600 ms on cellular). The OBS plugin switches that device's Media Source to a 150 ms read with no network buffering within a few seconds. Expect roughly half a second phone-to-OBS on good Wi-Fi.
- Network bonding is off while low-latency mode is on.
- Direct keeps working from the same feed, but on a weak uplink the shorter window can drop or smear frames on Twitch, Kick, or YouTube. The dashboard and the app say so when both are on.
- Older OBS plugin versions apply the change when you open VISP for OBS and press Refresh devices. A scene collection downloaded from the dashboard includes the same settings.
While live
- Floating chat overlays Twitch, Kick, and YouTube messages on the capture screen. Kick messages arrive through the server's webhook subscription, so they work without keeping a Kick tab open anywhere.
- OBS chat overlay stays blank until a chat message arrives; append
&debug=1to its Browser Source URL to show connection status. - Viewer counts show the current audience for each selected Direct output. A dash means the provider did not expose a current count.
- Stream info sheet edits the title and metadata on the provider without leaving the app. Twitch and Kick support title/category editing; YouTube's default Direct title is configured separately.
- Picture in Picture can keep supported iPhone capture visible while you use another app. Background behavior still depends on the device and OS.
- Subtitles can burn English or Finnish speech into the camera picture. On-device recognition is the default; hosted recognition appears only for accounts where it is enabled.
- Audio isolation is available on supported iPhones, with an optional hosted mode where enabled. Test it before relying on it live.
- OBS control (optional) starts and stops the home OBS stream and switches scenes through the paired OBS plugin. The control reflects whether OBS is currently connected.
Apple Watch companion
The iPhone app forwards a live snapshot to the paired Apple Watch (watchOS 10+) over WatchConnectivity: stream state and uptime, resolution and frame rate, audio level tier, reconnect attempts, recent chat with provider status, and the viewer counts for the selected Direct outputs, plus the OBS connection with its scene list. Scene switching works from the wrist — tapping a scene sends the command through the phone to the same OBS control channel.
The Watch app is display-and-control only; it never holds credentials and stops updating when the iPhone app is not running.
Troubleshooting
- Camera streaming needs a real device. Simulators and Expo Go do not include the native SRT module; developers should build a development client as described in Local development.
- The browser app cannot connect. WebRTC media uses UDP 8189 with a TCP fallback on the same port; a network that blocks both cannot publish from the browser.
- OBS controls show disconnected. Pair or re-pair the plugin — see OBS remote control.