poniedziałek, 23 maja 2016

Sprzętowa kompresja w kamerze wideo

Nie wiem, czy wiecie, że specyfikacja UVC (USB Video Class) od wersji 1.1 przewiduje sprzętową kompresję obrazu i dźwięku w kamerce.
Dzisiaj użyłem narzędzia WireShark + USBPcaps do przetestowania ruchu na magistrali USB podczas wideo-połączenia Skype na dwóch kamerkach wideo:
Połączenia odbyły się po LAN do telewizora LG z kamerką 1280x720 z wyłączonym nagrywaniem audio po obu stronach.

Najpierw C210:

Kamerka nagrywała w 480p30, ale kodek docelowo wysyłał tylko 14 fps. A oto ruch na magistrali USB:
Widać, że nie ma kompresji sprzętowej i to, co przychodzi z kamerki jest kompresowane do H264. W miarę zmniejszania FPS widać spadek użycia pasma USB od 16 do 9 mega-bajtów na sekundę.
Bez kompresji spodziewałem się maksymalnie ruchu 640 x 480 x 30fps x 24bit = 27.6 MBps, więc Skype i tak dobrze kombinował z ograniczeniem FPS (przy 14fps jest 13MBps).

Teraz C930e:

Tutaj po chwili mamy 720p30 i Skype używa kompresji sprzętowej. Praktycznie rzecz biorąc przekłada strumień z USB wprost w tunel. Zobaczmy, co się dzieje na kablu:

Początkowo miałem spore użycie ze względu na 1080p30 - 19 MB/s, ale już po chwili Skype zszedł na 720p30, co obniżyło ruch na USB do 4MB/s.
Bez kompresji spodziewałbym się maksymalnie ruchu 1280 x 720 x 30fps x 24bit = 83 MBps, tymczasem otrzymałem ślicznie skompresowane 4MBps.

Ku memu zaskoczeniu użycie CPU było bardzo podobne. Niestety nie znalazłem sposobu na test w tj samej rozdzielczości.

czwartek, 5 maja 2016

Czy ktoś tu mówi po...

Myślę że warto by rozszerzyć aplikacje tłumaczące jak Google translate o funkcję wyszukiwania w pobliżu osób posługujących się danym językiem. Można to zrobić używając np. Nearby API. Każdy mógłby zdefiniować czy i jakie języki miałyby być widoczne dla ludzi w bliskim otoczeniu.
W ten sposób moglibyśmy odnaleźć w potrzebie osobę,  która zna nasz język i lokalny, by pomóc w komunikacji. 
Po ziddbtyfikowaniu osoby powinien być możliwy anonimowy chat. 
Pomysł udostępniam nieodpłatnie.