📺Синхронная трансляция видео через OBS + RTMP + HLS

Цель: Организовать локальную трансляцию видео с одного Windows-компьютера (через OBS) на 4 телевизора (1x Samsung UE55H8000 и 3x TCL L43P8US) в пределах одной сети. Поток должен отображаться синхронно

Схема

OBS (Windows) → RTMP → Nginx (с HLS) → SmartTV (браузер)

🧩 Технологии

  • OBS Studio — источник видео

  • Nginx + RTMP module — приём и преобразование потока

  • HLS — формат для совместимости с ТВ

  • HTML5-плеер — для отображения через браузер ТВ

  • Локальная сеть — проводная/беспроводная

🔧 Подготовка Windows-сервера

  1. Установи Nginx с RTMP модулем (например, через сборку Nginx RTMP for Windows)

  2. Создай структуру:

    C:/
    └── streaming/
        ├── hls/
        └── player.html
  3. Пример nginx.conf:

worker_processes  1;

events {
    worker_connections 1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            hls on;
            hls_path C:/streaming/hls;
            hls_fragment 2;
            hls_playlist_length 6;
            hls_continuous on;
            record off;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias C:/streaming/hls/;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }

        location /player.html {
            root C:/streaming;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }
    }
}

🖥 Настройка OBS

  • Тип потока: Custom

  • Сервер: rtmp://<ip_этого_ПК>:1935/live

  • Ключ: stream

📂 HTML5-плеер (player.html)

<!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>MD-player</title></head> <body style="margin:0; background:#000;"> <video id="video" controls autoplay style="width:100%; height:100%"></video> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> if (Hls.isSupported()) { var video = document.getElementById('video'); var hls = new Hls(); hls.loadSource('http://192.168.100.16:8080/hls/stream.m3u8'); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function () { video.play(); }); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { video.src = 'http://192.168.100.16:8080/hls/stream.m3u8'; video.addEventListener('loadedmetadata', function () { video.play(); }); } </script> </body> </html>

📺 Подключение ТВ

  1. В браузере на каждом ТВ открыть:

    http://192.168.100.16:8080/player.html
  2. Для автозапуска можно использовать:

    • Переименование закладки в браузере SmartTV

    • Автоматическую загрузку стартовой страницы (если поддерживается)

    • Приложения WebView (на Android TV)

🧪 Тестирование

✅ Полностью синхронная трансляция на всех устройствах ✅ Задержка менее 2 сек ✅ Нет рассинхрона ✅ OBS: 0% потерь ✅ HLS поток стабильный

🐛 Потенциальные проблемы и решения

Проблема
Причина
Решение

404 при заходе на /player

Nginx ищет index, а не player.html

Явно указать /player.html

Подтормаживание раз в 5 сек

HLS фрагментация слишком редкая или сеть не тянет

Уменьшить hls_fragment, перейти на проводное подключение

Рассинхрон между ТВ

Разные клиенты, время инициализации

Перейти полностью на HLS и запускать с одной точки

🔄 План на будущее

  • 🧱 Перенос на контейнер (LXC) под Proxmox (на Debian)

  • 🔐 Ограничение доступа к HLS через локальный IP

  • 🖥 Автозапуск стриминга через OBS с PowerShell

  • 📡 Переход на Multicast или WebRTC (при необходимости)

Статья протестирована и проверена в боевых условиях.

Автор: Начальник отдела АСУ - Д.И. Глухончук | gr33njj [GitHub - Telegram - WhatsApp] Июль 2025

Last updated