Wypas kamerka

https://xpil.eu/egk

Jeśli chodzi o zarabianie pieniędzy za pomocą ciała to używam głównie mózgu, oczu i dłoni. Kamera jest mi zasadniczo zbędna, chociaż czasem przydaje się do uzyskania złudzenia przebywania w tym samym pomieszczeniu co reszta teamu, co ma - przynajmniej w teorii - zmniejszyć nasz ból egzystencjalny spowodowany fizyczną rozłąką z prawdziwym biurem.

Do tej pory używałem w tym celu całkiem nie najgorszej kamerki firmy Razor.

Dygresja:

Jak ogólnie wiadomo, z kamerkami internetowymi jest taki problem, że nie opłaca się produkować ich w lepszej jakości, bo obecnie dostępne na rynku są wystarczająco dobre dla większości klientów, stąd też ryzyko, że jak wypuścimy na rynek kamerkę, która jest naprawdę wypasiona, większość ludzi ją po prostu zignoruje, bo im się nie będzie opłacało dopłacać za ten dodatkowy "wypas". Małej serii wypuścić się nie da, bo producenci podzespołów nie bawią się w zamówienia poniżej 100K USD, a nikt normalny nie zaryzykuje zainwestowania takiej kasy w niepewny biznes. Kółko się zamyka.

Koniec dygresji.

No dobra. A co jeżeli jednak chcemy lepszej jakości?

Po pierwsze można użyć aparatu wbudowanego w smartfona - aplikacja DroidCam jest darmowa i umożliwia przekształcenie naszego ogłupiacza w całkiem niezłej jakości kamerkę IP.

Ale i to może nie wystarczyć każdemu.

Kolejną opcją jest podłączenie do komputera prawdziwego aparatu fotograficznego, czyli cyfrowej lustrzanki.

Zagadnienie nie jest całkiem trywialne, bo DSLR nie oferują (na ogół) bezpośredniego wyjścia USB Video, tylko przez HDMI. Mam w domu starego, wysłużonego Nikona D5200 (nie żaden wypas, ale też nie całkiem dolna półka - na moje potrzeby wystarcza aż nadto), który ma wyjście HDMI.

Co zrobić, żeby przekształcić takiego Nikona w kamerkę internetową?

Po pierwsze potrzebujemy niewielkiego dynksu, który potrafi przechwycić sygnał HDMI i przerobić go na USB-Video, dzięki czemu nasz komputer będzie mógł "zobaczyć" dodatkowe urządzenie.
Po drugie potrzebujemy lepszej baterii, bo te w aparacie wystarczają na kilkanaście - kilkadziesiąt minut transmisji video, potem zdychają. Najlepiej podpiąć zasilacz A/C udający baterię - wtedy co prawda mamy aparat na uwięzi (kabelek zasilający!), ale ponieważ już i tak zdecydowaliśmy się przywiązać go do kompa za pomocą USB, kolejny kabel nam nie zaszkodzi.

Ponieważ nie znam się na tym kompletnie, postanowiłem nie przesadzać z inwestycjami - kupiłem kabelek mini-HDMI za €5, bateryjkę A/C za €10 oraz tani, chiński konwerter sygnału firmy Krzak za kolejne €12 (konwerter z wejściem HDMI oraz wyjściami HDMI+USB, żeby można było podglądać wyjście na osobnym monitorze). Odczekałem karnie aż kurier przyniesie mi wszystkie zabawki. Podłączyłem bateryjkę, konwerter (dużo kabelków: jeden do zasilania bateryjki, jeden do zasilania konwertera, jeden HDMI między aparatem i konwerterem, i jeden USB między konwerterem i komputerem), włączam w aparacie podgląd video, odpalam VLC żeby sprawdzić czy wszystko działa… Nie działa. Mój Mint 20 nie widzi urządzenia video, w ogóle.

Drapię się po nosie, na wszelki wypadek kilka razy.

Nie pomogło.

Zaglądam w /var/log/syslog a tam informacja, że owszem była próba podłączenia jakiegoś urządzenia USB, ale urządzenie nie zareagowało na komendę reset. Wypinam więc kabel usb, wpinam znów… to samo.

Myślę sobie, pewnie popsuty konwerter kupiłem, taka ich chińska mać. Ale sprawdziłem na konwerterze wyjście HDMI (podpinając je pod monitor) i widzę, że obraz z kamery na monitorze jest, a bonusowo jeszcze pisk na pół osiedla, bo się oczywiście mikrofon aparatu sprzęgł z głośnikami monitora. A więc konwerter działa (przynajmniej jako przelotka dla HDMI). Musi być coś z gniazdem albo systemem operacyjnym.

Hmmm.

Podrapałem się - tym razem po głowie, bo to już nie żarty.

Nie pomogło.

Sprawdziłem w specyfikacji konwertera - piszą, że wymaga USB3. Sprawdziłem w specyfikacji kompa - wszystkie porty USB są USB3, więc powinno działać w każdym. Ale a nuż?

Przepinam kabelki USB, podłączam konwerter do innego portu. Zaglądam znów w /var/log/syslog - to samo, tylko na innym porcie. Przynajmniej wiem, że sprawdzam właściwe urządzenie…

Powtarzam operację na kolejnym porcie USB… i oto stał się cud, urządzenie zgłasza się w logu systemowym, zainicjalizowane poprawnie, gra i buczy. Hura!

Odpalam VLC… a tam nic.

Ażeby cię, myślę sobie, rodzona matka nie poznała, kupo śmiecia ty, taka i owaka.

Ale potem myślę sobie, noż kurdę, niemożliwe. Skoro mi się urządzenie zgłasza bez błędów w syslogu to przecież coś się musi dać zrobić.

Wygrzebałem z logów nazwę producenta oraz identyfikator sprzętu. Wrzuciłem w Gugla… I znalazłem zatrzęsienie postów od ludzi pytających się jak to coś odpalić pod Linuksem, oraz mnóstwo odpowiedzi, że w sumie to nie wiadomo.

Całkiem już zniechęcony kliknąłem w drugą stronę wyników wyszukiwania (czego nikt przy zdrowych zmysłach przecież nie robi) i tam doklikałem się do jakiegoś zapomnianego przez świat i ludzi blogu, którego właściciel miał ten sam problem - i udało mu się go rozwiązać!

Otóż, jak się okazuje, w wersji kernela 4.7 (i późniejszych) urządzenia typu Video Capture tego producenta zostały omyłkowo zaklasyfikowane jako… mikrofon. Stąd też brak na liście urządzeń video w VLC. Problem został zgłoszony ekipie zajmującej się obsługą urządzeń przez jądro, ale póki co nikt się nim jeszcze nie zajął.

Rozwiązanie?

Trzeba odmikrofonić konwerter wysyłając magiczne ciągi znaczków do odpowiedniego magicznego linuksowego pliku reprezentujacego sterownik urządzenia… I to właściwie koniec. Nagle w magiczny sposób w Zoomie, Teamsach i Google Meet pojawia się dodatkowa kamerka, wszystko działa, obraz - żyleta. Trzeba było jeszcze pousuwać informacje kontrolne z ekranu (w ustawieniach aparatu - nie obyło się bez ściągnięcia PDF-a z instrukcją obsługi) i podkręcić zoom / ostrość, i już.

Aha, ten model aparatu umożliwia maksymalnie półgodzinny podgląd przez HDMI, pod koniec tej półgodziny na ekranie pojawia się przypominacz i trzeba kliknąć dowolny przycisk na obudowie aparatu żeby zresetować licznik na kolejne pół godziny. Problem raczej niewielki. Podobno da się to obejść instalując w aparacie odpowiednio zmodyfikowany firmware, ale aż tak zajadły nie jestem.

Summa summarum wszystkie powyższe czynności zajęły mi dwa popołudnia. Trzecie poświęciłem na napisanie tego wpisu.

Na koniec lista komend, które pozwoliły mi uzyskać upragniony efekt:

  • Zaglądamy w syslog: sudo tail -f /var/log/syslog
  • Wyświetlamy listę urządzeń USB, z uwzględnieniem hierarchii: lsusb -t
  • Wyświetlamy listę urządzeń usb audio: ls -l /sys/bus/usb/drivers/snd-usb-audio/
    (tutaj powinniśmy zobaczyć kilka pozycji w stylu: ../../../../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0)
  • Odmikrofoniamy konwerter: echo "1-1:1.2" > /sys/bus/usb/drivers/snd-usb-audio/unbind
    Uwaga: powyższe trzeba wykonać z sesji roota, nie przez sudo, a więc najpierw sudo su. No i zamiast 1-1:1.2 trzeba wstawić właściwy numer urządzenia USB wyciągnięty uprzednio z /sys/bus/usb/drivers/snd-usb-audio/)
  • Problem dotyczył konwertera zgłaszającego się jako: idVendor=534d, idProduct=2109

Uff.

Tak wygląda konwerter:

A tu aparacik:

https://xpil.eu/egk

6 komentarzy

  1. rozwiązanie problemu jest intuicyjne :). Dziwię się, że sam na to nie wpadłeś. Może tak jak z USB – powinieneś drapać się drugą ręką [/w innym miejscu].

    1. Nie, no ale jako to? Przecież sam na to wpadłem. To znaczy, żeby poszukać na Google zamiast samemu kombinować.

    1. Łatwiej. Niestety, Windows ma jedną malutką wadę, która uniemożliwia używanie go w mojej obecnej pracy: Docker nie jest kompatybilny z Windows w kwestiach sieci. A konkretnie: nie da się skonfigurować środowiska Docker na Windows tak, żeby działało identycznie jak w pozostałych OS-ach. Mam w Teamie około 90% ludzi z MacOS i około 10% ludzi z różnymi Linuksami. Byłem na początku jedynym, który miał Windows, i cały team spędził na dzień dobry kupę czasu próbując zmusić mojego windowsowego Dockera do współpracy. Nie dało rady.

      Tak więc przesiadłem się na Minta bo nie miałem za bardzo innego wyjścia.

      Po pół roku pracy jedyne co mi tak naprawdę doskwiera pod Linuksem to LibreOffice Calc, o którego niedociągnięciach i brakach mógłbym pewnie stworzyć osobnego bloga. Dlatego postawiłem sobie maszynę wirtualną z Windowsem i Excelem.

  2. Jest szansa na porównanie tych rozwiązań z przykładami, gdzie będzie widać różnicę w jakości czyli sens tego zamieszania? Korzystam, jak reszta zespołu, z kamery wbudowanej w lapka i nie bardzo widzę powód do zmiany. Sporo zależy oczywiście od smartfona, ale współczesne mają niezłe aparaty.

    Przy okazji polecam dmesg do sprawdzania podłączanych urządzeń zamiast katowania sysloga.

    Prawidłowo użyte sudo zastąpi przejście na roota. Try harder. ;-P

Skomentuj xpil Anuluj pisanie odpowiedzi

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.