Implementing HLS Streaming from Mobile Devices: iOS and Android

HLS streaming from a mobile device is not trivial. The phone acts as a source: it captures video in segments, uploads them to an HTTP server, and updates the m3u8 playlist. Unlike HLS playback, here it is important to ensure stable capture, fast packaging into TS, and reliable upload. We implement s

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 HLS Streaming from Mobile Devices: iOS and Android
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

HLS streaming from a mobile device is not trivial. The phone acts as a source: it captures video in segments, uploads them to an HTTP server, and updates the m3u8 playlist. Unlike HLS playback, here it is important to ensure stable capture, fast packaging into TS, and reliable upload. We implement such projects turnkey: from protocol selection to CDN integration. Below we break down the technical details.

How HLS-push from a device works

The classic scheme: phone → HTTP PUT/POST TS segments + update .m3u8 → origin HTTP server → CDN → viewers. Alternative: phone → RTMP → media server → HLS for viewers (then HLS is generated by the server, not the phone). Direct HLS-push is supported by: Apple Media Stream Segmenter (macOS only), CloudFront with WebDAV, Akamai Media Services, and a custom nginx with ngx_http_dav_module. We prefer a customizable origin server because it gives full control over latency and segment format.

Comparison of approaches on iOS and Android

Platform Tool Encoder Segment Format Reliability Latency
iOS FFmpegKit (h264_videotoolbox) Hardware H.264 MPEG-TS High 6–30 s (standard) / 2–4 s (LL-HLS via server)
iOS Custom TS segmenter Hardware H.264 MPEG-TS (manual PES/PMT) Medium (packaging errors) Similar
Android FFmpegKit (h264_mediacodec) Hardware H.264 MPEG-TS or fMP4 High 6–30 s
Android MediaMuxer with fMP4 Hardware H.264 fMP4 (HLS v7+) Low (non-standard) Higher due to buffering

Why choose direct HLS-push over RTMP?

RTMP is a protocol with a persistent connection, requiring a relay server (e.g., Nginx-RTMP). This adds an extra hop and increases latency. Direct HLS-push works over HTTP, allowing direct upload of segments to CDN (Akamai, CloudFront). The downside is that it requires smarter client code for TS packaging and uploading. Our experience shows that for live streams with up to 10,000 viewers, HLS-push works more stably and cheaper than RTMP+CDN. Infrastructure savings can reach 30–40%.

How to implement HLS streaming on iOS?

iOS has no built-in HLS encoder for live—only AVAssetExportSession for files. For live HLS we build the pipeline manually:

AVCaptureSession → AVCaptureVideoDataOutput → VideoToolbox (encode H.264) → accumulate NAL units into TS segments of 2–4 seconds → URLSession.uploadTask to server → update m3u8 manifest 

Assembling MPEG-TS from NAL units requires manual packaging of PES packets with PAT/PMT tables. There is no ready-made library in Swift. Therefore, in practice we use FFmpegKit:

-f avfoundation -i 0:0 -c:v h264_videotoolbox -b:v 2M -hls_time 2 -hls_list_size 5 -hls_flags delete_segments -method PUT http://origin/stream/index.m3u8 

h264_videotoolbox is the hardware encoder. The flag -method PUT uploads segments and the playlist to the server. It works with moderate CPU load.

What is Low-Latency HLS and when is it needed?

Standard HLS has 6–30 seconds of latency. LL-HLS reduces it to 2–4 seconds using EXT-X-PART directives (introduced by Apple at WWDC). Generating LL-HLS parts (0.2–0.5 s duration) from a mobile device is extremely difficult without a specialized encoder. A more practical approach: the device pushes RTMP with a small buffer, and the media server (Nimble Streamer, Wowza) with an LL-HLS plugin generates the stream for viewers. This is a proven solution that we recommend if latency is critical.

Comparison of schemes: direct HLS-push vs RTMP+server

Criterion Direct HLS-push RTMP + media server
Latency 6–30 s (standard) 8–35 s (including relay)
Infrastructure Origin HTTP server RTMP server (Nginx-RTMP, Wowza)
Client complexity High (segmentation) Medium (RTMP pushing)
CDN integration Direct (PUT requests) Via relay server
Fault tolerance High (HTTP easier to cache) Medium (RTMP connection must be persistent)

What is included in turnkey HLS streaming implementation

  • Requirements analysis: bitrate, resolution, target audience, CDN.
  • Scheme selection: direct HLS-push or RTMP → server.
  • Client app development: iOS (Swift + FFmpegKit) or Android (Kotlin + FFmpegKit).
  • Origin server setup: nginx with DAV module or third-party CDN (Akamai, CloudFront).
  • Testing: load testing, latency checks, stability under weak signal.
  • Documentation and training: integration description, provisioning profile setup for push notifications and background tasks.

Apple HLS Authoring Specification

More about origin server setupTo set up an origin server, we often use nginx with the ngx_http_dav_module. The configuration allows accepting PUT requests from the device and serving TS segments and the m3u8 playlist. Example location block: /stream { dav_methods PUT; dav_access user:rw group:rw; }

Work process

  1. Analysis: determine protocol, required latency, server storage capacity.
  2. Design: pipeline scheme (capture → encode → segment → upload → manifest).
  3. Implementation: write code in Swift/Kotlin, integrate FFmpegKit.
  4. Testing: on real devices (iPhone 12, Pixel 6) with different bitrates and networks.
  5. Deployment: publish to App Store / Google Play, server setup, monitoring.

Estimated timelines

Implementation via FFmpegKit with upload to origin: from 2 to 3 days. Custom TS segmenter and LL-HLS: from 1 to 2 weeks. Exact timelines depend on integration complexity (number of bitrates, background streaming support).

Typical mistakes and how to avoid them

  • Ignoring Push Notifications: for HLS-push in the background, properly configure Background Modes (iOS) and Foreground Service (Android).
  • Incorrect segment timing: segments longer than 6 seconds increase latency and the risk of viewer-side interruption.
  • Lack of upload error handling: HTTP 4xx/5xx should trigger segment retransmission with exponential backoff.
  • Neglecting PAT/PMT tables: in manual TS assembly, any error makes the stream unreadable for players.

Our experience: 5+ years in mobile streaming and over 10 completed projects. Get a consultation to evaluate your project. Contact us—we will analyze your requirements for free and propose the optimal HLS streaming architecture from a mobile device. We guarantee stable operation and compliance with App Store Review Guidelines (iOS) and Google Play policies.