Skip to content

Live Streaming Guide — Heritage Virginia ​

For: Media stewards and tech volunteers Updated: 2026-06-26 Related design doc: Sermons & Music Hub


EquipmentRoleOBS Source
Reolink RTSP PTZ cameraPrimary videoMedia Source (RTSP URL)
Soundboard (with USB or analog out)AudioAudio Input Capture
Windows laptop running OBSEncoding + streaming

The laptop connects to the soundboard for clean audio and pulls the camera feed over the local network via RTSP. OBS mixes both and pushes a single RTMP stream to YouTube Live at no cost.


Signal Flow — How Everything Connects ​

Complete AV Path: Camera + Audio → Members ​


Network Topology ​


Steward + Operator Workflow ​


Why This Beats iPhone + Zoom ​

  • Dedicated PTZ camera — remote pan/tilt/zoom during service; far better image quality than a phone propped on a stand.
  • Clean soundboard audio — mixes directly from the board; no room echo or mic handling noise.
  • YouTube Live is free — no Cloudflare or Zoom Pro subscription required.
  • Archive lives on YouTube — recordings are available the moment the stream ends, with no manual upload step.

Before Any Live Event — Steward Does This First ​

The steward must create the live event in the portal before the operator starts streaming. This registers the event so the Watch Live page shows the correct embed.

  1. Sign in at listen.heritageva.app → go to the Steward section → Live tab.
  2. Click + New Event.
  3. Fill in: Event title, Access tier (Members or Baptized Members Only), optional scheduled date/time.
  4. Paste the YouTube watch URL into the YouTube Live Watch URL field (get this from YouTube Studio — see below).
  5. Click Create & Get RTMP — the portal confirms "YouTube Live configured ✓".
  6. Click Go Live in the portal after OBS is streaming and the stream is healthy.

Do this once before the first stream. These are physical hardware commissioning steps. Once complete, the camera appears as an RTSP source in OBS automatically on every future stream.

What you need ​

  • Reolink E1 Zoom V2 camera + power adapter
  • Phone with the Reolink app installed (iOS / Android)
  • Church WiFi password (the same network the streaming laptop will use)
  • A mounting location with line-of-sight to the WiFi router or access point

Steps ​

  1. Install the Reolink app on your phone (iOS or Android). Create a free Reolink account if prompted — you only need it for initial setup.

  2. Power on the camera. Plug in the power adapter and wait ~30 seconds until the status LED pulses blue (ready to pair).

  3. Open the app → tap "+" → "Add Device" → "WiFi Camera". The app will display a QR code on your phone screen.

  4. Hold the QR code 15–20 cm in front of the camera lens. The camera will beep twice and the LED turns solid blue when it successfully scans the code and joins the WiFi network.

  5. Set the admin password. The app prompts you to create a password immediately after pairing. Use a strong password and record it in the shared credentials (Key Vault secret heritage-reolink-camera-password). Do not use the default.

  6. Find the camera's IP address. In the app: tap the camera → Settings (gear icon)NetworkLAN IP. Write this down — you will need it for OBS. Example: 192.168.1.45.

    • Alternatively: check your router's DHCP client list and look for a device named IPC_ or Reolink.
  7. Test PTZ (pan/tilt/zoom). In the app, tap the camera live view and use the on-screen controls to confirm the camera pans, tilts, and zooms. Aim it at the pulpit and save a Preset (tap the preset icon → Save Preset 1 = "Pulpit").

  8. Confirm the RTSP URL. The Reolink E1 Zoom V2 RTSP URL format is:

    rtsp://<admin>:<password>@<IP>:554/h264Preview_01_main

    Example: rtsp://admin:MyPassword@192.168.1.45:554/h264Preview_01_main

    You can verify it in VLC: Media → Open Network Stream → paste the URL → Play. You should see the live camera feed.

  9. Add to OBS. In OBS → Sources panel → "+" → Media Source → uncheck "Local File" → paste the RTSP URL into the Input field → OK. The camera feed should appear in the OBS preview.

Tip: Assign the camera a static IP (or DHCP reservation by MAC address in your router) so the RTSP URL never changes between streams.


One-Time: Enable YouTube Live Streaming &ZeroWidthSpace;

Warning: YouTube requires up to 24 hours to verify a channel before live streaming is enabled. Complete this step well before the first event — do not leave it for event day.

  1. Sign in to YouTube Studio with the Heritage Virginia account.
  2. Click Go Live (camera icon, top right).
  3. If prompted, click Request access and verify the channel (phone verification may be required).
  4. Wait for the confirmation email — verification typically takes a few hours but can take up to 24.

One-Time: Get Your YouTube Stream Key &ZeroWidthSpace;

Do this the first time you set up OBS, and again any time you want a new persistent key.

  1. In YouTube Studio, click Go Live (top right).
  2. Click ScheduleStart (or Go Live now for an immediate test).
  3. Under Stream settings, select Streaming software.
  4. Copy:
    • Stream URL: rtmp://a.rtmp.youtube.com/live2
    • Stream key: the long alphanumeric string shown (keep this secret)
    • Watch URL: the youtube.com/watch?v=... link — paste this into the Heritage portal when creating a live event
  5. Set Visibility to Unlisted so only portal members with the link can find it.

One-Time: Set Up OBS &ZeroWidthSpace;

Install OBS &ZeroWidthSpace;

Download from obsproject.com — it is free and open source. Install on the streaming laptop. When it opens for the first time, run the Auto-Configuration Wizard (Tools → Auto-Configuration Wizard) and choose Optimize for streaming.

RTSP is disabled by default on Reolink cameras. Do this before trying to connect OBS.

Via the Reolink app:

  1. Open the Reolink app → tap the camera → tap the gear icon (top right).
  2. Go to AdvancedPort Settings.
  3. Toggle RTSP to ON. Note the port number (default: 554).
  4. Tap Save / confirm.

Via the Reolink web interface (alternative):

  1. Find the camera's IP in the app (Settings → Network → LAN → IP Address, e.g. 192.168.1.108).
  2. Open a browser on the same network → navigate to http://192.168.1.108.
  3. Login → SettingsNetworkAdvancedPort Settings → enable RTSP → Save.

Once RTSP is enabled, confirm it works by opening VLC → Media → Open Network Stream → paste the URL below → Play.

Find your camera's IP address first: Open the Reolink app → tap the camera → gear icon → Network → note the IP address (e.g. 192.168.1.108).

Test your RTSP URL in VLC BEFORE setting up OBS (saves time if the path is wrong):

  1. Install VLC → open it → MediaOpen Network Stream
  2. Try URL 1 first (most common for E1 Zoom family): rtsp://admin:<password>@<camera-IP>:554/h264Preview_01_main
  3. If that shows a black screen or errors, try URL 2 (official Reolink format): rtsp://admin:<password>@<camera-IP>/Preview_01_main
  4. Use whichever one plays video — that is your camera's working path.

The E1 Zoom V2 has been confirmed working with h264Preview_01_main in community testing (November 2025), but some Reolink firmware versions respond to Preview_01_main instead. Test in VLC first so you know for certain.

In OBS (once you know which URL works from VLC):

  1. In the Sources panel, click +Media Source.
  2. Name it "Reolink E1 Zoom" and click OK.
  3. Uncheck Local file.
  4. In the Input field, paste the working URL from your VLC test.
  5. Leave Input Format blank (OBS auto-detects RTSP).
  6. Check Reconnect on error (delay: 2 s).
  7. Click OK — camera feed appears in OBS preview within 2–5 seconds.

Normal: 1–3 seconds of RTSP latency is expected and fine for one-way streaming.

Add Audio — Soundboard &ZeroWidthSpace;

Option A — USB direct (preferred): If the soundboard has a USB audio output, plug it into the laptop. In OBS Sources, click +Audio Input Capture → select the soundboard USB device.

Option B — Analog to USB: Connect the soundboard's main mix RCA or TRS output to a Behringer UCA222 (or similar USB audio interface). Plug the interface into the laptop. In OBS Sources, click +Audio Input Capture → select the interface.

Check the Audio Mixer in OBS — you should see the level meters moving when the soundboard is playing.

Configure Stream Output &ZeroWidthSpace;

  1. Open OBS → SettingsStream.
  2. Set Service to Custom.
  3. In Server, paste: rtmp://a.rtmp.youtube.com/live2
  4. In Stream Key, paste the YouTube stream key (from YouTube Studio).
  5. Click OK.
  1. Open OBS → SettingsOutput → set Output Mode to Advanced.
  2. Under the Streaming tab:
    • Encoder: x264 (software) or NVENC H.264 (if the laptop has an Nvidia GPU)
    • Rate Control: CBR
    • Bitrate: 4000–6000 Kbps (use 4000 on slower internet; 6000 if upload is solid)
    • Keyframe Interval: 2 s
    • Profile: high
  3. Open SettingsVideo:
    • Base (Canvas) Resolution: 1920x1080
    • Output (Scaled) Resolution: 1920x1080
    • Common FPS Values: 30

Event-Day Checklist &ZeroWidthSpace;

30 minutes before service:

  • [ ] Camera is on and plugged into power; confirm RTSP feed is live in OBS preview.
  • [ ] Soundboard is on; confirm audio levels are moving in the OBS Audio Mixer.
  • [ ] Steward has created the live event in the portal and shared the watch URL.
  • [ ] Stream key in OBS Settings → Stream is current.
  • [ ] Click Start Streaming in OBS; wait 30 seconds; open the watch URL on a phone to confirm the stream is healthy.

At service start time:

  • [ ] Steward clicks Go Live in the Heritage portal — the Watch Live page goes active for members.
  • [ ] Verify OBS status bar is green (bottom right); yellow = dropping frames; red = disconnected.

After service:

  • [ ] Click Stop Streaming in OBS.
  • [ ] Steward clicks End Stream in the Heritage portal to mark the event ended.
  • [ ] Review the YouTube recording; if it should appear in the Heritage catalog, steward clicks Publish Archive in the portal.

Troubleshooting &ZeroWidthSpace;

SymptomLikely CauseFix
OBS shows red status / "Disconnected"Internet upload droppedCheck router/ethernet; click Stop Streaming then Start Streaming to reconnect.
RTSP camera feed is black or missingRTSP not enabled, IP changed, or wrong pathFirst: confirm RTSP is enabled (Reolink app → Settings → Advanced → Port Settings). Then confirm camera IP. URL must end in /Preview_01_main (not h264Preview_01_main).
Watch Live page shows nothing for membersLive event not yet started in portalSteward must click Go Live in the portal after stream is confirmed healthy.
No audio in the streamWrong audio device selected in OBSOpen Audio Mixer; check the correct input device is active and not muted.
Members report bufferingBitrate too high for upload speedLower bitrate to 2500–3000 Kbps in OBS Settings → Output.
Stream cuts out mid-serviceISP hiccup or WiFi dropoutUse a wired ethernet connection; if on WiFi, move the laptop closer to the router.
YouTube Live stream not startingChannel not verified yetComplete the 24-hour YouTube verification step before the event (see above).
YouTube says "Stream key invalid"Key was reset or entered incorrectlyGet a fresh key from YouTube Studio → Go Live → Stream settings; re-enter in OBS.

Option 2 — Zoom → Custom RTMP (Legacy / Backup) &ZeroWidthSpace;

Use when a meeting is already running on Zoom and you need to simulcast to Heritage Media.

One-time setup: Zoom → Settings → Meeting → In Meeting (Advanced) → enable Allow live streaming meetings → check Custom Live Streaming Service.

On event day: Start Zoom meeting → More (...)Live on Custom Live Streaming Service → enter RTMP URL and stream key from the Heritage portal (requires Cloudflare Stream to be configured — see below) → click Go Live.


Option 3 — Phone Backup (Larix Broadcaster) &ZeroWidthSpace;

Use only when no laptop or camera is available.

  1. Install Larix Broadcaster (iOS or Android — free).
  2. Tap the gear icon → ConnectionsAdd new connection.
  3. Set URL to rtmp://a.rtmp.youtube.com/live2/<STREAM_KEY> (append the YouTube stream key directly to the URL).
  4. Point the phone, tap the red circle to start; tap again to stop.

Limitations: phone-only; no multi-source mixing; no PTZ. Use OBS whenever possible.


Cloudflare Stream (Paid Upgrade) &ZeroWidthSpace;

If the church eventually wants professionally signed playback URLs, automatic cloud recording without relying on YouTube, or higher SLA guarantees, Cloudflare Stream can be enabled by setting two environment variables in the API container:

CLOUDFLARE_ACCOUNT_ID=<your-account-id>
CLOUDFLARE_STREAM_API_TOKEN=<stream-edit-scoped-token>

When both are present, buildLiveProvider() automatically switches from YouTubeEmbedLiveProvider to CloudflareStreamAdapter. No code changes required.

Heritage Community Hub — Internal. Access restricted via Cloudflare Access + Entra ID.