my irl streaming setup
written
streaming irl is challenging, even when considered purely from a technical standpoint. connection quality can vary wildly as you walk around and connections can suddenly drop without warning. weather conditions will change suddenly and your setup will be subjected to whatever mother nature throws at it. everything has to be battery powered and any additional weight makes the setup more exhausting to carry around.
and then there's the financial cost. unless you're already a successful streamer, you've likely got a tight budget to work with, and the cost of the necessary equipment adds up fast.
in the interest of helping out other people who are trying to do irl streaming, i've decided i'd cover my (modest, but decent quality) irl streaming setup.
equipment
i made the following assumptions when putting together my streaming setup:
-
streams will take place outdoors and far away from my home
- using a stable WiFi connection is not an option
- the quality of available cellular connections will vary wildly
- weather conditions can vary and streams cannot be postponed because of weather conditions
- streams will last several hours and involve a significant amount of walking
-
the total cost and complexity should be kept as low as
reasonably possible
- items should only be included if necessary to deliver watchable quality or avoid equipment damage
- an iPhone and backpack are already in your possession rather than being an additional purchase
after weeks of iteration and trying different approaches, this is what i now bring to my streaming locations in my weather-resistant backpack:
| category | item | explanation | usage notes |
|---|---|---|---|
| recording equipment | iPhone 15 Pro |
the center of the setup; it's simultaneously the
camera, video encoder, and one of the cellular
uplinks (any iPhone with USB-C will work in this
role, but newer is better). if you plan on filming in hot locations, it may be worth upgrading to the iPhone 17 Pro or newer, as these newer pro models utilize vapor chamber based heat dissipation. |
make sure to remove your phone case before filming to prevent overheating and wipe off the lens before filming to prevent dirt and oil from reducing image quality. |
| DJI Mic 3 (comes with Windscreen) |
a decent-quality wireless mic with good battery
life. however, the windscreens are easy to lose
due to being loosely attached and
neither the receiver nor the unit itself is
waterproof. note: if you decide to get a different microphone, make sure to get a windscreen for it, as windscreens are required for reliably usable outdoor audio. |
i'd recommend mounting it over the sternum using
the included magnets while being mindful of any
clothing that could cause unwanted noises or
reduce speech intelligibility. i personally configure the mic to use +3 dB gain (use higher gain if you talk quietly), "bright" tone, lossless audio RX, and "automatic" adaptive gain control. |
|
| camera mounting | Stuntman Shoulder Strap Mount for Action Cameras + TELESIN 3-Claw Mount Smartphone Magnetic Plate | the least-bad hands-free livestreaming rig i could come up with. it's comfortable enough to wear for extended periods of time, stable enough to be watchable, and you can still view the phone's display. | you will need to spend a while trying out different mounting positions & angles in order to get a good balance between comfort, stability, and display viewability. |
| Spigen MagSafe Selfie Stick Tripod | a relatively lightweight and space-efficient tripod selfie stick, which i've found incredibly useful in a variety of situations. | you will need to position the camera a surprising distance away from your face to get good framing. | |
| batteries and cabling | Nestout USB-C Cable + VANGREE 4-Port USB-C Hub |
this allows you to
place the microphone's receiver inside the
backpack
to protect it from weather conditions. in
addition, this will allow you to fast-charge the
phone while the microphone receiver is
connected. (i'd recommend buying extra cables, as it's worth the additional cost to make sure you have a backup in case one is broken or lost.) |
this USB-C hub requires a USB PD input of at least 30W before it will start charging the connected device. |
| UGREEN Nexode 20000mAh 100W | you will need a power bank, as streaming rapidly drains your phone's battery. this one is affordable, high capacity, and can charge both a phone and a travel router at the same time. | refer to the power bank's manual to check how much power will be delivered to each port in your planned charging configuration. | |
| Anker USB-C PD Cables (3ft 2-pack) | basic reliable USB PD cables which can be ran inside the backpack. | ||
| networking equipment (optional) | NETGEAR Nighthawk M6 Pro |
very capable 5G travel router for the price
(used ones can be found for < $200), but some
people in irl streaming communities have had
issues with them overheating in hot climates. the GL.iNet Mudi 7 may be a better option if you're willing to pay more, but i haven't personally tried it. |
taking the battery out and powering it via USB-C may help prevent overheating. |
| weatherproofing | Gossamer Travel Umbrella + Gossamer Hands-free Umbrella Clamp |
an absolute necessity for preventing water
damage. this setup allows you to use an umbrella
entirely hands-free. (i'd strongly recommend buying extra umbrella clamps, as they're cheap and easy to lose.) |
attaching this hands-free umbrella mount to your backpack takes a lot of practice to get right, as the correct position to attach it in will depend heavily on your backpack's design. |
| lighting (optional) | Acebeam E75 519A | an incredibly bright high-CRI flashlight with a rechargable battery large enough to last an entire stream. | i'd recommend using it on the "medium 2" brightness level, as going brighter significantly reduces battery life. |
however, i'm not being paid by any product manufacturers to recommend specific products. these items are what i actually use.
that's it. (apart from stuff that isn't streaming related)
now we can get into the software side of things.
software
transcoding server
if you're not streaming from somewhere with a stable, high-bandwidth internet connection, you will need a transcoding server.
the role of a transcoding server is to act as an intermediary between your phone and your target streaming platforms. this does increase latency, but it allows you to do the following:
- add disconnect protection, so that the stream doesn't end when your phone's connection drops
- use the SRT protocol, which is much better at handling unreliable connections and changes in available bandwidth than RTMP (which is what most streaming platforms use)
- bond together multiple connections using SRTLA to increase available bandwidth and improve reliability
- stream to multiple platforms without a multiplicative increase in your phone's bandwidth usage
for those new to streaming, i'd recommend Streamrun as your transcoding server due to its ease of use and affordability. however, if you already have a spare computer w/ a stable internet connection and are willing to spend some time tinkering, you can host a transcoding server yourself using OBS (highly recommended that you compile OBS from source with ENABLE_LIBFDK=ON if not using macOS) and datagutt/bbox-receiver. MorrowShore/Prism is useful if you want to multi-stream.
OBS Media Source settings
🚧 i haven't yet tested the listed OBS settings in real-world conditions due to time constraints (i'm currently working on moving away from Streamrun so that i have more control over the technical aspects of my streams). if you encounter any issues from using them, please let me know.
after setting the OBS canvas resolution to the source resolution, add a Media Source with the following properties:
- Local File: off
- Restart playback when source becomes active: on
- Network Buffering: 1 MB
-
Input (w/ bbox-receiver):
srt://localhost:8282/?timeout=5000000&streamid=play/stream/belabox?srtauth=belabox -
Input (w/o bbox-receiver):
srt://0.0.0.0:5000/?timeout=5000000&mode=listener - Input Format: mpegts
- Reconnect Delay: 5s
- Use hardware decoding when available: on
- Show nothing when playback ends: on
- Close file when inactive: off
- YUV Color Range: Auto
- Apply alpha in linear space: off
- Seekable: off
after configuring the Media Source, add a Scaling/Aspect Ratio effect filter on it with the following settings:
- Scale Filtering: Lanczos
- Resolution: Base (Canvas) Resolution
- Undistort center of image when scaling from ultrawide: off
finally, place a "Please wait..." message of your choice underneath the Media Source. this message will become visible during periods when the connection drops.
server encoder settings
to reduce resource usage on your transcoding server and avoid falling afoul of platform TOS (when multi-streaming, offering better quality to some streaming platforms over others can sometimes get you banned from the platforms you're streaming in lower quality to), you'll want to only encode once and send the same stream to multiple platforms.
the recommendations of your target streaming platforms is a good starting point for your encoder settings. some streaming platforms are willing to accept a higher bitrate than recommended by their documentation, and if you're willing to take the risk, you can find out these undocumented bitrate caps on sites like reddit.
as of march 2026, these are the encoder settings i use on my transcoding server when multistreaming to Twitch, Kick, and YouTube:
- Resolution: 1280x720 or 1920x1080 (depending on source resolution)
- Frame rate: 30 fps or 60 fps (depending on source framerate)
- Video codec: H.264 (using x264 encoder)
- Video bitrate: 7.5 mbit/s CBR (twitch's official max bitrate is 6 mbit/s, but the unofficial max bitrate is 8.5 mbit/s)
- Keyframe interval: 2s
- x264 Preset: faster or medium
- H.264 Profile: high
- x264 Tune: zerolatency (optional, see The Quality Cost of Low-Latency Transcoding)
- Audio sample rate: 44.1 kHz or 48 kHz (depending on source sample rate)
- Audio channels: stereo
- Audio codec: AAC (using either libfdk or CoreAudio AAC encoders)
- Audio bitrate: 160 kbit/s
moblin
i use Moblin as my streaming app, as it's open source and has pretty much all of the features that most streamers would want.
these are the settings i'd recommend using in Moblin:
-
Stream:
-
URL (with connection bonding): make sure it starts
with
srtla:// -
URL (without connection bonding): make sure it
starts with
srt:// -
SRT(LA):
- Latency (WiFi): 1000ms
-
Latency (Cellular): 1500ms to 3000ms (higher
latency improves stream stability, lower
allows for more interactive experiences)
- Latency < 1000ms is not recommended
- If stream stability is more important than low latency, use 3000ms
-
Latency (Moving Starlink): 3000ms to 5000ms
(higher latency improves stream stability,
lower allows for more interactive
experiences)
- Latency < 2000ms is not recommended
- If stream stability is more important than low latency, use 5000ms
- When bonding mixed connection types, make sure to choose the latency value based on the connection with the highest required latency
-
Adaptive bitrate: on
- Algorithm: BELABOX
- Minimum bitrate: 50 kbit/s
- Big packets: on
- Implementation: Moblin
-
Video:
- Resolution: 720p to 1080p (depending on applicable data caps)
- FPS: 30 (only use 60 if you're capturing activities with lots of motion)
- Low light boost: on
- Codec: H.265
- Bitrate (1080p60): 15 mbit/s
- Bitrate (1080p30): 10 mbit/s
- Bitrate (720p60): 9 mbit/s
- Bitrate (720p30): 6 mbit/s
- Keyframe interval: 1s (makes recovery from dropped frames quicker)
- B-frames: off
-
Adaptive resolution: on
- Thresholds: Adjust upwards until <300 kbit/s = 160p
- Timecodes: off (unless you need them)
-
Audio:
- Codec: AAC (result in lower generation loss compared to Opus)
- Bitrate (mono): 128 kbit/s
- Bitrate (stereo): 256 kbit/s
- Only use stereo if your content actually benefits from it (this usually isn't the case; dialogue sounds better in mono)
- Background streaming: on
-
URL (with connection bonding): make sure it starts
with
-
Camera:
- Video stabilization: Standard (only use higher stabilization levels if you really need them, as they add additional delay)
- Fixed horizon: off
- Mirror front camera on stream: on
- Color space: Standard RGB (streaming in HDR isn't supported by most streaming platforms, and will require additional configuration not mentioned here)
-
Audio:
- Mic: [Select your recording microphone]
- Input gain (if applicable): As high as you can go without risking audio clipping in loud situations. If your mic has an onboard gain setting, set this to the maximum and adjust the gain on the mic itself.
- Output gain: 0 dB (unless absolutely necessary)
- Bluetooth output only: on
- Prefer stereo mic: off
-
Debug:
- Builtin audio and video delay: 0 (unless absolutely necessary)
don't forget to:
-
configure your overlays, scenes, and widgets as you see fit
- less is more; nobody cares about your bitrate.
- you should probably make most widgets a bit smaller than their default size in order to avoid covering up too much of the actual video feed. however, you should always make sure they're still legible at 360p
- configure all of the streaming platforms you stream to within Moblin (lets you read and moderate your chat within the app)
-
configure TTS if you plan on mounting the phone in a way
which prevents you from comfortably reading the onscreen
chat
- most iOS VoiceOver users seem to prefer the one of the following English (US) voices: Alex, Samantha, Samantha (Enhanced), Ava, Ava (Enhanced)
- i personally like the Zoe (Premium) voice
- you will also want to increase the TTS speed a lot, especially if you have a fairly active chat
- test everything end-to-end (so, do a test stream to your streaming server using all of your equipment) before going live!
- setup moblin's built-in browser so that you can do common tasks (reading/writing notes, starting/stopping your streaming server, changing the stream's metadata) without leaving the app