
A free iOS app for IRL streaming. Mainly targeting Twitch, but can
stream to YouTube, Kick, Facebook
and OBS Studio as well (and probably more).
Discord: https://discord.gg/kh3KMng4JV
Github: https://github.com/eerimoq/moblin
TestFlight: https://testflight.apple.com/join/PDpxEaGh
Privacy policy: https://eerimoq.github.io/moblin/privacy-policy/en.html
- Stream using RTMP, RTMPS, SRT, SRTLA, RIST or WHIP (WebRTC) to any
platform that supports them.
- Mobcam. Use the phone as a low latency webcam over USB.
- Streams to a computer, for example as a camera source in OBS
Studio using the
Mobcam OBS Plugin.
- H.264/AVC and H.265/HEVC video codecs.
- Up to 4K resolution and 60 FPS. Use 120 FPS at your own risk.
- SRTLA and RIST.
- Can use one cellular, one WiFi and multiple Ethernet connections
simultaneously. Often called bonding.
- Upload statistics per active connection.
- Connection priorities.
- Twitch integration.
- Number of viewers.
- Chat.
- Announcements.
- /me styling.
- Ban.
- Timeout.
- Delete message.
- Gray out or hide deleted messages.
- Show reply.
- Optional login.
- Follow, subscribe and raid alerts.
- Set stream title and category.
- Start ads.
- Hype train.
- Cheered bits in chat.
- Stream markers.
- Kick integration.
- Number of viewers.
- Subscription, raid, and kicks.
- Level badges.
- Chat.
- Set stream title and category.
- Ban.
- Timeout.
- Delete message.
- Gray out or hide deleted messages.
- Show reply.
- YouTube integration.
- Number of viewers.
- Chat.
- Multiple video ids at once.
- Moderator support.
- Optional login.
- Create, end and delete streams.
- SOOP integration.
- Open Streaming Platform integration.
- Basic scenes.
- Alerts widget.
- Trigged by Twitch events and chat messages.
- Image widget. Show an image on stream.
- Text widget.
- Any text.
- Weather conditions.
- Temperature.
- Wind.
- Timer.
- Stopwatch.
- Lap times.
- Country.
- City, area, neighborhood and state.
- Subtitles. Speech to text.
- Local time.
- Speed and average speed.
- Altitude, ascent, descent and slope.
- Distance. Reset manually.
- Heart rate, step count and cycling power.
- Bitrate, resolution and FPS.
- Latest follower and subscriber.
- Debug information.
- Muted.
- Checkboxes.
- Ratings.
- Date.
- G-force.
- Configurable distance, altitude, temperature and speed units.
- ...
- Browser widget. Show a web page on stream.
- Optional style sheet.
- Optional JavaScript API access.
- Map widget with location.
- QR code widget.
- Scene widget.
- Video source widget (for multi cam).
- Snapshot widget.
- Chat widget.
- Chat emote combo widget.
- Slideshow widget.
- VTuber and PNGTuber widgets.
- Wheel of luck widget.
- Bingo card widget.
- Crop widget.
- Pomodoro timer widget.
- Scoreboard widget.
- Padel.
- Golf, with optional full scorecard.
- Basketball.
- Hockey.
- Football.
- Tennis.
- Volleyball.
- Generic.
- ...
- Core Image or MetalPetal graphics processing.
- ...
- Back, front or multi camera.
- Front camera mirrored on screen for natural experience.
- Low energy triple and dual cameras.
- Back, front, top, bottom or external mic.
- Automatically changes to external mic when connected.
- Configurable mic delay.
- Video stabilization.
- Zoom.
- Pinch-to-zoom.
- Configurable presets.
- Back camera lens selection.
- Record to disk (MP4-file).
- Configurable bitrate, video codec and key frame interval.
- Ingests.
- RTMP, SRT(LA), RIST and WHIP (WebRTC) servers.
- SRT, RTSP and WHEP (WebRTC) clients, pulling streams from a server.
- Localization. Supports many languages, for example English, French,
German, Spanish, Polish, Chinese (Simplified) and Swedish.
- Tap screen for manual focus.
- Return to auto focus with long press.
- Stream connection status and uptime.
- OBS WebSocket (remote control)
- See current scene, streaming state and recording state.
- Change scene.
- Start and stop the stream.
- Snapshot.
- Audio levels.
- Set audio sync.
- Mute/unmute audio inputs.
- Edit media source input.
- Make phone screen black by pressing a button.
- Stealth mode. Show a custom image instead of the app.
- Supports UVC (USB-C) cameras on iPad.
- Basic support for Mac.
- Video effects.
- Grayscale.
- Movie. Paint top and bottom of 16:9 video black to look like
2.35:1.
- 4:3. Paint left and right of 16:9 video black to look like 4:3.
- Sepia.
- Noise reduction.
- Pixellate.
- CRT.
- Whirlpool and pinch.
- Twin. Show center of image two times.
- Triple. Show center of image three times. Experimental.
- Blur faces, blur text and blur background.
- Beauty filter.
- Face effects. Moblin in mouth, glasses and sparkle.
- Remove background.
- Mask and shape.
- Fixed horizon.
- Anamorphic lens.
- 360 camera dewarp.
- Camera man. Automatic panning and zooming.
- Random. A single effect that applies a random effect.
- ...
- Alerts.
- Optional text to speech (TTS).
- Text message colors, font weight, font design and more.
- Select sound and image per alert.
- Image placement relative to your face or scene.
- Chat.
- Alerts filter.
- Send messages to Twitch.
- Highlight important events.
- Optional text to speech (TTS).
- Optionally subscribers only.
- Many voices.
- Detect language per message.
- Optionally use TTS.Monster.
- Colors, background, border and bold.
- Twitch, Kick, BTTV, FFZ and 7TV emotes.
- Optionally animated emotes.
- Optionally remove old messages.
- Width and height.
- Optional message timestamp.
- Predefined messages.
- Moderation.
- Color spaces (for devices that supports them).
- Bundled and custom 3D LUT effects.
- Especially useful when using Apple Log.
- Battery indicator.
- Charging icon.
- Optionally with percentage.
- Web browser.
- Only visible to the streamer.
- Game controllers for remote control.
- Zoom in and out.
- Change scene.
- Torch.
- Mute.
- Pan and tilt gimbal with thumb sticks.
- ...
- Stream Deck support.
- Keyboard shortcuts.
- Selfie stick button support.
- Moblink for more connection.
- Low light boost.
- Cosmetics.
- Select Moblin icon to show in app and on home screen.
- Optionally purchase additional Moblin icons to support developers.
- Configure stream resolution, FPS, video codec, bitrate and more.
- Configurable bitrate presets.
- Adaptive bitrate for SRT(LA), RIST and RTMP.
- Macros. Run a sequence of actions, optionally repeatedly.
- Enable/disable scene widgets, switch scene, delay and more.
- Optionally remote control the streamer's Moblin app over the network.
- Shows basic status information.
- Change scene.
- Change mic.
- Change bitrate.
- Change zoom.
- Control gimbal.
- Update scoreboards.
- Save and play replays.
- Import settings.
- Show logs.
- Video preview.
- ...
- Web remote control. Control the streamer's Moblin app from a web
browser.
- Torch.
- Mute audio.
- Talkback.
- Deep link settings (moblin://).
- Including a deep link creator for service providers.
- Landscape.
- Both 0 and 180 degrees orientation. Video always with gravity down
(never upside down).
- Portrait.
- UI in portrait, but video in landscape. To be improved.
- Background streaming.
- With audio.
- Video will be a freezed frame as video cannot be captured in background.
- Simple poll.
- Chat bot.
- Commands.
- Turn chat text to speech on an off.
- Fix OBS.
- Map zoom out.
- Trigger alerts.
- Fax.
- Turn filters on and off.
- Let chat take snapshot.
- Change scene.
- Set stream title and category.
- Ask AI.
- Move gimbal to preset.
- Run macros.
- Control Apple Music.
- Spin the wheel of luck.
- ...
- Send low battery warning to chat periodically.
- Screen capture as video source.
- Basic video player as video source and mic.
- Apple Music control. Experimental.
- DJI camera Bluetooth controller.
- Automatically start DJI camera live stream.
- Tested with OA4, OA3, OA6, OP3 and Pocket 4.
- GoPro QR-code creator.
- Show grid for easier positioning.
- Camera settings (on some cameras).
- Exposure bias.
- White balance.
- ISO.
- Focus.
- Cat printer.
- Print chat and faxes (images).
- Optional meow sound when printing.
- Black Shark cooler support.
- Take snapshots.
- And optionally automatically upload to your Discord server.
- Photo shoot. Take clean pictures periodically.
- Save and play replays.
- Including instant replay.
- Tesla vehicle status and control.
- Support for DockKit gimbals.
- Presets, tracking and zoom.
- Cycling power monitor.
- Heart rate monitor.
- Workout. Walking, running and cycling.
- Show video on external display. Aka clean HDMI out.
- Basic VTuber and PNGTuber.
- Auto scene switcher.
- Disconnect protection. Automatically switch to a fallback scene when
the video source disconnects.
- Navigation. Walking, cycling and driving directions.
- Only visible to the streamer.
- RTMP(S) multi streaming.
- Preview stream. Low bitrate copy of the stream.
Apple Watch companion app
- Stream preview.
- Show audio level.
- Show bitrate.
- Show number of viewers.
- Show iPhone thermal state.
- Chat.
- Control.
- Zoom using digital crown and presets.
- Switch scene.
- Go live.
- Record.
- Mute.
- Skip current TTS message.
- Instant replay and save replay.
- Create stream marker.
- Start and stop workout.
- Scoreboards.
- Watch face complication.
Import settings using moblin:// (custom URL)
An example creating a new stream is
moblin://?{"streams":[{"name":"BELABOX%20UK","url":"srtla://uk.srt.belabox.net:5000?streamid=9812098rh9hf8942hid","video":{"codec":"H.265/HEVC"},"obs":{"webSocketUrl":"ws://123.22.32.112:5465","webSocketPassword":"foobar"}}]}
where the URL decoded pretty printed JSON blob is
{
"streams": [
{
"name": "BELABOX UK",
"url": "srtla://uk.srt.belabox.net:5000?streamid=9812098rh9hf8942hid",
"video": {
"codec": "H.265/HEVC"
},
"obs": {
"webSocketUrl": "ws://123.22.32.112:5465",
"webSocketPassword": "foobar"
}
}
]
}
An example with only two quick buttons enabled is
moblin://?{"quickButtons":{"twoColumns":false,"showName":true,"enableScroll":true,"disableAllButtons":true,"buttons":[{"type":"Mute","enabled":true},{"type":"Draw","enabled":true}]}}
where the URL decoded pretty printed JSON blob is
{
"quickButtons": {
"twoColumns": false,
"showName": true,
"enableScroll": true,
"disableAllButtons": true,
"buttons": [
{
"type": "Mute",
"enabled": true
},
{
"type": "Draw",
"enabled": true
}
]
}
}
Format: moblin://?<URL encoded JSON blob>
The MoblinSettingsUrl class in
MoblinSettingsUrl.swift defines
the JSON blob format. Class members are JSON object keys. Members with
? after the type are optional.
Browser widget JavaScript API
Get access to various data in your Browser widget.
NOTE: You must enable Settings -> Scenes -> My browser widget -> Moblin access to give the website access to the Browser widget JavaScript
API.
Add this code to your website to receive chat messages with prefix !.
moblin.subscribe({ chat: { prefix: "!" } });
moblin.onmessage = (message) => {
if (message.chat !== undefined) {
console.log(message.chat.message);
}
};
Add this code to your website to receive the speech to text
transcript. You must enable Settings -> Scenes -> My browser widget -> Speech to text as well. text is a sliding window of the latest
transcript and position is the offset of its first character,
counted from when speech to text started. The transcript is cleared
after a few seconds of silence.
moblin.subscribe({ speechToText: {} });
moblin.onmessage = (message) => {
if (message.speechToText !== undefined) {
console.log(message.speechToText.position, message.speechToText.text);
}
if (message.speechToTextClear !== undefined) {
console.log("Transcript cleared");
}
};
Topics to subscribe to are defined by SubscribeTopic in
BrowserEffectServer.swift.
Messages passed to onmessage are defined by Message in
BrowserEffectServer.swift.
Development environment setup
Roughly the steps to setup Moblin's developement environment.
-
Install Xcode with iOS and MacOS simulators on your Mac.
-
Open a terminal.
-
Clone Moblin.
git clone https://github.com/eerimoq/moblin.git
-
Enter Moblins repository.
cd moblin
-
Create Config/User.xcconfig. This file contains user specific
settings and is not under version control.
cp User.template.xcconfig Config/User.xcconfig
-
Open the Moblin project in Xcode. Wait for the dependencies to load.
open Moblin.xcodeproj
-
Modify Config/User.xcconfig in Xcode.
-
Press Command + B to build Moblin.
-
Enable developer mode in your iPhone/iPad.
-
Select you iPhone/iPad as Run Destination in Xcode (at the top in
the middle).
-
Build and run by pressing Command + R.
-
Done!
Styling, linting and more
-
Install tools.
brew install swiftlint
brew install swiftformat
brew install codespell
brew install oxfmt
brew install oxlint
brew install python3.14
python3.14 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -U
-
Perform styling, linting and more.
source .venv/bin/activate # Once per shell is enough.
make style lint spell-check
-
Done!
Web remote control frontend
It's built with SolidJS.
-
Install dependencies.
make web-remote-control-frontend-prepare
-
Modify files in WebRemoteControlFrontend/.
-
Build to update files in Moblin/RemoteControl/Web/*.
make web-remote-control-frontend-build
-
Done!