Poszukiwany specjalista ds. streamingu w formacie MPEG-DASH

Poszukujemy specjalisty do spraw streamingu do opracowania rozwiązania
służącego do udostępniania strumieni live w formacie MPEG-DASH.

Ogółem potrzebne jest rozwiązanie, które będzie przetwarzało w locie strumień multimedialny z sieci do plików w formacie MPEG-DASH (profil live).

Całość może być wykonana albo jako w pełni niezależna aplikacja (uruchamiana na serwerze przez nasze provisionery) albo jako biblioteka Javy, do osadzania w naszej aplikacji, ale w takim wypadku musielibyśmy uzgodnić API.

Wymagany kod źródłowy rozwiązania.

Wymagania funkcjonalne:

  • aplikacja musi obsługiwać bez problemu stream do 1080i, więc proponujemy obsługę protokołu RSTP, ale może być inny po uzgodnieniu z naszą stroną;
  • jesteśmy w stanie dostosować format streamu do potrzeb aplikacji, tak więc przed rozpoczęciem prac proponuję uzgodnić z nami wymagany format, uważamy, że najwygodniej będzie zastosować MP4/H.264;
  • adres strumienia wejściowego musi być odczytywany z parametrów wejściowych aplikacji/przekazywany przez parametr funkcji (jednocześnie będzie mogło być uruchomionych kilka instancji dla różnych strumieni wejściowych);
  • drugim argumentem aplikacji/funkcji powinna być ścieżka, w której generowane będą pliki pakietów MPEG-DASH oraz manifest, manifest powinien być zapisany w pliku manifest.mpd;
  • dodatkowym parametrem będzie plik z konfiguracją, który opisywać będzie docelowe formaty pakietów MPEG-DASH:
    • ogólna konfiguracja (na chwilę obecną przede wszystkim długość pojedynczego chunka);
    • video (konfigurowalny powinien być ID danego pakietu, rozdzielczość, oraz bitrate),
    • audio (konfigurowalny powinien być ID danego pakietu, oraz bitrate);
  • aplikacja powinna co zadany okres czasu generować screenshot z jednego z chunków (może to być zrobione jako osobna aplikacja uruchamiana dodatkowo).

Wymagania niefunkcjonalne:

  • całość musi być możliwa do uruchomienia i zbudowania na platformie opartej o system Debian Wheezy;
  • za “dostępne” można uznać pakiety z repozytoriów Debiana (albo innych repozytoriów Apt, jeśli są udostępniane release’y dla wersji Debian Wheezy), a także repozytoriów paczek dla poszczególnych technologii: Maven (dla Javy i innych opartych o JVM), Ruby Gems (dla Ruby), pip (dla Pythona), Composer (dla PHP), npm (JavaScript), NuGet (C#), Dub (D), go get (Go) itp;
  • w przypadku braku paczek należy dostarczyć skrypty automatyzujące budowanie zależności z kodu źródłowego;
  • w przypadku języka innego niż C, C++, C#, D, Java (i inne oparte na JVM jak Groovy, Scala), Go, Python, PHP, Ruby, Smalltalk, JavaScript, prosimy o konsultację - chcemy być w stanie samodzielnie wspierać stworzone rozwiązanie;
  • w kodzie źródłowym jako znaków nowych linii należy używać \n (Linux line ending), kodowania UTF-8, a jako wcięć 4 spacji (nie tabulacji, ani nie dwóch).

Przykładowe uruchomienie programu (w przypadku implementacji jako niezależna aplikacja):

/usr/local/bin/out-stream-app --input rstp://ip:port/ --output /path/to/channel/directory/ --config streaming.conf

Przykładowa zawartość pliku streaming.conf:

czas w sekundach
chunkInterval = 5
thumbnailInterval = 30

video(hd-v1) {
width=1920
height=1080
bitrate=4190760
}
video(hd-v2) {
width=1280
height=720
bitrate=2073921
}
video(v3) {
width=854
height=480
bitrate=869460
}
audio(hd-v1) {
bitrate=128000
}
audio(v2) {
bitrate=44100
}

Format wywołań i pliku konfiguracyjnego może być inny, chodziło nam jedynie o zobrazowanie.

Zainteresowanych zleceniem prosimy o przesłanie zgłoszeń wraz z przygotowaną ofertą oraz wyceną za wykonanie zlecenia.