Moblin - IRL Streaming
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/nt3UwHqbMM
Github: https://github.com/eerimoq/moblin
TestFlight: https://testflight.apple.com/join/PDpxEaGh
Features
Main app
- Stream using RTMP, RTMPS, SRT or SRTLA to any platform that supports
them.
- H.264/AVC and H.265/HEVC video codecs.
- Up to 4K resolution and 60 FPS.
- SRTLA.
- Can use one cellular, one WiFi and multiple Ethernet connections
simultaneously. Often called bonding.
- Upload statistics per active connection.
- Twitch integration.
- Number of viewers.
- Chat.
- Announcements.
- /me styling.
- Optional login.
- Follow, subscribe and raid alerts.
- Start ads.
- Hype train.
- Cheered bits in chat.
- Kick integration.
- YouTube integration.
- AfreecaTv 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.
- Timer.
- Country.
- City.
- Subtitles. Speech to text.
- Local time.
- Speed.
- Altitude.
- Distance. Reset manually.
- Debug information.
- Muted.
- Checkboxes.
- Ratings.
- Date.
- Browser widget. Show a web page on stream.
- Map widget with location.
- QR code widget.
- Scene widget.
- Back or front camera.
- Front camera mirrored on screen for natural experience.
- Back, front, top, bottom or external mic.
- Automatically changes to external mic when connected.
- 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.
- RTMP server/ingest as video source.
- SRT(LA) server/ingest as video source.
- 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 recoring state.
- Change scene.
- Start and stop the stream.
- Snapshot.
- Audio levels.
- Set audio sync.
- Mute/unmute audio inputs.
- Make phone screen black by pressing a button.
- 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.
- Seipa.
- Noise reduction.
- Random. A single effect that applies a random effect.
- Triple. Show center of image three times. Experimental.
- 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.
- 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.
- 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.
- …
- 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).
- Optionally remote control the streamer’s Moblin app over the network.
- Shows basic status information.
- Change scene.
- Change mic.
- Change bitrate.
- Change zoom.
- Show logs.
- Torch.
- Mute audio.
- 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.
- Send low battery warning to chat periodically.
- Screen capture as video source.
- Basic video player as video source and mic.
- DJI camera Bluetooth controller.
- Automatically start DJI camera live stream.
- Tested with OA4, OA3 and OP3.
- 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.
- Take snapshots.
- And optionally automatically upload to your Discord server.
Apple Watch companion app
- Stream preview.
- Show audio level.
- Show bitrate.
- Show iPhone thermal state.
- Chat.
- Control.
- Zoom using digital crown and presets.
- Switch scene.
- Go live.
- Record.
- Mute.
- Skip current TTS message.
- Watch face complication.
Import settings using moblin:// (custom URL)
Examples
New stream
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"
}
}
]
}
Quick button settings
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
}
]
}
}
Specification
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. Some types are defined in
Settings.swift.
Similar software
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 an empty configuration file.
touch Config.xcconfig
-
Open the Moblin project in Xcode. Wait for the dependencies to load.
open Moblin.xcodeproj
-
Press Command + B
to build Moblin.
-
Click on the code signing error and add your account. No Apple
developer account is needed.
-
Change the Bundle Identifier
to anything you want (i.e. com.whoami.Moblin
).
-
Remove In-App Purchase
and Access Wi-Fi Information
by clicking
their trash cans.
-
Build again. Hopefully successfully.
-
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!