Béton brut

Kanał subskrybcji Napisz do mnie…

Chromecast dla Linuksiarza

2020-04-18

Przyznaje się, przegrałem. Jest sobota, a ja miałem dobry pomysł na zabawny tekst. Tekst, który wymagał może zbyt wiele kompetencji, których nie posiadam. Od siódmej rano walczyłem z oprogramowaniem do edycji wideo, zbyt starym cmake, nagrywaniem akcelerowanego wideo, faktem, że pliki instalacyjne wyparowały mi z archiwum i tym, że firma, od której kupiłem oprogramowanie mentalnie jest w 1990 i strzeże swoich fantów jak oczka w głowie.

Rzuciłem się z motyką na słońce, a na dodatek słońce było uzbrojone i mnie obstrzelało ostrą amunicją. Wybiła trzynasta, a ja mam jedno źle skadrowane wideo — testowe wideo, nawet nie to, co chciałem — które się chybocze, dyga i ma zły aspekt. Czas powiedzieć sobie: OK, zjedz coś, usiądź. Po co się denerwować.

To prowadzi nas do miejsca, w którym, jak mawiają Amerykanie jestem all dressed up with nowhere to go. Pójdę więc po linii najmniejszego oporu i po prostu opiszę, co mam na biurku.

Chromecast

Chromecast to odbiornik strumieni medialnych, produkowany przez Google. Małe pudełeczko, które wpina się do telewizora/monitora przez HDMI i pozwala na przesyłanie audio/wideo z rozmaitych serwisów. Mimo mojej niechęci do dawania Google wiazdu do mojego życia, podobnie jak w przypadku porannego projektu, trzeba wiedzieć kiedy się poddać. Mimo niemiłej mi natury produktu nie udało mi się zbudować niczego samemu, bądź też z półproduktów, co byłoby choćby w ułamku tak funkcjonalne.

Normalni ludzie mogą używać aplikacji, które wspierają Chromecast. Praktycznie każda popularniejsza aplikacja mobilna (YouTube, Spotify, Netflix, etc) potrafi rzucić swoje bity na ekran. Działa to bardzo dobrze. Dla normalnych ludzi z komputerami biurkowymi jest Chrome, który będąc IE6 dla nowożytności1, potrafi przesyłać zawartość zakładki.

Co pozostaje dla ludzi z pryszczami, Firefoksem i terminalem? Bardzo dużo bardzo dobrych opcji, o dziwo!

catt

catt to program po którego opisaniu mógłbym skończyć tę notkę. Robi praktycznie wszystko, czego mogę chcieć. Potrafi odpalać strumienie serwisów, które nie wymagają autoryzacji (YouTube, Twitch, Vimeo, etc), oddaje kontrolę nad głośnością, wspiera przewijanie, listy odtwarzania, kolejkowanie, potrafi użyć wbudowanej w Chromecast przeglądarki, by wyświetlić stronę WWW, a ostatecznie odtworzyć plik z dysku lokalnego tworząc serwer HTTP i serwując klatki.

Kilka przykładowych zaklęć:

  1. catt cast https://www.youtube.com/watch?v=0cQA6d3adPs — odtworzy nam wideo znajdujące się pod tym adresem

  2. catt seek 1:00 — przesunie nas na osi czasu

  3. catt add https://www.youtube.com/watch?v=h0rSYEoBMYM — doda następny plik do kolejki (tymczasowo wspierany jest chyba tylko YouTube)

  4. catt cast_site https://fuse.pl/beton/chromecast-linux.html — wyświetli stronę

  5. catt cast Pobrane/HoliłudzkiFilm.Grupa.Nick.x264.mkv — wyświetli lokalny plik

Dostępny jest przez PyPI oraz jako źródło na GitHubie.

Na boku: znalazłem ciekawe zastosowanie dla catt cast_site. Opisywane wcześniej ttyd może zostać „rzucone” na ekran, co wyciąga nam sesję terminala. Oczywiście, nie ma jak z nią działać, ale wymyśliłem obejście tego problemu przy użyciu screen. Na początku tworzymy i odczepiamy sesję przez screen -d -m -S shared, następnie odpalamy ttyd screen -x shared, to startuje nam usługę. Używamy catt cast_site aby wyświetlić stronę ttyd. Teraz wystarczy odpalić lokalnie screen -x shared i już możemy pisać. A tam już co Wam się podoba, htop czy tail -f. Działa znośnie.

VLC

VLC potrafi odtwarzać do Chromecasta, podobnie jak catt. Z tą jednak różnicą, że umie przekodowywać pliki w locie (kosztem procesora). Jest to szczególnie przydatne w sytuacji, gdy mamy pliki „z Internetu”. AVI, mkv, mp4 z x265, rzeczy do których Chromecast nie ma kodeków. Dodałem sobie alias vlcast dla własnej wygody:

cvlc --sout "#chromecast" --sout-chromecast-ip=IP --demux-filter=demux_chromecast

mkchromecast i pulseaudio-dlna

Oba programy potrafią utworzyć sink (jak to będzie po naszemu? Przecież nie „zlew”?) PulseAudio dzięki czemu dźwięk odtwarzany lokalnie może zostać przesłany do urządzenia będącego pod kontrolą Chromecasta. pulseaudio-dlna jest dużo bardziej monotematyczny i robi tylko to, mkchromeast ma więcej funkcji, ale żadnej nie spełnia tak dobrze jak catt. Oba znajdują się w oldoldstable2, zakładam więc, że Wasza dystrybucja też je posiada.

pychromecast

Nic nie stoi na przeszkodzie żebyście sami spróbowali porobić własne zabawki. Odpowiednia biblioteka, która implementuje API Chromecasta pozwoli Wam przejąć kontrolę nad urządzeniem. Gdybym miał kiedyś zrobić info-kiosk to pewnie rozważyłbym takie rozwiązanie. Mam nadzieję, że nie będę nigdy robił info-kiosku.

pychromecast jest oczywiście na PyPI i pod postacią źródła na GitHubie.

Jak widzicie, zebranie wystarczająco dużej ilości narzędzi odpalanych z terminala powoduje, że osiągnąłem stan wyjściowy normalnych ludzi, którzy klikają w Chrome „prześlij na Chromecast”.

Największą wadą Chromecasta jest to, że gdy nie odtwarza treści to przechodzi w tryb „elektronicznej ramki ze zdjęciami” pokazując mi najlepsze momenty moich wypraw, zachody słońca, jelenie, lasy, reklamówki z piwami. W obecnej sytuacji zmienia to znak zapytania w zdaniu „pamiętasz, jak było fajnie” na wykrzyknik.


  1. Best viewed on IE6 in 1024x768 

  2. Nie mam serca żeby się zebrać do aktualizacji mojego głównego laptopa. Działa? Działa. Chyba, że chcę cmake z tego tysiąclecia.