StreamPortal is a free, open-source iOS app for multi-platform live streaming. Stream simultaneously to YouTube Live, Twitch, and Kick with both camera and screen sharing capabilities.
- Camera Live: Direct camera and microphone streaming for vlogs, events, and real-life content
- Screen Share Live: Full screen or app-specific recording with internal audio capture
- Stream to multiple platforms simultaneously
- Supported platforms: YouTube Live, Twitch, Kick
- Real-time connection monitoring and auto-reconnection
- Multiple video quality presets (480p to 1440p)
- Adaptive bitrate streaming
- Secure API key storage using iOS Keychain
- Connection testing and validation
- Live streaming statistics (uptime, bitrate, dropped frames)
- Per-platform connection status monitoring
- Performance metrics and health indicators
- iOS 15.0 or later
- iPhone or iPad with camera and microphone
- Active internet connection
- Stream keys from supported platforms
- Xcode 14.0 or later
- iOS 15.0+ deployment target
- Apple Developer account (for device testing)
-
Clone the repository:
git clone https://github.com/streamportal/ios.git cd streamportal-ios -
Open the project in Xcode:
open StreamPortal.xcodeproj
-
Add HaishinKit dependency via Swift Package Manager:
- In Xcode, go to File β Add Package Dependencies
- Enter URL:
https://github.com/shogo4405/HaishinKit.swift - Select the latest version and add to your target
-
Configure signing and capabilities:
- Select your development team
- Ensure the following capabilities are enabled:
- Camera usage
- Microphone usage
- ReplayKit for screen recording
-
Build and run on your device
- Go to YouTube Studio
- Navigate to "Go Live" β "Stream"
- Copy your Stream Key
- In StreamPortal Settings, add the key to YouTube Live configuration
- Go to Twitch Creator Dashboard
- Navigate to Settings β Stream
- Copy your Primary Stream Key
- In StreamPortal Settings, add the key to Twitch configuration
- Go to Kick Creator Dashboard
- Navigate to Settings β Stream
- Copy your Stream Key
- In StreamPortal Settings, add the key to Kick configuration
StreamPortal requires the following permissions:
- Camera: For Camera Live mode video capture
- Microphone: For audio capture in both modes
- Screen Recording: For Screen Share Live mode
Grant permissions when prompted or via iOS Settings β Privacy & Security.
Choose video quality based on your internet connection:
- Low (480p): 1 Mbps upload speed required
- Medium (720p): 2.5 Mbps upload speed required
- High (1080p): 4 Mbps upload speed required
- Ultra (1440p): 6 Mbps upload speed required
- Select "Camera Live" mode
- Choose front or rear camera
- Configure your streaming platforms in Settings
- Tap "Start Streaming"
Perfect for:
- Vlogs and personal content
- Live events and presentations
- Gaming with face cam
- Outdoor activities and travel
- Select "Screen Share Live" mode
- Configure your streaming platforms in Settings
- Tap "Start Streaming"
- Grant screen recording permission when prompted
Perfect for:
- App demonstrations
- Mobile gaming streams
- Video calls and social apps (Ome.tv, Monkey.app)
- Educational content and tutorials
- Configure multiple platforms in Settings
- Enable the platforms you want to stream to
- Start streaming - all enabled platforms will receive the stream simultaneously
- StreamingService: Main service coordinating all streaming operations
- CameraCaptureService: AVFoundation-based camera and microphone capture
- ScreenCaptureService: ReplayKit-based screen recording and capture
- KeychainManager: Secure storage for API keys and sensitive data
- ConnectionTestService: Network connectivity testing and validation
- PermissionManager: iOS permissions handling and status monitoring
- StreamingPlatform: Platform configuration and RTMP settings
- StreamingConfiguration: Global app settings and capture mode
- StreamingStats: Real-time performance metrics and statistics
- ContentView: Main interface with mode selection and controls
- SettingsView: Platform configuration and app preferences
- PreviewView: Live camera/screen preview with overlay controls
- StatsDisplayView: Real-time streaming statistics
StreamPortal uses the HaishinKit library for RTMP streaming:
- YouTube Live:
rtmp://a.rtmp.youtube.com/live2/{stream_key} - Twitch:
rtmp://live.twitch.tv/app/{stream_key} - Kick:
rtmp://ingest.kick.com/app/{stream_key}
- Codec: H.264 (AVC)
- Container: FLV (for RTMP)
- Audio: AAC encoding
- Adaptive bitrate: Based on network conditions
- Stream keys stored in iOS Keychain with
kSecAttrAccessibleWhenUnlockedThisDeviceOnly - No telemetry or analytics collection
- All processing done locally on device
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
- Follow Swift API Design Guidelines
- Use SwiftUI for UI components
- Add documentation comments for public APIs
- Maintain iOS 15+ compatibility
StreamPortal is released under the MIT License. See LICENSE for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki
- Stream recording and local saving
- Custom RTMP endpoint support
- Stream overlays and graphics
- Multi-language support
- iPad-optimized interface
- Stream scheduling and automation
- Facebook Live integration
- Discord Go Live support
- Custom RTMP servers
- HLS streaming support
- HaishinKit for RTMP streaming capabilities
- Apple's AVFoundation and ReplayKit frameworks
- The open-source iOS development community
Note: StreamPortal is not affiliated with YouTube, Twitch, Kick, or any streaming platforms. All trademarks are property of their respective owners.