1. Opis projektu 
2. Zakres projektu 
3. Wymagania techniczne i projektowe 
a) Preferowany stack technologiczny projektu: 
- Backend dla quickstream-tools [Część wykonawcza] 
- Frontend dla quickstream-tools i quickstream-cloud [Interfejs użytkownika] 
 - Aplikacja web: 
 -Aplikacja na komputery: 
 - Backend dla quickstream-cloud [Interfejs użytkownika] 
 - Aplikacja: 
 -Testy: 
 - Devops dla quickstream-tools [Interfejs użytkownika]  
4. Architektura  5. Specyfikacja wymagań funkcjonalnych i projektowych  - Wymagania Quickstream Tools 
- Wymagania Quickstream Cloud 
- Wymagania Quickstream Platform 
1. Opis projektu  Przedmiotem projektu jest wykonanie systemu informatycznego 
Quickstream, którego głównym celem jest przekazywanie i wymiana audio-wizualnych sygnałów live. System 
Quickstream ma dostarczyć niezawodny, efektywny kosztowo i łatwy w konfiguracji sposób na zestawiania połączeń poprzez sieci IP w tym rozległe sieci IP. 
 System 
Quickstream będzie składać się z trzech produktów:
a) Quickstream Tools – narzędzie umożliwiające odbiór sygnałów live video oraz ich przekazanie po sieciach IP w sieciach rozległych w sposób niezawodny, z minimalnym możliwym opóźnieniem i korekcją błędów z wykorzystaniem różnych wejść i wyjść audio wizualnych
b) Quickstream Platform – platforma umożliwiająca zarządzanie sygnałami w infrastrukturze nadawcy.
c) Quickstream Cloud – usługa umożliwiająca wymianę sygnałów w chmurze pomiędzy partnerami. Dodatkowo quickstream cloud będzie umożliwiać zarządzanie licencjami do quickstream tools i platform.
2. Zakres projektu  Na zakres wykonania projektu składają się: 
a) Wykonanie i wdrożenie systemu informatycznego zgodnie z wymaganiami opisanymi w niniejszym dokumencie. 
b) Przygotowanie i konfiguracja przestrzeni serwerowej ze szczególnym uwzględnieniem CI/CD dla elementów cloud oraz CI/CD dla testów backendowych. 
c) Przygotowanie dokumentacji technicznej opisującej słownie oraz graficznie architekturę systemu wraz z opisem implementowanych rozwiązań technologicznych. 
d) Wykonanie specyfikacji wszystkich wykonanych interfejsów systemowych ze szczegółowym opisem (specyfikacja powdrożeniowa) - funkcjonalna i techniczna. 
e) Wykonanie dokumentacji użytkowej. 
f) Wdrożenie identyfikacji wizualnej projektu, w szczególności logotypów i layoutów systemu
3. Wymagania techniczne i projektowe  Zespół projektowy powinien składać się co najmniej z osób, w tym jednego devOpsa, jednego project managera, dwóch frontend developerów, dwóch backend developerów.  
Preferowany stack technologiczny projektu
a) Backend dla quickstream-tools [Część wykonawcza]
  - ffmpeg == 4.1.4 
 - libsrt == 1.3.2 
- QT == 5.12 
- QtWebAppServer 
- Crypto++ 
- QtCipherSqlitePlugin  
b) Frontend dla quickstream-tools i quickstream-cloud [Interfejs użytkownika]
 Aplikacja web: - Ant Design >= 3.20.1 (framework CSS) 
- Prop-types >= 15.7.x (typowanie kodu) 
- React >= 16.8.0 (biblioteka JS) 
 - Redux >= 4.0.3 (biblioteka JS) 
- Immutable >= 4.0.0 (biblioteka JS - optymalizacja operacji na store) 
- Styled Components >= 4.3.2 (stylowanie CSS component scoped) 
 - Create React App (biblioteka JS - podstawowa konfiguracja projektu) 
 - Eslint >= 5.16.0 (sprawdzanie zgodności składnie JS) 
- Prettier >= 1.18.2 (auto formatowanie kodu)  
Aplikacja na komputery:  Wszystko co zawiera powyżej opisana aplikacja web oraz poniżej wymienione biblioteki:
 - Electron >= 4.0.5 (tworzenie aplikacji możliwej do uruchomienia lokalnie) 
- Webpack >= 4.29.5 (konfiguracja projektu - kompilacji kodu wykonawczego)  
Backend dla quickstream-cloud [Interfejs użytkownika]
  Aplikacja:  - Koa >= 2.7.0 (node framework) 
 - Bcrypt >= 3.0.6 (tworzenie hasha dla hasła zapisanego w bazie) 
 - Jsonwebtoken >= 8.5.1 (generowanie JWT Token) 
 - Knex >= 0.16.5 (obsługa zapytań do bazy danych) 
- Moment >= 2.24.0 (biblioteka JS, obsługa daty) 
- Mysql >= 2.17.0 (baza danych mariaDB) 
- Eslint >= 4.3.0 (sprawdzanie zgodności składnie JS) 
 - Prettier >= 1.18.2 (auto formatowanie kodu)  
Testy:  - Chai >= 4.2.0 (biblioteka JS do testów w node) 
 - Mocha >= 6.1.4 (framework do testów jednostkowych w node)  
Devops dla quickstream-tools [Interfejs użytkownika]
  - Gitlab + CI/CD 
 - snapcraft 
 - debuilder 
 - dh_make 
 - dpkg 
 Repozytoria przechowywane na Gitlab. Prace przedwdrożeniowe prowadzone na dedykowanych, zawsze dostępnych środowiskach serwerowych. Zautomatyzowany deploy. Continuous Integration oparte o infrastrukturę AWS.  
4. Architektura  Architektura wszystkich komponentów aplikacji: 
http://bit.ly/2KIYaCD 
 5. Specyfikacja wymagań funkcjonalnych i projektowych  System Quickstream będzie składał się z trzech produktów: Quickstream Tools, Quickstream Platform, Quickstream Cloud.  
Wymagania Quickstream Tools - Możliwość zainstalowania oprogramowania na systemach operacyjnych: 
 a) Debian 9 
 b) Debian 10 
 c) Ubuntu 18.04 LTS 
 d) Ubuntu 19.04 
e) MacOS X > 10.12 
 f) Windows 10 > 1607 
- Możliwość zestawienia jednego lub wielu niezawodnych połączeń do przesyłania strumieni audio/wideo przez sieci IP. Obsługiwane protokoły:  
Wejściowe: a) MPEG-TS over UDP 
b) MPEG-TS over RTP 
c) MPEG-TS over SRT 
 d) RTMP Pull 
 e) RTMP Push 
 f) SDI (Serial Digital Interface) (Przynajmniej do rozdzielczości 1080i 25fps/29,97fps) 
g) NDI by Newtek (Network Digital Interface) (Przynajmniej do rozdzielczości 1080i 25fps/29,97fps)  
Wyjściowe:  a) MPEG-TS over UDP 
b) MPEG-TS over RTP 
c) MPEG-TS over SRT 
 d) RTMP Pull 
 e) RTMP Push 
 f) SDI (Serial Digital Interface) (Przynajmniej do rozdzielczości 1080i 25fps/29,97fps) 
g) NDI by Newtek (Network Digital Interface) (Przynajmniej do rozdzielczości 1080i 25fps/29,97fps) 
- Możliwość korzystania z systemu w środowisku zamkniętym bez połączenia z siecią publiczną, 
- Możliwość zmiany języka aplikacji: 
a) system powinien obsługiwać język polski, 
 b) system powinien obsługiwać język angielski, 
 - Możliwość połączenia się z zdalnym węzłem quickstream-wrapper przez REST API: 
- Możliwość uwierzytelnienia (JWT token) 
- Możliwość pobierania konfiguracji kanałów, 
- Możliwość dodania wejścia (inputs) kanałów w postaci mpeg-ts, 
- Możliwość dodania wyjścia (outputs) kanałów w postaci mpeg-ts, 
- Możliwość usunięcia wejścia kanału (input), 
- Możliwość usunięcia wejścia kanału (output), 
- Możliwość przeglądania list wejść (inputs) i wyjść (outputs), 
- Możliwość dodawania, usuwania, edytowania nowych kanałów, 
- Możliwość zapisu bieżących konfiguracji kanałów, 
- Wyświetlanie informacji o połączeniu lub rozłączeniu z node, 
- Wyświetlanie statusu danego kanału, 
- Możliwość zmiany statusu danego kanału, 
- Możliwość włączania/wyłączania routes, 
- Możliwość wyświetlania logów routes, 
- Możliwość wyświetlania informacji o błędach/notyfikacji, 
- Automatyczne uruchamianie routes po restarcie aplikacji, 
- Możliwość wyświetlania podstawowych informacji o serwerze 
a) adresy sieciowe interfejsów i nazwy 
 b) obciążenie CPU, RAM i interfejsów sieciowych 
c) wersja systemu i wersja nadzorcy i jednostek wykonawczych 
- Możliwość zmiany hasła do aplikacji, 
- Możliwość przeglądania statystyk konkretnych kanałów w wybranych okresie czasowym, 
- Zbieranie logów i statystyk oraz możliwość ich zapisu do pliku, 
- Możliwość przeglądania statystyk na wykresach,  
Wymagania Quickstream Cloud  Funkcjonalności dostępne dla roli - admin  - Możliwość zalogowania się (uwierzytelnienie JWT token), 
- Możliwość zmiany hasła oraz nazwy użytkownika (własnego), 
- Możliwość dodawania lub usuwania użytkowników, 
- Możliwość przeglądania listy użytkowników, 
- Możliwość wygenerowania licencji przez admina na podstawie hardware ID (fingerprint - unikatowy identyfikator maszyny), 
- Możliwość przypisania licencji do użytkownika, 
- Możliwość ustawienia ważności licencji, 
- Możliwość ustawienia rodzaju licencji, 
- Możliwość określenia ilości engine które dana licencja obsługuje, 
- Możliwość pobrania licencji, 
- Możliwość przeglądania listy licencji przypisanych do użytkowników,  
Funkcjonalności dostępne dla roli - użytkownik - Możliwość rejestracji (email + hasło), 
- Możliwość zalogowania się (uwierzytelnienie JWT token), 
- Możliwość zmiany hasła oraz nazwy użytkownika, 
- Możliwość przeglądania przypisanych do konta licencji, 
- Możliwość zakupu licencji, 
- Możliwość udostępniania kanałów między partnerami, 
- Możliwość przeglądania listy udostępnianych kanałów, 
- Możliwość skontaktowania się z supportem poprzez formularz kontaktowy,  
Wymagania Quickstream Platform  Funkcjonalności dostępne dla roli - admin a) możliwość zalogowania się (uwierzytelnienie JWT token), 
b) możliwość zmiany hasła oraz nazwy użytkownika (własnego), 
c) możliwość dodawania lub usuwania użytkowników, 
d) możliwość przeglądania listy użytkowników, 
- Możliwość przechowywania informacji o kanałach: 
a) generowanie ID kanału, 
b) sprawdzanie poprawności ID kanału, 
c) podawanie statusu kanału, 
 - Możliwość uwierzytelniania użytkowników (JWT token), 
- Możliwość udostępniania serwera brzegowego do połączeń audio/video, 
- Możliwość rejestracji użytkowników,