jak przyspieszyc wysylanie screenshotow?

0

hej!
mam nastepujacy problem: moja aplikacja co sekunde robi screenshota i sle go na serwer socketem. moim problemem jest to, ze idzie to ciut za wolno i chcialabym przyspieszyc bez znacznej utraty jakosci obrazu (jpg).

nie prosze o gotowy kod, tylko o jakies sugestie. co mozna zrobic z obrazkiem by byl lzejszy ale zbytnio sie nie roznil od oryginalu?

bede wdzieczna za wszelkie sugestie.

 pzdr,
           misty
0

Przede wszystkim sprawdź czy powolne dostarczanie obrazków spowodowane jest w większym stopniu powolnym zrzutem do pamięci (raczej nie), powolną kompresją to jpeg (dość prawdopodobne na słabszej/źle skonfigurowanej maszynie) czy powolną transmisją do serwera (zależy od uploadu łącza).
Bez pełnej znajomości czasów tych etapów niczego nie poprawisz. Jeżeli osłabisz kompresję jpeg lub zmienisz ją na słabszą (w sensie stopnia pakowania), to znacznie przyspieszysz generowanie plikowej postaci obrazka, ale spowolnisz transmisję ponieważ dane będą większe. Jednak często opłaca się to zrobić bo wydłużysz transmisję np. dwa razy (czas transmisji jest zwykle liniowo proporcjonalny do ilości przesyłanych danych), ale skrócisz czas generowania 5-8 razy. Czas kompresji zwiększa się wykładniczo przy rosnącej jakości kompresji lub malejącej wielkości pliku wynikowego.

Najlepiej jakbyś wykombinowała sobie klasę, która określi jakieś proporcje czasowe czasu kompresji i czasu transmisji dla pojedynczego obrazka. Na czas zrzutu nie masz raczej żadnego wpływu, więc i tak trzeba to olać.
Na jej podstawie Twoja aplikacja może sama dobierać w pewnym zakresie stopień lub formę kompresji obrazka tak aby maksymalizować łączny czas kompresji i transmisji. W ten sposób zredukujesz przyczynę wąskiego gardła na konkretnej maszynie z konkretnym łączem.

Podejrzewam w tym wypadku, że Twoja aplikacja zbyt mocno pakuje obrazek w maksymalnej jakości. Powinnaś sprawdzić w enkoderze jak manipulować stopniem kompresji. Bo to, że jest słabszy stopień nie oznacza, że będzie gorsza jakość obrazu - tylko rozmiar będzie większy. W skrajnym wypadku dojdzie do rozmiaru pliku obrazka nieskompresowanego. Powszechnym błędem jest próba maksymalizacji jakości kompresji (nie ma to nic wspólnego z jakością obrazu) przy zabronieniu zwiększania wielkości generowanego pliku - spowalnia to piekielnie kompresję i obraz dostaje silne artefakty będące efektem kwantyzacji. Najbardziej optymalnym stopniem kompresji JPEG jest licząc wielkości obrazu nieskompresowanego i skompresowanego 11:1.
Nierzadko spotykałem obrazki pakowane 50:1. Nic się nie stanie jeżeli kompresja wyniesie 6-8:1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1