Реалізація HLS-стримінгу з мобільного пристрою

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація HLS-стримінгу з мобільного пристрою
Складний
від 1 тижня до 3 місяців
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація HLS-стримінга з мобільного пристрою

HLS-стрім з мобільного — це не те ж саме що відтворення HLS. Тут телефон виступає джерелом: записує відео сегментами, загружає їх на сервер і оновлює m3u8-плейлист. Це менш поширений сценарій, ніж RTMP-стрім, але потрібний для інтеграцій з CDN-сервісами, які приймають origin-push через HTTP.

Як працює HLS-push з пристрою

Класична схема: телефон → HTTP PUT/POST TS-сегментів + оновлення .m3u8 → origin HTTP сервер → CDN → глядачі. Альтернатива: телефон → RTMP → медіа-сервер → HLS для глядачів (тоді HLS генерує сервер, не телефон).

Прямий HLS-push з пристрою підтримують: Apple Media Stream Segmenter (тільки macOS), CloudFront з WebDAV, Akamai Media Services, власний nginx з ngx_http_dav_module.

iOS: ReplayKit + HLS Segmenter

На iOS немає вбудованого HLS-енкодера для live-стримінга — тільки AVAssetExportSession для файлів. Для live HLS з пристрою будуємо pipeline вручну:

AVCaptureSessionAVCaptureVideoDataOutputVideoToolbox (кодування H.264) → накопичуємо NAL units у TS-сегменти по 2–4 секунди → URLSession.uploadTask на сервер → оновлюємо m3u8 маніфест.

Складання MPEG-TS з NAL units — ручна упаковка PES пакетів з PAT/PMT таблицями. Готової бібліотеки на Swift немає. Тому на практиці:

Варіант 1: FFmpegKit. FFmpegKit.executeAsync з HLS output:

-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 — апаратний кодировщик. -method PUT загружає сегменти й плейлист на сервер. Працює, розумне навантаження на CPU.

Варіант 2: RTMP → сервер → HLS. Телефон пушить RTMP через HaishinKit, медіа-сервер (Nginx-RTMP, MediaMTX) конвертує у HLS. Надійніше, але додає 1–2 секунди затримки.

Android: MediaMuxer + HLS

Android MediaMuxer підтримує output format MUXER_OUTPUT_MPEG_4 — це mp4, не TS. Для HLS потрібен либо TS (MPEG-2 Transport Stream), либо fMP4 (fragmented MP4, підтримується HLS v7+).

fMP4 сегменти з MediaMuxer: записуємо в ByteArrayOutputStream через кастомний MediaMuxer з MUXER_OUTPUT_MPEG_4, встановлюємо fragmented MP4 прапор через MediaFormat.KEY_IS_ADTS + специфічний для виробника шлях. Це нестандартно й ненадійно.

Надійний шлях: FFmpegKit — той же підхід що на iOS, тільки для Android. h264_mediacodec замість h264_videotoolbox:

-f android_camera -i 0 -c:v h264_mediacodec -b:v 2M -hls_time 2 -hls_list_size 5 -method PUT http://origin/stream/index.m3u8

Low-Latency HLS (LL-HLS)

Стандартний HLS — затримка 6–30 секунд. LL-HLS (HLS Part) знижує до 2–4 секунд. Для цього сервер і клієнт повинні підтримувати EXT-X-PART директиви (Apple WWDC 2019).

Генерувати LL-HLS частини з мобільного пристрою (0.2–0.5 сек part duration) — надзвичайно складно без спеціалізованого енкодера. Практичніше: пристрій пушить RTMP з малим буфером, медіа-сервер (Nimble Streamer, Wowza з LL-HLS плагіном) генерує LL-HLS для глядачів.

Сценарій застосування: запис і одночасний стрім

Часто потрібно: знімаємо відео → записуємо на пристрій + одночасно стримимо. AVCaptureSession з двома output: AVCaptureMovieFileOutput (локальний запис) і AVCaptureVideoDataOutput (захист для стримінга). Обидва працюють паралельно — процесор телефона тягне обидва потоки без проблем на сучасному залізі (A15+).

Терміни

Реалізація HLS-стримінга з мобільного через FFmpegKit з загруженням на origin-сервер — 2–3 дні. З кастомним TS-сегментером і LL-HLS — 1–2 тижні.