Mini PoC (Proof of Concept), pokazujący możliwość renderowania dynamicznej strony internetowej (z licznikiem/wykresami) w wirtualnym środowisku bez ekranu (headless) i jej streamowania na serwery takie jak YouTube, Twitch lub lokalny serwer RTSP/RTMP.
- Serwer VPS z systemem Linux (np. Debian/Ubuntu).
- Zainstalowany Docker (instalator).
- Zainstalowany pakiet
git. - Sklonować ten projekt:
git clone https://github.com/mizpablito/PoC-Streaming-Page.git
- Wejść do katalogu:
cd PoC-Streaming-Page - Zedytować plik
docker-compose.ymlzgodnie z potrzebami (sekcjaenvironment). - Testowo uruchomić za pomocą komendy:
Pozwoli to zbudować obraz kontenera oraz wejść w tryb podglądu logów. Aby zatrzymać pracę kontenera, wykonaj skrót:
docker compose up --build --force-recreate
Ctrl + C. - Jeśli wszystko jest okej, można uruchomić kontener w trybie pracy w tle:
docker compose up -d
Uwaga: Jeśli dokonasz zmian w którymś pliku składowym obrazu (
Dockerfile,.js,.sh), pamiętaj o ponownym przebudowaniu obrazu, aby zmiana zadziałała ->docker compose up --build --force-recreate.
| Plik | Opis |
|---|---|
Dockerfile |
Definicja obrazu kontenera. Instaluje wszystkie niezbędne zależności: Node.js (do uruchomienia Puppeteer), Chromium (przeglądarka headless), Xvfb (wirtualny ekran) i FFmpeg (przechwytywanie i kodowanie). |
docker-compose.yml |
Konfiguracja uruchomienia. Definiuje kontener, mapuje pliki, a co najważniejsze – ustawia kluczowe zmienne środowiskowe do sterowania streamem. |
entrypoint.sh |
Główny skrypt Bash. Odpowiada za sekwencję uruchamiania w kontenerze: 1. Czyści blokady. 2. Uruchamia Xvfb (wirtualny ekran). 3. Uruchamia Chromium (za pomocą streamer.js). 4. Uruchamia FFmpeg z modułem x11grab, który przechwytuje obraz z wirtualnego ekranu i wypycha go jako strumień RTMP/RTSP. |
streamer.js |
Skrypt Node.js korzystający z Puppeteer. Otwiera wskazaną stronę (TARGET_URL) w przeglądarce, idealnie kadruje okno do rozmiaru 1280x720 (eliminując czarne paski i komunikaty automatyzacji) i opcjonalnie odświeża stronę w ustalonych interwałach. |
Kluczowe parametry projektu ustawiane są w sekcji environment:
| Zmienna | Opis | Przykład |
|---|---|---|
TARGET_URL |
Adres URL strony internetowej, którą chcemy streamować. | https://time.is/ |
STREAM_URL |
Adres docelowy strumienia (Ingest URL) wraz z protokołem. UWAGA: Dla YT/Twitch używaj protokołu RTMP. | rtmp://a.rtmp.youtube.com/live2/KLUCZ |
REFRESH_ENABLED |
Włączenie/wyłączenie cyklicznego odświeżania strony. Zalecane dla dynamicznych stron, aby zapobiec ich "zasypianiu". | true lub false |
REFRESH_INTERVAL_MINUTES |
Interwał odświeżania strony w minutach. Działa tylko, gdy REFRESH_ENABLED=true. |
30 |
Użyto do testów Maszyny Wirtualnej (VM) z zainstalowanym Debian 13 oraz Docker. VM miała przydzielone 2 rdzenie (np. Intel i5-6500T (4c/4t 2.50/3.10Ghz)) oraz 4GB RAM.
Podczas testów zużywało ok. 30% CPU (2 core) oraz ~500MB RAM. Zużycie CPU jest w dużej mierze determinowane przez proces kodowania wideo (H.264) przez FFmpeg.