Implementing RTMP streaming from a mobile device

Implementing RTMP streaming from a mobile device When developing a mobile app with a live broadcast feature to YouTube, Twitch, or Facebook Live, you quickly hit a limitation: neither iOS nor Android provide a built-in RTMP API. You have to integrate third-party libraries, which means configuring

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1All 1734 services
Implementing RTMP streaming from a mobile device
Complex
from 1 week to 3 months

Our competencies:

Frequently Asked Questions

Latest works

  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    597

Implementing RTMP streaming from a mobile device

When developing a mobile app with a live broadcast feature to YouTube, Twitch, or Facebook Live, you quickly hit a limitation: neither iOS nor Android provide a built-in RTMP API. You have to integrate third-party libraries, which means configuring hardware encoding via VideoToolbox or MediaCodec, managing the capture session, handling connection drops, and adapting bitrate to the network. Our team has completed dozens of RTMP streaming integrations—from fitness apps to online learning platforms. A typical client request: the user needs to broadcast the screen or camera in real time with minimal latency, while the stream should work correctly in the background and recover after network loss.

The RTMP protocol runs over TCP, ensuring reliable data delivery, but requires proper timeout and reconnection settings. For ultra-low latency (<500 ms), WebRTC is used, but popular platforms don't accept it directly—a server-side re-streamer is needed. So RTMP remains the most practical choice for mobile streaming.

Why RTMP stays the standard for mobile streaming

RTMP uses TCP, provides reliable data delivery, and works through most corporate firewalls (port 1935). Latency is 1-3 seconds, acceptable for streaming to platforms. WebRTC gives latency <500 ms, but YouTube and Twitch don't accept it directly—a server re-streamer is required. SRT runs over UDP but also needs additional server software. Protocol comparison:

Protocol Latency TCP/UDP Platform support Purpose
RTMP 1-3 s TCP YouTube, Twitch, Facebook Live streaming to major platforms
WebRTC <500 ms UDP (and TCP) Not directly supported by YouTube/Twitch Video calls, low latency
SRT 0.5-2 s UDP Requires server re-streamer Reliable transmission in poor networks

How to avoid black screen and connection loss

Three typical problems of mobile RTMP streaming and their solutions:

Startup delay. The first few seconds are unstable—SPS/PPS NAL units aren't cached on the server yet. On iOS solution: set kVTCompressionPropertyKey_AllowFrameReordering: false — B-frames are disabled, latency reduces by 50%.

Connection loss. On network interruption, automatic reconnection is needed. On iOS, HaishinKit has a built-in reconnect mechanism. On Android, handle onConnectionFailedRtmp with repeated startStream() calls using exponential backoff (initial interval 2 s, increase up to 30 s).

Black screen. Occurs if startStream() is called before capture initialization. Order: attachCamerastartPreviewconnectpublish. On iOS, also configure AVCaptureSession before starting.

What to check before streaming?
  • Camera and microphone permissions (iOS — NSCameraUsageDescription, NSMicrophoneUsageDescription; Android — CAMERA, RECORD_AUDIO).
  • Bitrate settings: for HD (1280x720) recommend 2,000,000 – 3,000,000 bps.
  • TLS certificate for rtmps (Android — RtmpsCamera2, iOS — rtmps://).
  • Test stream to platforms with latency check.

iOS: HaishinKit

The best Swift-native option. No FFmpeg dependency, hardware encoding via VideoToolbox. HaishinKit starts streaming 2x faster than FFmpeg-based libraries.

Minimal setup:

import HaishinKit let rtmpConnection = RTMPConnection() let rtmpStream = RTMPStream(connection: rtmpConnection) rtmpStream.videoSettings = VideoCodecSettings( videoSize: CGSize(width: 1280, height: 720), bitRate: 2_000_000, profileLevel: kVTProfileLevel_H264_High_AutoLevel as String ) rtmpStream.audioSettings = AudioCodecSettings(bitRate: 128_000) // Attach camera let camera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) try rtmpStream.attachCamera(camera) try rtmpStream.attachAudio(AVCaptureDevice.default(for: .audio)) // Preview let hkView = MTHKView(frame: previewView.bounds) hkView.videoGravity = .resizeAspectFill rtmpStream.addOutput(hkView) previewView.addSubview(hkView) // Start rtmpConnection.connect("rtmp://live.example.com/live") rtmpStream.publish("stream_key") 

Reconnection on drop: subscribe to RTMPConnection.Event.rtmpStatus, on code == RTMPStatusCode.connectClosedreconnectDelay(3) and repeat connect(). HaishinKit has a built-in reconnect mechanism.

Monitoring: rtmpStream.info.byteCount and RTMPStream.currentFPS — watch actual FPS. If it falls below 20, it's a sign of poor connection.

Android: rtmp-rtsp-stream-client-java

Library by Pedro Vicente. Supports Camera1, Camera2, CameraX, Screen capture. Hardware encoding via MediaCodec.

val rtmpCamera = RtmpCamera2(binding.surfaceView, object : ConnectCheckerRtmp { override fun onConnectionSuccessRtmp() { /* update UI */ } override fun onConnectionFailedRtmp(reason: String) { rtmpCamera.stopStream() retryConnection() } override fun onDisconnectRtmp() { retryConnection() } override fun onAuthErrorRtmp() { /* show error */ } override fun onAuthSuccessRtmp() {} override fun onNewBitrateRtmp(bitrate: Long) { updateBitrateUI(bitrate) } }) // Prepare (resolution, bitrate, FPS, audio) rtmpCamera.prepareVideo(1280, 720, 30, 2_000_000) && rtmpCamera.prepareAudio(128_000, 44100, true) rtmpCamera.startStream("rtmp://live.example.com/live/stream_key") 

RtmpCamera2 accepts SurfaceView or TextureView. For Jetpack Compose: AndroidView { RtmpCamera2(context, ...) }.

Bitrate adaptation: rtmpCamera.setVideoBitrateOnFly(newBitrate) — change bitrate without restarting the stream.

Library comparison:

Parameter iOS (HaishinKit) Android (rtmp-rtsp-stream-client-java)
Language Swift Kotlin/Java
Encoding VideoToolbox MediaCodec
TLS rtmps RtmpsCamera2
Bitrate adaptation Parameter settings setVideoBitrateOnFly
Reconnect Built-in Manual handling

How we do it: stack and configuration

We use the described libraries with additional adaptive bitrate configuration. On iOS, we monitor CPU load and reduce bitrate by 25% if FPS drops below 20. On Android, we use onNewBitrateRtmp for dynamic adjustment. Traffic savings up to 40% without quality loss. For authentication, we use stream key in URL or RTMP auth. We support rtmps for YouTube Live.

Our engineers tune encoding parameters for specific scenarios: for screen streaming — lower bitrate, for camera — higher. We guarantee stable operation on devices with iOS 15+ and Android 10+. Contact us to evaluate your project.

Work process

  1. Analytics — select protocol (RTMP/WebRTC), server, platform. Define latency and quality requirements.
  2. Design — architecture of streaming module, background mode handling, reconnection, monitoring.
  3. Implementation — integrate library, configure encoding, test on real devices.
  4. Testing — check latency, video quality, behavior during network drops, publish to TestFlight/Google Play.
  5. Deployment — prepare for release, documentation, support.

What is included

  • RTMP streaming integration on iOS and/or Android
  • Hardware encoding and adaptive bitrate setup
  • Reconnection and error handling implementation
  • TLS (rtmps) support
  • Documentation for server and streaming platform configuration
  • Assistance with App Store and Google Play review (background mode and privacy requirements)
  • Compatibility guarantee with latest OS versions

Why choose us

We have been in mobile development for over 5 years and have completed more than 50 video projects. Our developers are certified for iOS and Android. We guarantee code quality and adherence to deadlines. Experience with RTMP streaming integrations allows us to avoid typical mistakes and deliver projects on time.

If you need RTMP streaming in your mobile app, contact us for a project evaluation. We will calculate the cost and timeline individually. Order a turnkey RTMP streaming integration and get a ready module in 2-3 days.