Your iPhone can be a professional wireless camera for OBS Studio on macOS. The Blackmagic Camera app gives you full manual controls - ISO, shutter angle, Apple Log, focus - streaming over your local network.
Note: This guide is for macOS. While the general approach works on Windows, the specific commands and paths differ.
What you’ll get:
- iPhone camera as an OBS source - use all your plugins and filters
- Full Blackmagic Camera app manual controls (ISO, shutter, Apple Log)
- Keep your entire OBS streaming setup - overlays, alerts, scenes
- Local network only (no cloud, no subscriptions)
- Multiple camera support (add more iPhones as sources)
What you need:
- Mac (this tutorial is macOS-specific)
- iPhone 15 Pro or later (for Apple Log profile in Blackmagic Camera app)
- Blackmagic Camera app (free from App Store)
- OBS Studio 30+
- Docker Desktop (free)
- Same WiFi network for both devices
- 15 minutes for setup
Note: The Blackmagic Camera app works on iPhone XR or later (iOS 17+), but Apple Log is only available on iPhone 15 Pro and later. If you want the professional color grading features, you need an iPhone 15 Pro, 15 Pro Max, or newer Pro models.
Tech stack: Docker + nginx-rtmp + Blackmagic Camera + OBS Studio
Quick Navigation: Setup | iPhone Config | OBS Setup | Troubleshooting
Why This Setup?
The key advantage: your iPhone becomes just another source in OBS. You keep your entire streaming setup - overlays, alerts, browser sources, plugins, filters, scenes. Everything you’ve built in OBS still works.
Other iPhone streaming solutions bypass OBS entirely or require expensive hardware. This gives you a wireless camera that integrates directly into your existing workflow.
The Blackmagic Camera app provides manual controls - ISO, shutter speed, white balance, focus, Apple Log. Professional camera features without professional camera prices.
No monthly fees. No cloud services. No special hardware. Just Docker, a free RTMP server, and your iPhone.
How It Works
┌──────────┐ ┌────────────────┐ ┌─────────────┐
│ │ WiFi │ │ localhost│ │
│ iPhone ├─────────►│ RTMP Server ├─────────►│ OBS Studio │
│ │ publish │ (Docker) │ receive │ │
└──────────┘ └────────────────┘ └─────────────┘
Port 1935 rtmp://localhost
The flow:
- Docker runs nginx-rtmp server on your Mac/PC (port 1935)
- iPhone publishes stream via RTMP over WiFi
- OBS connects to localhost and receives the stream
- You get full camera controls on the iPhone, live video in OBS
Note on latency: RTMP has inherent buffering delay, typically 1-2 seconds with a native arm64 container. This works fine for live streaming to platforms (YouTube/Twitch already have delay), but may not be suitable for applications where sub-second latency is critical.
Setup RTMP Server
Install Docker Desktop
Download Docker Desktop for Mac:
Install and launch it. Wait for the Docker whale icon to appear in your menu bar.
Build the RTMP Server Image
Most pre-built RTMP Docker images are x86/amd64, which means they run through Rosetta emulation on Apple Silicon Macs – adding CPU overhead and latency. Build a native arm64 image instead.
Create a file called Dockerfile:
FROM alpine:latest AS build
RUN apk add --no-cache build-base pcre2-dev openssl-dev zlib-dev git
ARG NGINX_VERSION=1.26.2
ARG RTMP_MODULE_VERSION=1.2.2
RUN wget -q https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
tar xzf nginx-${NGINX_VERSION}.tar.gz && \
git clone --depth 1 -b v${RTMP_MODULE_VERSION} https://github.com/arut/nginx-rtmp-module.git
RUN cd nginx-${NGINX_VERSION} && \
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--add-module=../nginx-rtmp-module \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log && \
make -j$(nproc) && make install
FROM alpine:latest
RUN apk add --no-cache pcre2 openssl zlib
COPY --from=build /usr/local/nginx /usr/local/nginx
COPY --from=build /nginx-rtmp-module/stat.xsl /www/static/stat.xsl
COPY nginx-rtmp.conf /etc/nginx/nginx.conf
RUN mkdir -p /var/log/nginx /tmp/hls
EXPOSE 1935 8080
CMD ["/usr/local/nginx/sbin/nginx"]
Create nginx-rtmp.conf in the same directory:
daemon off;
error_log /dev/stdout info;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4000;
application stream {
live on;
record off;
}
application live {
live on;
record off;
}
}
}
http {
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /www/static;
}
}
}
Build the image (takes about a minute the first time):
docker build -t rtmp-server:arm64 .
Start RTMP Server
docker run -d --name rtmp-server -p 1935:1935 -p 8080:8080 rtmp-server:arm64
What this does:
- Starts the native arm64 RTMP server (~25MB image)
- Listens for streams on port 1935
- Opens stats page on port 8080
- Runs in background (
-dflag)
Verify it’s running:
docker ps
You should see rtmp-server in the list.
Check stats page (optional):
Open browser to http://localhost:8080/stat - shows connected streams and bandwidth.
Configure Firewall
Your iPhone needs to reach port 1935 on your Mac. macOS may not prompt you automatically, so you’ll likely need to add Docker manually:
- System Settings → Network → Firewall
- Click Options
- If Docker or com.docker.backend isn’t listed, click + to add it
- Find Docker Desktop in Applications and add it
- Set to Allow incoming connections
Configure iPhone
Find Your Mac’s IP Address
Run this in Terminal:
ipconfig getifaddr en0
Write this down - mine is 192.168.1.143, yours will be different.
Create XML Configuration File
The Blackmagic Camera app uses XML files to configure custom streaming services. It supports both RTMP and SRT protocols.
Update (May 2026): I’ve documented the complete XML schema reference with all valid elements, attributes, and values. Thanks to Jason for pushing me to dig deeper into 4K streaming support.
Create a file called blackmagic-rtmp.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<streaming>
<service>
<name>Local OBS</name>
<servers>
<server>
<name>Default</name>
<url>rtmp://192.168.1.143:1935/stream</url>
</server>
</servers>
<profiles>
<profile>
<name>Streaming High</name>
<config resolution="HD">
<bitrate>9000000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
<profile>
<name>Streaming Medium</name>
<config resolution="HD">
<bitrate>4500000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
<profile>
<name>Streaming Low</name>
<config resolution="HD">
<bitrate>3000000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
</profiles>
</service>
</streaming>
Replace 192.168.1.143 with YOUR computer’s IP address from the previous step.
The resolution attribute accepts: 4K (3840x2160), HD (1920x1080), 720p (1280x720), or Open Gate (full sensor). Bitrate and audio-bitrate values are in bits per second.
The stream key is entered manually in the Blackmagic Camera app. Set it to iphone – this determines the path OBS listens on (/stream/iphone).
Save this file to iCloud Drive or AirDrop it to your iPhone.
4K Streaming
To stream in 4K (requires iPhone 15 Pro or later), use resolution="4K" with higher bitrate values:
<?xml version="1.0" encoding="UTF-8" ?>
<streaming>
<service>
<name>Local OBS 4K</name>
<servers>
<server>
<name>Default</name>
<url>rtmp://192.168.1.143:1935/stream</url>
</server>
</servers>
<profiles>
<profile>
<name>4K High</name>
<config resolution="4K">
<bitrate>20000000</bitrate>
<audio-bitrate>256000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
<profile>
<name>HD Fallback</name>
<config resolution="HD">
<bitrate>6000000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
</profiles>
</service>
</streaming>
4K requirements: 5GHz WiFi strongly recommended. 4K at 20 Mbps needs ~2.5 MB/s sustained throughput. If you see drops, lower the bitrate to 15000000 or fall back to the HD profile.
SRT Streaming (Alternative to RTMP)
The app also supports SRT (Secure Reliable Transport), which offers lower latency and optional encryption. SRT uses MPEG-TS muxing instead of FLV:
<?xml version="1.0" encoding="UTF-8" ?>
<streaming>
<service>
<name>SRT to OBS</name>
<servers>
<server>
<name>Default</name>
<url>srt://192.168.1.143:9000</url>
</server>
</servers>
<profiles>
<profile>
<name>SRT Low Latency</name>
<low-latency/>
<config resolution="HD">
<bitrate>6000000</bitrate>
<audio-bitrate>128000</audio-bitrate>
<keyframe-interval>2</keyframe-interval>
</config>
</profile>
</profiles>
</service>
</streaming>
SRT also supports authentication via the <credentials> element:
<credentials>
<username>streamer</username>
<password>my-passphrase</password>
</credentials>
For SRT in OBS, use the Media Source with input srt://localhost:9000 and input format mpegts.
Import to Blackmagic Camera App
- Install Blackmagic Camera from the App Store (free)
- Open the app
- Tap Settings/Menu (gear icon)
- Find Streaming or Custom RTMP
- Tap Import Service
- Select the
blackmagic-rtmp.xmlfile - You’ll see “Local OBS” in your services list
Important: Make sure your iPhone is on WiFi, not cellular.
Configure OBS Studio
Add Media Source
- Open OBS Studio
- In Sources panel (bottom), click +
- Select Media Source
- Name it:
iPhone Camera - Click OK
Configure Media Source
Settings:
- ☐ UNCHECK “Local File”
- Input:
rtmp://localhost:1935/stream/iphone - Input Format:
flv(or leave as auto) - Reconnect Delay:
2000ms - Buffering:
1000ms - ☑ Hardware Decoding (if available)
- Click OK
You’ll see a black screen for now - that’s normal. We haven’t started streaming yet.
Start Streaming
On iPhone:
- Open Blackmagic Camera app
- Select “Local OBS” service (from the XML you imported)
- Enter
iphoneas the stream key - Choose “Streaming High” profile (or “Streaming Medium”/“Streaming Low” for lower bitrate)
- Tap the Stream button (top right)
- Button turns red, shows “On Air”
In OBS:
The iPhone video feed should appear instantly (1-2 second delay is normal).
Adjust as needed:
- Resize/crop the source in OBS
- Add to different scenes
- Apply filters (color correction, LUTs, etc.)
Using OBS Features with iPhone Source
The power of this setup is full OBS integration. Your iPhone stream is just another media source - apply any OBS features:
OBS Filters on iPhone Stream:
- Color Correction: Apply LUTs for color grading
- Chroma Key: Green screen with your iPhone
- Crop/Pad: Frame exactly what you want
- Scaling/Aspect Ratio: Match your canvas
- Sharpening: Enhance image quality
Mix with Other Sources:
- Layer iPhone video with screen captures
- Add overlays, alerts, chat widgets
- Picture-in-picture with other cameras
- Transition between iPhone and other scenes
Blackmagic Camera Manual Controls:
- ISO: Full manual control (50-25600)
- Shutter: Shutter angle (45°, 90°, 180°, 360°)
- White Balance: Kelvin or presets
- Focus: Manual focus with peaking
- Apple Log: Flat color profile for maximum dynamic range (requires iPhone 15 Pro+)
Example Workflow:
- Enable Apple Log color profile in Blackmagic Camera app (iPhone 15 Pro+ only)
- Stream to OBS - flat, log footage arrives
- Add Color Correction filter to iPhone source in OBS
- Apply LUT to convert from Apple Log to Rec. 709 or your preferred look
- Add scene with overlays, alerts, chat
- Stream to Twitch/YouTube with full production setup
Advanced Setup
Multiple iPhones
To use multiple iPhones as cameras:
- Import the same XML config to each iPhone
- Set different stream keys in each iPhone’s app UI (e.g.,
iphone1,iphone2) - Add multiple Media Sources in OBS:
- Source 1:
rtmp://localhost:1935/stream/iphone1 - Source 2:
rtmp://localhost:1935/stream/iphone2
- Source 1:
Auto-Start RTMP Server
Create a startup script to launch the server automatically.
macOS/Linux:
Save as start-rtmp.sh:
#!/bin/bash
# Check if Docker is running
if ! docker ps &> /dev/null; then
echo "Starting Docker..."
open -a Docker
sleep 15
fi
# Check if container exists
if docker ps -a | grep -q rtmp-server; then
docker start rtmp-server
else
docker run -d --name rtmp-server -p 1935:1935 -p 8080:8080 rtmp-server:arm64
fi
# Get local IP
LOCAL_IP=$(ipconfig getifaddr en0)
echo "RTMP Server running"
echo "iPhone URL: rtmp://$LOCAL_IP:1935/stream"
echo "OBS URL: rtmp://localhost:1935/stream/iphone"
Make it executable:
chmod +x start-rtmp.sh
Static IP Address
Set a static IP for your Mac/PC in your router’s DHCP settings. Then you won’t need to update the XML file when your IP changes.
Troubleshooting
iPhone Says “Connection Failed”
Check these in order:
Same WiFi network?
- Both devices must be on same WiFi
- Not 5GHz on one and 2.4GHz on the other
- iPhone must be on WiFi, not cellular
Docker running?
docker psShould show
rtmp-serverrunningFirewall blocking?
- macOS: System Settings → Network → Firewall → Options
- Allow Docker incoming connections
IP address correct?
ipconfig getifaddr en0 # Mac ipconfig # WindowsUpdate XML if IP changed
Port 1935 available?
lsof -i :1935Should show Docker listening
Black Screen in OBS
Verify iPhone is streaming:
- Check iPhone shows “On Air”
- Check stats:
http://localhost:8080/stat
Check Media Source settings:
- Right-click source → Properties
- Input:
rtmp://localhost:1935/stream/iphone - Try changing Input Format to
flv
Check RTMP server logs:
docker logs rtmp-serverShould show:
publish: name='iphone' type=liveRestart the source:
- Right-click → Remove
- Add new Media Source with same settings
High Latency / Lag
With the native arm64 image, latency should be 1-2 seconds. If you’re seeing more:
Lower buffering in OBS:
- Media Source Properties → Buffering:
500ms (minimum)
- Media Source Properties → Buffering:
Reduce resolution:
- Stream 1080p instead of 4K if CPU is a concern
Use 5GHz WiFi:
- Both devices on 5GHz band (faster, less interference)
Check you’re running the native image:
- Run
docker inspect rtmp-server --format '{{.Architecture}}' - Should say
arm64, notamd64 - amd64 images run through Rosetta emulation, adding CPU overhead and latency
- Run
Stream Drops / Stutters
Check WiFi signal strength
- Move iPhone/router closer
- Reduce obstacles between devices
Lower bitrate
- 5-6 Mbps is usually stable
- 8+ Mbps needs good WiFi
Close bandwidth-heavy apps
- Stop downloads/uploads
- Pause cloud sync
Restart RTMP server:
docker restart rtmp-server
Can’t Find XML File on iPhone
- Save to iCloud Drive - accessible in Files app
- Or AirDrop from Mac to iPhone
- Or email it to yourself and download on iPhone
Management Commands
Daily Use
Start server:
docker start rtmp-server
Stop server:
docker stop rtmp-server
View logs:
docker logs -f rtmp-server
Check status:
docker ps
Maintenance
Restart server:
docker restart rtmp-server
Remove and rebuild:
docker stop rtmp-server
docker rm rtmp-server
docker run -d --name rtmp-server -p 1935:1935 -p 8080:8080 rtmp-server:arm64
Rebuild image (e.g. after nginx update):
docker stop rtmp-server
docker rm rtmp-server
docker build -t rtmp-server:arm64 .
docker run -d --name rtmp-server -p 1935:1935 -p 8080:8080 rtmp-server:arm64
Use Cases
Live streaming (primary use case):
- Keep your entire OBS setup - overlays, alerts, scenes, plugins
- Stream to Twitch/YouTube/Kick with iPhone as camera source
- Apply OBS filters and effects to iPhone stream in real-time
- Professional look with Apple Log + LUT color grading
- Multiple angles with multiple iPhones as different sources
Content creation benefits:
- Mix iPhone feed with screen capture, game footage, other cameras
- Use StreamFX, Move Transition, and other OBS plugins on iPhone stream
- Chroma key (green screen) with iPhone camera
- Picture-in-picture layouts with iPhone as secondary angle
- All your StreamElements/Streamlabs integrations still work
Not recommended for:
- Real-time monitoring (use HDMI capture instead)
- Live events requiring immediate feedback
- Applications where sub-second latency is critical
Why This Setup?
This is built for live streaming to platforms like YouTube and Twitch. The latency doesn’t matter when you’re already streaming with platform delay. You get professional camera controls without expensive hardware.
The Blackmagic Camera app’s manual controls matter. Auto-exposure shifts constantly. Auto white balance changes colors mid-stream. Manual locks everything down - exactly what you want when streaming.
The Blackmagic Camera app’s Apple Log profile gives 10+ stops of dynamic range. Apply a LUT in OBS, get cinematic look for your streams. Much better than standard iPhone video or cheap webcams.
Performance note: The native arm64 image runs with minimal CPU overhead. Previous versions using pre-built amd64 images through Rosetta emulation showed 400%+ CPU usage at 4K. If you see high CPU, make sure you built the image with docker build -t rtmp-server:arm64 . rather than pulling a pre-built amd64 image.
Security Notes
This setup is local only:
- RTMP server binds to all interfaces (0.0.0.0:1935)
- Only accessible on your local network
- Not exposed to internet (unless you port forward - don’t do this)
- No authentication required (fine for home network)
If you need public access:
- Don’t expose port 1935 directly
- Use VPN instead (Tailscale, Wireguard)
- Or add nginx auth in front
- Or use a proper streaming service
For home/studio use: This setup is fine as-is.
Resources
Download Links:
- Docker Desktop for Mac: https://www.docker.com/products/docker-desktop
- OBS Studio for Mac: https://obsproject.com
- Blackmagic Camera: App Store (search “Blackmagic Camera”)
RTMP Server:
- Built from nginx-rtmp-module: https://github.com/arut/nginx-rtmp-module
- Native arm64 Alpine multi-stage build (~25MB image)
- No Rosetta emulation on Apple Silicon Macs
Blackmagic Camera App:
- Free from Blackmagic Design
- Requires iOS 17+ (iPhone XR or later)
- iPhone 15 Pro or newer required for Apple Log and 4K streaming
- Supports manual controls, ProRes recording, custom LUTs
- Supports both RTMP and SRT streaming protocols
- Valid resolutions: 4K, HD, 720p, Open Gate
- Complete XML schema reference for all config options
Conclusion
This setup turns an iPhone into a professional wireless camera for OBS Studio. Free, local, full manual controls.
15 minutes to set up. Zero recurring costs. Works with multiple iPhones for multi-camera productions.
The Blackmagic Camera app’s manual controls make this worthwhile. Lock ISO, set custom white balance, enable Apple Log profile. Much better than auto-everything webcam apps.
If you’re streaming or recording content, you probably have an iPhone. Why buy a separate camera when this works?
Quick start:
- Install Docker, run RTMP container (1 command)
- Create XML with your computer’s IP
- Import to Blackmagic Camera app
- Add Media Source in OBS
- Start streaming
Using this setup? Questions? Contact me.