# Phone and browser app (/docs/phone-app)













The VISP app turns a phone into a full camera for the home studio. It publishes
the selected camera and microphone over SRT to your relay path; OBS at home
reads that path and runs the show.

For the first-run path — sign in, import OBS scenes, go live, and pair remote
control — follow [Get started](/docs/get-started).

<img alt="Phone app ready to go live" src="__img0" />

## Platforms [#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 `VISP Internal` TestFlight group and Android
through Play internal testing. Client links live on
[visp-stream.com/download](https://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.

<img alt="Browser publisher" src="__img1" />

## Sign in and go live [#sign-in-and-go-live]

1. Sign in with Twitch or Kick. 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.
2. Open settings to pick the camera, resolution, and frame rate, then go live.
   The stream appears in OBS as the corresponding relay path's Media Source.
3. Stopping releases the publisher and the media devices.

<img alt="Camera settings sheet" src="__img2" />

<img alt="Live over SRT" src="__img3" />

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. The home studio keeps the show
alive on its fallback scene (see
[Encoders and fallback](/docs/broadcaster-setup)) while the phone reconnects.

## While live [#while-live]

* **Floating chat** overlays Twitch and Kick messages on the capture screen.
  Kick messages arrive through the server's webhook subscription, so they work
  without keeping a Kick tab open anywhere.
* **Stream info sheet** edits the title and metadata on the provider without
  leaving the app.
* **OBS control** starts and stops the home OBS stream and switches scenes
  through the paired [OBS plugin](/docs/obs-remote-control). The control
  reflects whether OBS is currently connected.

<img alt="OBS program scene picker on the phone" src="__img4" />

## Apple Watch companion [#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
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 [#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](/docs/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](/docs/obs-remote-control).
