Продаж медіаконтенту — треків, подкастів або відео — технічно складніший, ніж реалізація звичайного файлообмінника. Основні проблеми: захист стрімінгу від завантаження, управління трафіком одразу для двох бізнес-моделей (разова покупка vs підписка) та адаптивний стрімінг на різних пристроях. Наш стек на базі AWS CloudFront та HLS вирішує їх з мінімальними витратами. Оцінимо ваш проєкт за 1 робочий день — просто напишіть нам.
Які технічні проблеми ми вирішуємо?
Несанкціоноване завантаження. Користувачі можуть зберігати відео через інспектор або сторонні утиліти, якщо стрімінг не захищений. CloudFront signed cookies прив'язують доступ до IP та терміну життя — сегменти недоступні поза сесією. Це надійніше прямих S3-посилань у десятки разів.
Високі витрати на трафік. Пряма роздача через S3 обходиться дорого. CloudFront CDN знижує вартість на 30–60% за рахунок кешування та edge-оптимізації.
Адаптивний стрімінг на різних пристроях. HLS з декількома бітрейтами автоматично підбирає якість під швидкість з'єднання. Ми використовуємо MediaConvert з профілями від 360p до 1080p HDR. Буферизація на мобільних скорочується на 70% порівняно з прогресивним завантаженням.
Як організувати захищений продаж аудіо/відеоконтенту?
Покроковий процес:
- Транскодування — вихідне відео конвертується в HLS з декількома бітрейтами через AWS MediaConvert.
- Налаштування CloudFront — створюється дистрибуція з signed cookies, що обмежують доступ по IP та часу.
- Інтеграція плеєра — на фронтенді HLS.js або Shaka Player відтворює захищений потік, отримуючи cookies через API.
- Платіжний шлюз — Stripe Subscriptions для підписок та разових покупок, з вебхуками для оновлення статусу.
- Аналітика — heartbeat-відстеження переглядів через
navigator.sendBeacon.
Як ми реалізуємо захищений стрімінг?
Для відео — зв'язка S3 → CloudFront → HLS.js. Вихідне відео транскодується в HLS з декількома бітрейтами. CloudFront роздає сегменти з підписаними cookies, які генеруються на сервері:
// Генерация CloudFront signed cookies use Aws\CloudFront\CloudFrontClient; $cf = new CloudFrontClient(['region' => 'us-east-1', 'version' => 'latest']); $policy = json_encode([ 'Statement' => [[ 'Resource' => "https://cdn.example.com/output/{$movie->uuid}/*", 'Condition' => [ 'DateLessThan' => ['AWS:EpochTime' => time() + 14400], 'IpAddress' => ['AWS:SourceIp' => $request->ip() . '/32'], ], ]], ]); $cookies = $cf->getSignedCookie([ 'policy' => $policy, 'private_key' => storage_path('app/cf-private-key.pem'), 'key_pair_id' => env('CLOUDFRONT_KEY_PAIR_ID'), ]); foreach ($cookies as $name => $value) { Cookie::queue($name, $value, 240, '/', '.example.com', true, true, false, 'None'); } Плеєр на фронтенді отримує cookies через API та відтворює HLS:
import Hls from 'hls.js'; const hls = new Hls({ xhrSetup: (xhr) => { xhr.withCredentials = true; }, }); hls.loadSource(`https://cdn.example.com/output/${movieUuid}/index.m3u8`); hls.attachMedia(videoElement); Для аудіострімінгу використовуємо CloudFront signed URL на MP3/AAC з обмеженим терміном (2 години) та IP-прив'язкою. Попередній перегляд (30 секунд) віддається публічно.
Аналітика переглядів
Впроваджуємо heartbeat-аналітику через navigator.sendBeacon. Вона відстежує додивляємість та точки виходу, не блокуючи закриття вкладки. Дані йдуть в рекомендаційну систему та звіти.
Підписна модель
Для стрімінгового сервісу інтегруємо Stripe Subscriptions з вебхуками. Структура таблиці: subscriptions(user_id, stripe_subscription_id, plan, status, current_period_end). Middleware перевіряє статус active та термін. Конкурентні сесії контролюються через Redis — ліміт одночасних переглядів налаштовується.
Що входить в роботу?
- Проєктна документація: архітектура, профілі транскодування, схема авторизації.
- Налаштування інфраструктури: AWS (S3, MediaConvert, CloudFront) та платіжний шлюз Stripe.
- Інтеграція плеєра з захищеним стрімінгом (HLS.js/Shaka Player).
- Модуль аналітики переглядів (heartbeat + дашборд).
- Адміністративна панель для завантаження та управління медіаконтентом.
- Повна документація по API та адмініструванню.
- Навчання вашої команди (2 години онлайн).
Приклад конфігурації MediaConvert
Налаштування профілів транскодування в AWS MediaConvert: HLS з сегментами по 6 секунд, група мультибітрейту включає 360p (800 kbps), 720p (2500 kbps), 1080p (5000 kbps). Кодек H.264, аудіо AAC 128 kbps.
Порівняння форматів стрімінгу
| Параметр | HLS | MPEG-DASH |
|---|---|---|
| Підтримка браузерів | Нативна в Safari, HLS.js для Chrome/Firefox | Нативна в Chrome, dash.js для Safari |
| Захист | AES-128, Sample-AES | Widevine, PlayReady |
| Адаптивність | За розміром сегмента (6-10 с) | За сегментом (2-10 с) |
| Складність впровадження | Середня | Висока |
Ми обираємо HLS через простоту інтеграції з CloudFront та широку підтримку на мобільних.
Терміни реалізації
| Етап | Час |
|---|---|
| S3 + MediaConvert pipeline | 2–3 дні |
| CloudFront signed cookies + HLS плеєр | 2 дні |
| Платіжна інтеграція (разова/підписка) | 2 дні |
| Аналітика переглядів | 1 день |
| Адміністративна панель | 2–3 дні |
Разом: 9–11 робочих днів під ключ. Зв'яжіться з нами для точної оцінки вашого проєкту.
Типові помилки при запуску медіаплатформи
Використання прямих S3-посилань веде до гарячих посилань та крадіжки контенту. CloudFront signed cookies з IP-прив'язкою блокують hotlinking. Відсутність адаптивного бітрейту викликає буферизацію на повільних з'єднаннях — HLS з профілями вирішує проблему. Нехтування конкурентними сесіями дозволяє ділити один акаунт; Redis-лічильник з TTL 30 секунд та оновлення кожні 10 секунд обмежує одночасні перегляди.
Досвід та гарантії: ми реалізували більше 20 медіаплатформ за багато років. Використовуємо сертифіковані AWS-рішення, що гарантує стабільність та масштабованість. Надаємо підтримку 3 місяці після здачі проєкту. Отримайте консультацію — оцінимо ваш проєкт за 1 день.







