poniedziałek, 17 czerwca 2013

Twitch.tv bez Adobe Flash

Czyli jak oglądać stream w ulubionym odtwarzaczu wideo.

Aktualne problemy z flash'em pod Linuxem:

  • nowe wersje pluginu Adobe mają wsparcie tylko dla Chrome Pepper - więc dla pozostałych przeglądarek zostają tylko starsze wersje plugina
  • zamknięte źródło ™
  • czasami nie można wyjść z trybu fullscreen
  • czasami wiesza się zajmując 100% czasu procesora
  • czasami po prostu się wywala

Istnieje jakaś alternatywa - shumway ale aktualnie nie wspiera takich rzeczy jak YouTube więc zapewne też Twitch. Dodatkowo SWFObject stwierdza że flash nie jest w ogóle obsługiwany więc zazwyczaj zobaczymy tylko "zainstaluj Adobe Flash".

Pobieranie

Listowanie plików flv dla zadanego linka z archiwum, archive.py:

#!/usr/bin/python3

from urllib.request import urlopen
import json, sys, re

decoder = json.decoder.JSONDecoder()

for arg in sys.argv[1:]:
 m = re.match(r"^.*/([^/]+)/b/([0-9]+)$", arg)
 video_id = int(m.group(2))
 with urlopen("http://api.justin.tv/api/broadcast/by_archive/%d.json" % video_id) as f:
  resp = decoder.decode(f.read().decode())
  for i in resp:
   print(i["video_file_url"])

Przykład użycia:

$ ./archive.py http://www.twitch.tv/some_channel/b/4173086
http://store30.media30.justin.tv/archives/2013-6-15/live_user_some_channel_13713088.flv
http://store38.media38.justin.tv/archives/2013-6-15/live_user_some_channel_13713106.flv
http://store6.media6.justin.tv/archives/2013-6-15/live_user_some_channel_13713124.flv

Pozostaje jeszcze tylko pobrać wypisane pliki.

Oglądanie

Potrzebne nam są livestreamer i rtmpdump. Żeby nie zaśmiecać systemu użyłem python'owego virtualenv. Poniższe kroki zakładają że rtmpdump nie jest zainstalowany w systemie.

Więc:

cd /path/to/project
git clone git://git.ffmpeg.org/rtmpdump
virtualenv env
make -C rtmpdump/
source env/bin/activate
pip install livestreamer

Następnie warto złożyć wszystko w jeden skrypt:

#!/bin/bash

d="$(dirname $0)"

source "${d}"/l/bin/activate
LD_LIBRARY_PATH="${d}"/rtmpdump/librtmp/ livestreamer -p /path/to/player -r "${d}"/rtmpdump/rtmpdump "${@}"

... i zaczynamy oglądać:

./run.sh http://www.twitch.tv/dreamhacksc2 720p

możemy także zapisywać stream do pliku:

./run.sh http://www.twitch.tv/dreamhacksc2 720p -o file.flv

czwartek, 13 czerwca 2013

Eclipse: The Dark IDE - Linux edition

Chwilę temu stumblnąłem na http://ethanschoonover.com/solarized. Jest to dość magiczny zestaw jasnych i ciemnych motywów do dużej ilości edytorów/widget'ów itp... i dodatkowo wygląda dość ładnie. Zastanawiałem się przez chwilę czy aby na pewno kolor tła i zwykłego tekstu nie będzie się zlewał ze sobą - ale przecież na stronie zostało napisane że kolory są zgodne ze specyfikacją CIELAB oraz rozwiązanie było testowane na wielu maszynach. Więc musi być prawdą! ;)

Jako że spędzam dość dużo czasu przed Eclipse'm postanowiłem skorzystać z rady wujka Google - ciemniejsze kolory mogą mniej męczyć oczy (zapewne zwłaszcza gdy programuje się w nocy). Poniżej przedstawiam kroki jak całkowicie ostylować Eclips'a ciemniejszym motywem (Linux edition).

Na zachętę - efekt końcowy

Eclipse

Na starcie dostajemy:

By załadować powyższe motywy w Eclips'ie wymagane są rozszerzenia Eclipse Color Themes oraz Chrome Theme.

Po aplikacji nowego wystroju (motyw dla Aptany oraz samego Eclipse) okazało się że motyw Aptany jest nieco ciemniejszy więc zmieniłem w kilku miejscach kolory na odpowiednie z podstawowego schematu (pobierz zmieniony motyw).
Następnym krokiem jest zmiana kolorów zakładek i innych elementów Eclipse, posłuży nam do tego Chrome Theme. Tutaj można pobrać już gotowy plik konfiguracji ui - należy go umieścić w workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings. W przypadku manualnych zmian należy pamiętać o dodaniu do arkusza CSS linijki z odpowiedzi na stackoverflow.com:

#org-eclipse-e4-ui-compatibility-editor * { background-color: #002b36; }

GTK

Na szczęście motyw dla GTK+ 2 jest łatwo dostępny: https://github.com/heichblatt/gtk2-theme-solarizeddark.
Nie potrzeba włączać go dla całego systemu, w naszym wypadku wystarczy dla samego Eclipse.

GTK2_RC_FILES=~/.themes/solarized.gtkrc /mnt/sandbox/eclipse/eclipse

Desktop file

Jeśli chcesz by Eclipse włączał się już z Twoim nowym motywem poprzez wpis w menu, trzeba w odpowiednim pliku .desktop zmienić linię z Exec. Poniżej cały plik używany przeze mnie:

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse IDE
Comment=Eclipse Programming IDE
Exec=env GTK2_RC_FILES=~/.themes/solarized.gtkrc /mnt/sandbox/eclipse/eclipse
Icon=/mnt/sandbox/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Application;Development;

Niestety nawet po zaaplikowaniu motywów w tych wszystkich miejscach wciąż może się zdarzyć że jakiś edytor będzie wyświetlał niepoprawne barwy - jak np. edytor Twig'a z paczki Symfony2. (poprawiona konfiguracja)