Wpis z mikrobloga

Mirki z #programowanie #webdev #java
Zabieram się za pisanie małej usługi do strumieniowania obrazu na żywo. Póki co nie przejmuję się bezpieczeństwem bo to prototyp. We wszystkim chodzi o przesyłanie ekranu na żywo z jednego komputera na serwer i serwowanie tego "strumienia" do przeglądarki innego użytkownika. Póki co wymyśliłem to tak:
1. Apka w javie przechwytuje obraz w 20 klatkach (na początek żeby zmniejszyć obciążenie sieci) i w mniejszej rozdzielczości, np 800x600.
2. Obraz jest przesyłany za pomocą #websocket na serwer. Tutaj właśnie nie jestem pewien jak to optymalnie przesłać, pierwsza myśl to konwersja przechwyconej klatki na base64, zebranie 20 takich klatek i wysłanie na serwer. Nie podoba mi się to, wydaje mi się strasznie nieoptymalne więc tu potrzebuję pomocy.
3. Serwer zbiera odebrane klatki i zapisuje je w 1 sekundowych klipach.
4. Klient pobiera klipy jako strumień za pomocą html5, trochę bazuję tutaj na tym artykule.

Jeżeli to by zadziałało to pomyślałbym o takich opcjach jak dynamiczne dopasowywane rozdzielczości przesyłanego obrazu itp. Ale priorytetem jest najniższe opóźnienie podczas przesyłania. Serwer websocketów już mam, napisany w #php.
Czy taki sposób jest w ogóle dobry? Co poprawić, gdzie doczytać?
#pytaniedoeksperta
  • 7
@kuskoman: Podobne ale wszystko napisane w go którego nie znam. Jestem przygotowany na pisanie wszystkiego od zera więc spoko. Zgodnie z poradą kolegi @PanJanuszTrzeci zapoznałem się z udp i napisałem mały osobny kod który kompresuje jedno zdjęcie i wysyła przez udp na drugi host. W javie działa całkiem spoko, teraz ogarniam po stronie php.
@Jurigag: Do odbierania i wysyłania połączeń mam workermana. Tylko że w poście napisałem że chciałem używać websocketów ale postawiłem dodatkowego workera na UDP i ogarniam bezpośrednio żywe pakiety. Napisałem kilka klas do weryfikacji pakietów itp i wszystko już śmiga. Znaczy częściowo bo potrafię nagrać pojedynczy klip i zmontować go na serwerze za pomocą ffmpeg. Ale muszę znaleźć jakiś lepszy sposób przechwytywania obrazu w javie bo to co teraz robię to seria