Download: Sysadmin_emailvid

Transkrypt

Download: Sysadmin_emailvid
SYSADMIN
Nagrywanie wideo przy użyciu poczty e-mail
Nagrywanie programów telewizyjnych za pomocą poczty elektronicznej
Przyszłość telewizji
Linux to czysta przyjemność. Multi-
# usermod -G audio,video video
media to czysta zabawa. Ale czy
Aby to przetestować, nadaj użytkownikowi video hasło, zaloguj się i uruchom wybraną aplikację TV. Może to być przykładowo xawtv. Kiedy system będzie już gotowy, usuń hasło, uniemożliwiając w ten sposób innym osobom logowanie się w charakterze użytkownika video
i wykorzystanie potencjalnych dziur w zabezpieczeniach.
Dobrym pomysłem jest wysyłanie zwrotnych wiadomości e-mail. Mogą to być informacje, że nagrywanie zostało rozpoczęte lub że nie
można wykonać polecenia. Należy przy tym
pamiętać o wpisaniu w polu użytkownika tekstu, który będzie się pojawiać we wszystkich
mailach. W przeciwnym razie nadawca wiadomości będzie widoczny jako „,,,”!
można połączyć ze sobą razem dwie
tak odmienne dziedziny, jak poczta
elektroniczna i nagrywanie programów telewizyjnych? A co ważniejsze, czy uda się opracować rozwiązanie zapewniające rozrywkę? Steven Goodwin uważa, że tak...
STEVEN GOODWIN
L
udzie zapytani o swoją wizję przyszłości
zwykle mówią coś o latających pojazdach zastępujących tradycyjne auta i inteligentnych odkurzaczach. Jednak możliwość
przesyłania do magnetowidu lub karty telewizyjnej wiadomości e-mail to nie science fiction!
Dzięki Linuksowi jest to możliwe, w dodatku
za darmo! Mając do dyspozycji popularne narzędzia, nieco cierpliwości i wolnego czasu,
możesz stworzyć własne rozwiązanie.
Przygotowania
Podstawowe wymagania można podzielić na
trzy kategorie. Zostały one przedstawione
zgodnie z zasadami programowania zstępnego:
1. Dane wejściowe: dostajesz wiadomość e-mail
(na adres [email protected])
■ Kto ją odbiera?
■ Czy dany użytkownik ma prawa do sterowania nagrywaniem?
2. Przetwarzanie: wiadomość wywołuje o żądanej godzinie skrypt nagrywający.
■ W jaki sposób można zweryfikować nadawcę wiadomości e-mail?
■ Jaki format ma wiadomość?
■ Określanie czasu rozpoczęcia, zakończenia
oraz kanału nagrywania.
3. Dane wyjściowe: nagrywanie sygnału TV
■ Uzyskanie dostępu do karty TV.
■ Wysłać maila z potwierdzeniem?
Każdy z powyższych etapów składa się
z kilku kroków i wiąże się z określonymi
72
Kwiecień 2004
trudnościami, które należy rozwiązać.
Z uwagi na ograniczenia dotyczące objętości
niniejszego artykułu nie omówię wszystkich
możliwości i potencjalnych rozwiązań. Postaram się jednak przedstawić kolejne etapy
tworzenia systemu oraz efekt końcowy naszej pracy. Oczywiście istnieje więcej niż
jedno rozwiązanie. W artykule przedstawię
jedno z nich jako przykład.
Aby rozpocząć pracę, musisz mieć do dyspozycji komputer z zainstalowanym Linuksem
i kartą TV oraz dostęp do Internetu.
Zaczynamy pracę
Pierwsze zadanie polega na utworzeniu konta
użytkownika, z którego będą wysyłane wiadomości e-mail z poleceniami sterującymi nagrywaniem. Dla administratora to drobiazg:
adduser video
Użytkownik video musi mieć dostęp do karty
TV (/dev/video) i miksera audio (/dev/mixer),
aby mógł nagrywać za pomocą tych urządzeń.
Dla urządzeń trzeba ustawić w tym celu odpowiednie uprawnienia. Często uprawnienia te
zostały już skonfigurowane na potrzeby innych
użytkowników. W takim przypadku należy
przypisać użytkownika video do odpowiednich
grup (przykładowo grupy video dla urządzenia
/dev/video device i grupy audio dla urządzenia
/dev/mixer).
www.linux-magazine.pl
usermod -c „Nagrywanie wideo” video
Automatyczne przetwarzanie poczty e-mail
jest łatwe dzięki programowi procmail, instalowanemu domyślnie w większości systemów.
Procmail to filtr działający między agentem
przesyłania (np. Exim, Sendmail lub Postfix)
a skrzynką pocztową, który przetwarza każdą
wiadomość zanim zostanie ona dostarczona.
Można go zaprogramować w taki sposób, aby
przenosił wiadomości (np. spam) do określo-
Listing 1:
/home/video/.procmailrc
PATH=$HOME/bin:/usr/bin:/usr/U
local/bin:
MAILDIR=$HOME/Mail
DEFAULT=$MAILDIR/inbox
LOGFILE=$MAILDIR/log
LOCKFILE=$MAILDIR/.lockmail
:0
* ^Subject: help
| formail -s emailvideo.plU
help;
:0
* ^Subject: record
| formail -s emailvideo.plU
record;
Nagrywanie wideo przy użyciu poczty e-mail
nych folderów lub przesyłał dalej na inne konta
e-mail. Podobnie jak w przypadku wielu innych narzędzi, Procmail ma jeden globalny
plik konfiguracyjny (/etc/procmailrc) i kilka lokalnych – znajdują się one w katalogach głównych użytkowników i mają nazwę.procmailrc.
Te pliki składają się z wielu reguł. Każda reguła określa sposób postępowania z wiadomością
e-mail, gdy spełnione są określone warunki. Na
przykład: przenoś wszystkie wiadomości od
nadawcy Dawid do folderu Curry. Procmail
analizuje wszystkie reguły w kolejności, w jakiej występują one w pliku.procmailrc. Gdy odnajdzie regułę spełniającą dane warunki, przetwarza zgodnie z nią wiadomość i kończy pracę, nie analizując pozostałych reguł.
W przypadku tego projektu musimy wywoływać zewnętrzny skrypt każdorazowo po odebraniu wiadomości e-mail przez użytkownika
video. Jeżeli wiersz tematu wiadomości zawiera
słowo „help”, wtedy wysłany zostanie mail zawierający instrukcję obsługi systemu. Jeżeli
wiersz zawiera słowo „record”, system rozpocznie nagrywanie programu telewizyjnego.
W związku z tym należy stworzyć dwie reguły
dla wiersza tematu w celu rozróżnienia poleceń
oraz odpowiednio określić parametr przekazywany do skryptu. Patrz Listing 1.
Domyślnie Procmail nie rozróżnia wielkości
liter, zatem słowo help może mieć postać zarówno „HELP”, jak i „hElP”. Strukturę pliku.procmailrc można znaleźć w dokumentacji systemowej i instrukcjach dostępnych w Internecie, na
przykład pod adresem [1].
Przed wywołaniem skryptu cała wiadomość jest przepuszczona przez dodatkowy
program o nazwie formail. Powoduje to skonwertowanie jej na format skrzynki odbiorczej.
Jest to bardzo proste, ale jednocześnie bardzo
użyteczne narzędzie, kompatybilne z funkcjami RFC 822 (opisującymi format wiadomości e-mail) i tworzące wiadomości o ujednoliconym układzie. Dzięki temu mamy do
czynienia tylko z jednym formatem wiadomości, a nie z kilkoma. Użytkownik przesyła
do programu Formail wiadomość e-mail
i otrzymuje w rezultacie wiadomość w formacie skrzynki odbiorczej. Musimy zatem napisać skrypt emailvideo.pl współpracujący poprawnie z wejściem stdin.
W pliku.procmailrc można również umieścić regułę odnoszącą się do wszystkich wiadomości przychodzących. Najlepiej umieścić ją na końcu pliku, ponieważ procmail
kończy przetwarzanie po znalezieniu pierwszej reguły, której warunki są spełnione dla
danej wiadomości. Oznacza to, że powyższa
reguła będzie stosowana dla wszystkich wia-
domości, dla których żadna reguła nie była
prawdziwa. Każdą z wiadomości nieodpowiadającą żadnemu z powyższych dwóch
szablonów można wysłać do kosza na bity
(bit-bucket). Domyślnie wiadomości tego typu byłyby dostarczane do skrzynki odbiorczej użytkownika. Jest to zbędne, ponieważ
video nie jest rzeczywistym użytkownikiem.
System przyjazny użytkownikowi odpowiedziałby nadawcy wiadomością zawierającą kod
błędu. Jednak bez odpowiednich zabezpieczeń
użytkownik video może próbować przesyłać
odpowiedzi na nieistniejące adresy pocztowe
lub „zawieszać się” podczas niekończącej się
procedury wysyłania odpowiedzi samemu sobie. Dlatego warto dokładnie określić temat
„help” i „record” – w ten sposób można odrzucić wiadomości z tematem „re: help”, które często okazują się być spamem.
:0
*
/dev/null
Wszystkie programy narzędziowe można uruchomić z wiersza polecenia przy użyciu standardowych strumieni wejścia i wyjścia, dlatego procedura testowania jest prosta. Najpierw
wyślij do nowego użytkownika video wiadomość e-mail, wpisując jako temat słowo
„help”. Powinien on w miarę szybko znaleźć
się w katalogu /var/mail/video. Jeżeli przepuścimy ten plik przez program formail, okaże
się, że wynik działania całej opisanej procedury znalazł się w skrypcie Perl. Ma on nienaruszony nagłówek wiadomości e-mail i jest gotowy do przetwarzania. Prześlij go następnie do
pliku i zachowaj w bezpiecznym miejscu. Za
chwilę będzie on nam potrzebny do przetestowania skryptu Perl.
SYSADMIN
formail -s </var/mail/video U
>testmail
Przyjaciele nigdy
Cię nie opuszczą,
kiedy jesteś w potrzebie
I właśnie teraz potrzebny nam będzie skrypt
w Perl! Musi on pobrać wiadomość e-mail
z wejścia stdin oraz przygotować naszą kartę
TV do procedury nagrywania. Z pozoru może
się wydawać, że to właśnie skrypt Perl powinien służyć do nagrywania programu telewizyjnego, ale w praktyce jest jednak nieco inaczej.
Prawdopodobnie między wysłaniem wiadomości e-mail a uruchomieniem programu pojawi
się pewne opóźnienie. Stworzymy zatem drugi
skrypt, który będzie sterować procesem nagrywania, i za pomocą Perla przeanalizujemy wiadomość e-mail celem określenie kiedy ten drugi skrypt ma zostać uruchomiony. Przy pomocy Perla można również sprawdzić wiadomość
e-mail i natychmiast odpowiedzieć na nią w razie wykrycia problemu lub błędu w konfiguracji. Drugi skrypt napiszemy, wykorzystując
bash – pomoże nam to rozróżnić oba skrypty.
Analizę wiadomości e-mail w Perl najlepiej
przeprowadzać przy pomocy istniejącego modułu. CPAN [2] udostępnia tak wiele modułów
przeznaczonych do wykonywania rozmaitych
zadań, że dla wielu użytkowników problemem
jest określenie, który moduł najlepiej nadaje
się do wykonania konkretnego zadania. Osobiście używam Mail::Internet [3]. Zdecydowałem
się na ten moduł, ponieważ robi dokładnie to,
czego od niego wymagam. Inni użytkownicy
mają z pewnością swoich własnych faworytów.
Mail::Internet można zainstalować z wiersza
polecenia w następujący sposób:
# perl -MCPAN -e 'install U
Bezpieczeństwo
Zapewnienie odpowiedniego poziomu bezpieczeństwa to bardzo istotny problem..
Wszystkie udostępniane porty, programy
i usługi mogą stanowić potencjalną lukę
w systemie zabezpieczeń, która może być
wykorzystana do zaatakowania systemu.
Niektóre usługi mogą wydawać się nieszkodliwe, jeżeli jednak nasz komputer będzie umożliwiał nagrywanie sekwencji wideo, haker będzie miał możliwość wykorzystania naszej całej przestrzeni dyskowej.
Zwiększenie poziomu bezpieczeństwa
można osiągnąć między innymi poprzez
następujące działania:
■ Nagrywaj pliki na oddzielnej partycji.
system wciąż ma miejsce na dysku niezbędne do zapisu plików.
■ Używaj algorytmów PGP w celu autoryza-
cji nadawcy.
■ Wyślij wiadomość do nadawcy i żądaj po-
twierdzenia przed dodaniem go do kolejki.
■ Nie odpowiadaj na wiadomości e-mail,
jeśli nie ma takiej potrzeby. Spamerzy mogą wykorzystać wtedy Twój serwer do rozsyłania spamu.
■ Używaj haseł, których ważność wygasa po
upływie określonego czasu. Ograniczy to
możliwość niepowołanego wykorzystywania systemu do kilku dni a nawet godzin.
Nawet w przypadku jej przepełnienia
www.linux-magazine.pl
Kwiecień 2004
73
Nagrywanie wideo przy użyciu poczty e-mail
SYSADMIN
E-mail
$ bzip2 -cd proftpd-1.2.9.tar.bz2
| tar xf $ cd proftpd-1.2.9
$ ./configure -sysconfdir=/etc/proftpd -localstatedir=/var/run
[...]
$ make
[...]
$ su
Password:
# make install
#!/usr/bin/perl
use Mail::Internet;
use strict;
my $mail = Mail::Internet->U
new( <STDIN> ]);
Ten obiekt pozwoli nam uzyskiwać dostęp do
wiadomości. Wszystkie operacje wykonywane
na wiadomości e-mail mogą być realizowane za
pomocą $mail lub przynależnych mu funkcji.
Następnie kodu modułu można użyć do pracy
z nagłówkami:
my $headers = $mail->head->U
header_hashref;
my $from = $headers->{From}[0];
Mail::Internet'
nie nowego nagłówka ze wszystkimi odpowiednimi informacjami.
Jest to często używana funkcja, dlatego moduł Mail::Internet zawiera metodę do realizacji
tego zadania. Jak można było się spodziewać,
nosi ona nazwę reply.
my $REPLY = $mail->reply();
$REPLY->body('A new body');
$REPLY->send();
Możemy zatem wykonać nasz pierwszy test.
Przekaż stworzoną wcześniej testową wiadomość e-mail do bieżącego skryptu – wiadomość powinna zostać dostarczona do skrzynki odbiorczej.
./emailvideo.pl <testmail
Oczywiście należy pamiętać, żeby pracować jako root. Jeżeli po raz pierwszy instalujesz oprogramowanie, używając modułu CPAN, będziesz musiał odpowiedzieć na serię pytań
w celu skonfigurowania go. Na szczęście konfiguracja domyślna umożliwia bezproblemową
pracę. Po zainstalowaniu Mail::Internet udostępnia całe swoje bogactwo rozmaitych funkcji związanych z obsługą poczty elektronicznej.
My jednak skorzystamy jedynie z kilku z nich.
Na podstawie informacji zawartych w nagłówku musimy określić nadawcę oraz odczytać
treść wiadomości e-mail w celu określenia parametrów nagrywania. Najpierw musimy stworzyć odpowiedni obiekt:
Sprawdzenie wiersza from nie daje nam zbyt
wiele, jeżeli chodzi o zapewnienie bezpieczeństwa. Wiersz ten może być, i najczęściej jest,
podrabiany przez spamerów. Najlepszą metodą
weryfikacji zapytania jest umieszczenie w treści wiadomości e-mail hasła zapisanego w zwykłym tekście. Hasło będzie zmieniane – użyte
raz straci ważność i nie będzie możliwości jego
powtórnego wykorzystania. Nie jest to idealne
rozwiązanie, ale na początek wystarczy. Inne
formy zabezpieczeń przedstawiono w ramce
Bezpieczeństwo.
Korzystając z informacji zapisanych
w pliku $headers, można utworzyć odpowiedź na tę wiadomość e-mail przez stworze-
Listing 2: Skrypt nagrywający
1 #!/bin/bash
2 # Parametry oznaczają
w kolejności: Stację telewizyjną.
Czas trwania (w minutach). Adres
zwrotny.
3
4 TVNAME[0]=SVideo; TVMAP[0]=0
5 TVNAME[1]=BBC1; TVMAP[1]=55
6 TVNAME[2]=BBC2; TVMAP[2]=62
7 TVNAME[3]=ITV1; TVMAP[3]=59
8 TVNAME[4]=Ch_4; TVMAP[4]=65
9 TVNAME[5]=Five; TVMAP[5]=37
10
11 TARGETDIR=/media/tv
12
13 DURATION=$2
14 CHANNEL=${TVMAP[$1]}
15 NAME='Vid_`/bin/date
+%Y%m%d_%H%M`_`echo ${TVNAME[$1]} |
tr [.] [_]`'.avi
16
74
Kwiecień 2004
17 if [ $CHANNEL -eq 0 ]; then
18 INPUT='input=1';
19 else
20 FREQ=$[($CHANNEL*8)+303]
21 FREQ=$FREQ.25
22
23 INPUT='input=0:freq=$FREQ';
24 fi
25
26 mencoder -o $TARGETDIR/$NAME -tv
on:driver=v4l:$INPUT:width=320:heig
ht=240
-oac copy -ovc lavc -endpos
$DURATION >/dev/null 2>/dev/null
27
28 REPLY=$REPLY'$NAME czeka na
Ciebie w domu:)'
29
30 echo '$REPLY' | mail -s
'Nagrywanie zakończone!' $3
www.linux-magazine.pl
Zawartość odpowiedzi jest określana treścią
przychodzącej wiadomości. Może to być zapytanie o pomoc (to, że sami stworzymy ten system wcale nie znaczy, że zawsze będziemy
wszystko pamiętać) lub polecenie nagrywania
wideo. Reguła procmail przesyła dodatkowy
argument do skryptu Perl, którego można użyć
do określenia celu wiadomości. Argument ten
można pobrać w następujący sposób:
my $ARGUMENT = shift;
if ($ARGUMENT=~/help/i)U
{ $reply = do_help(); }
elsif ($ARGUMENT=~/record/i)U
{ $reply = do_record($FREQ, U
$DURATION, $TIME); }
else { $reply = do_error(); }
Parametry podprocedury do_record należy
określić na podstawie treści wiadomości e-mail. Niestety nie ma łatwego sposoby na zrobienie tego – chyba, że lubisz wyrażenia regularne.
Na szczęście potrzebne nam wyrażenia nie są
zbyt skomplikowane, ponieważ możemy zaprojektować najlepszy dla nas układ pod kątem
przetwarzania. Przy tworzeniu każdego z wyrażeń zastosujemy taką samą konwencję składni:
NAME:VALUE
W nazwie nie będzie rozróżniana wielkość liter, a wartość będzie interpretowana dosłownie
jako liczba lub ciąg tekstowy. Tekst będzie
przekazywany bezpośrednio do innych narzędzi. Przykład takiej wiadomości e-mail znajduje się w ramce E-mail. Pętla analizująca odczyta kilka pierwszych wierszy wiadomości (w ten
sposób rozwiązujemy problem długich sygna-
Nagrywanie wideo przy użyciu poczty e-mail
LIRC
W ramach projektu LIRC (Linux Infra-red
Remote Control) [6] opracowano sterownik
i zestaw narzędzi do komunikacji przez podczerwień. Umożliwiają one odbieranie na
komputerach z Linuksem sygnałów wysyłanych przez podczerwień, których można użyć
do kontrolowania aplikacji (takich jak Mozilla) lub przesyłania wiadomości do innych
urządzeń. Do większości kart TV są dołączane pilot oraz port na podczerwień odbierający sygnały. Są one obsługiwane przez LIRC,
jednak zazwyczaj pracują przy użyciu innego
protokołu transmisji w podczerwieni niż standardowe piloty telewizyjne i dlatego też nie
można stosować ich wymienne.
Jednak w ramach LIRC stworzono proste
układy elektroniczne, które służą do budowy
tur) w następujący sposób:
Hasło musi być sprawdzone i zweryfikowane
przed przekazaniem kontroli podprocedurze
do_record, która ustawi licznik czasu. W tym
przypadku szukamy pliku o identycznej nazwie, znajdującego się w specjalnym katalogu.pass.d, a następnie usuwany go. Bardziej zaawansowane rozwiązanie (takie jak przedstawione w ramce: Bezpieczeństwo) byłoby wymagane w zastosowaniach komercyjnych. Powyższe rozwiązanie odpowiada jednak w zupełności naszym potrzebom.
sub is_password_valid()
{
if (-f '$HOME/.pass.d/$_[0]')U
{ return 1; }
return 0;
}
W kodzie zamieszczonym w witrynie internetowej Linux Magazine rozbudowaliśmy naszą
koncepcję o opcję żądanie hasła dla każdego
polecenia. W ten sposób można na przykład zezwolić wszystkim użytkownikom na bezproblemowe korzystanie z systemu pomocy.
Wizja i fonia
Najczęściej używanym narzędziem do uruchamiania oprogramowania o określonej godzinie
jest at. To proste narzędzie działa w tle, uaktywnia się co minutę i sprawdza, jakie zadania
są do wykonania. Cron działa w podobny sposób, ale obsługuje zdania wykonywane co określony czas. Za pomocą at można uruchomić tylko jeden program (z opcjonalnymi argumentami), więc do bardziej zaawansowanego zadania, jakim jest nagrywanie programu TV, mu-
urządzeń podłączanych bezpośrednio do
portu szeregowego w celu obsługi dwukierunkowej transmisji w paśmie podczerwonym. Oznacza to, że za pomocą LIRC można wysyłać przez podczerwień sygnały do
zwykłych magnetowidów używanych w domu. Niestety sprzężenie zwrotne sygnału nie
istnieje, wiec nie ma możliwości uzyskania
potwierdzenia czy magnetowid odebrał wysłane do niego sygnały. Jednak nie sposób
nie zauważyć korzyści płynących ze sterowania magnetowidem – można go wykorzystać, jeżeli Twój komputer nie jest wyposażony w kartę TV lub w przypadku braku miejsca na dysku twardym. Ponieważ powyższe
rozwiązane jest oparte na modułach, musimy zmienić jedynie mały fragment kodu
w skrypcie getvid.sh.
simy użyć skryptu bash.
Parametry dostarczane w wiadomościach email można podzielić na dwie kategorie: te,
które określają czas rozpoczęcia nagrywania,
oraz te, które określają jego przebieg. Pierwsza
kategoria parametrów jest używana w połączeniu z poleceniem at w celu wywołania skryptu
i obejmuje godzinę rozpoczęcia nagrywania
(sprawdź format polecenia at w dokumentacji
systemowej). Druga kategoria, określająca sposób nagrywania, obejmuje informacje o kanale,
czasie trwania i przebiegu procesu nagrywania.
Będą one stanowić parametry naszego skryptu.
Do polecenia kończącego nagrywanie dołączymy także adres e-mail. Jeżeli chcesz uruchomić
skrypt natychmiast, wpisz:
getvid.sh 2 25 U
[email protected]
Spowoduje to nagranie 25 minutowego programu, przykładowo na TVP 2. Aby rozpocząć nagrywanie w określonym momencie w przyszłości, użyj następujących poleceń:
$ at 18:00
warning: commands will be U
executed using /bin/sh
at> /home/video/bin/getvid.sh U
2 25 [email protected]
at> <EOT> # this is produced byU
closing the input stream by U
pressing ctrl+d
Należy zauważyć, że w skrypcie użyto pełnej
ścieżki. Warto zwrócić także uwagę na to, że
parametry pobrane z wiadomości e-mail nie są
sprawdzane i są przesyłane bezpośrednio do
SYSADMIN
skryptu. Polecenie at jest obsługiwane ze standardowego wejścia, czyli domyślnie z klawiatury. Prosty mechanizm pipe pozwoli zautomatyzować pracę:
echo $cmd | at $when
Szlifowanie szczegółów
Większość kodu jest już gotowa, możemy zatem przejść do ostatniego etapu, czyli nagrywania programu TV. W tym celu przyda nam się
skrypt bash.
Ta część pracy jest wyjątkowo prosta. W tej
wersji nagrywamy program bezpośrednio
z karty TV zainstalowanej w lokalnym komputerze. Nagrywanie z magnetowidu jest również
możliwe, ale w takim przypadku potrzebne jest
oprogramowanie omówione w ramce LIRC.
Najpierw można przygotować mikser (aby nagrywać dźwięk z wejścia liniowego), a następnie przetestować go za pomocą niezależnej
aplikacji, takiej jak xawtv, i sprawdzić, czy prawa dostępu dla użytkownika video zostały poprawnie ustawione. Obejmują one także katalog docelowy dla pliku wynikowego.
Do kontroli nagrywania programu telewizyjnego wybrałem narzędzie mencoder. Jest on
częścią pakietu MPlayer dostępnego pod adresem [4]. Umożliwia on kontrolę wielu niskopoziomowych parametrów związanych z dostrajaniem kanału, pozwala określać poziom kompresji oraz czas nagrywania. Wszelkie niezbędne informacje na jego temat można znaleźć
w dokumentacji systemowej. Parametry podane można stosować w większości systemów.
W zależności od mocy obliczeniowej procesora
należy dobrać odpowiednią rozdzielczość, w jakiej nagrywana będzie sekwencja video.
mencoder -o /media/tv/filename.U
avi -tv on:driver=v4l: input=0U
:freq=799.25:width=320:height=2U
40 -oac copy -ovc lavc -endpos U
25 >/dev/null 2>/dev/null
Najprawopodobniej zauważysz parametry, które zostaną zmienione z poziomu naszego
skryptu bash: nazwa pliku (filename), pozycja
końcowa (endpos) lub czas trwania (duration)
oraz parametry dotyczące wybranego wejścia
i częstotliwości (input i freq). Jedynie znaczenie dwóch ostatnich nie zostało jeszcze dokładnie objaśnione. input określa, czy źródłem sygnału ma być tuner (0) czy też sygnał ma być
pobrany ze złącza S-Video (1). Twoja karta TV
może być również wyposażona w inne wejścia.
Parametr freq wymaga podania częstotliwości
nagrywanego sygnału (w MHz). Nie podajemy
www.linux-magazine.pl
Kwiecień 2004
75
SYSADMIN
Nagrywanie wideo przy użyciu poczty e-mail
natomiast numeru kanału ani identyfikatora
stacji. Określanie częstotliwości jest procesem
dwuetapowym. Najpierw musimy określić numer kanału (który zazwyczaj mieści się w zakresie między 21 i 68) interesującej nas stacji
telewizyjnej (np. TVN, POLSAT, itd.). Następnie musimy przekonwertować numer kanału
na odpowiednią częstotliwość.
Numer kanału, na którym transmitowana
jest dana stacja, zmienia się w zależności od
regionu kraju i jest ściśle związana z konkretnym przekaźnikiem telewizyjnym. Każdy posiadacz karty TV posiada zapewne numery dostępnych mu kanałów telewizyjnych
w pliku.xawtv. Jeżeli nie, może przeskanować pasmo częstotliwości za pomocą programu scantv. Czytelnicy mieszkający w Wielkiej Brytanii są w lepszym położeniu – dane
dotyczące częstotliwości nadawania programów telewizyjnych znajdują się w witrynie
internetowej telewizji BBC pod adresem [5].
Jedynie częstotliwość, na której transmitowany jest kanał „Five” nie została podana,
ale z doświadczenia wiadomo, że jest to zazwyczaj przedział częstotliwości między kanałem 37 a 39. Nie ma żadnych narzuconych
z góry prawidłowości w rozmieszczeniu poszczególnych programów w paśmie częstotliwości. Trzeba je po prostu wyszukać, na chybił trafił lub też żmudnie skanując całe pasmo częstotliwości.
Numer kanału można konwertować na częstotliwość przy użyciu prostego wzoru. Obliczenia te są niezależne od regionu kraju, w którym transmitowany jest dany program. częstotliwość = (numer_kanału * 8) + 303.25. Powyż-
sza zależność odnosi się do programów kodowanych w standardzie PAL, w którym kolejne
kanały ulokowane są w paśmie częstotliwości
w odstępach 8 MHz. Prowadzenie obliczeń
w bash wymaga wprawdzie nieco syntaktycznych kombinacji, takich jak w wierszu 20, jednak dodawanie części ułamkowej (0,25) przebiega bezproblemowo. Dane zestawione w Tabeli 1 można sprawdzić za pomocą przedstawionego algorytmu.
Po za tym w skrypcie bash nie ma zbyt wielu poleceń. Do określania nazwy pliku wykorzystujemy datę i godzinę, eliminując w ten
sposób konieczność użycia funkcji 'get_unique_filename', a następnie zapisujemy plik
AVI w katalogu /media/tv directory, który jest
zwykle dostępny dla innych użytkowników.
Istnieje również możliwość nagrywania zespolonego sygnału wizyjnego, który może pochodzić przykładowo z zewnętrznego odtwarzacza DVD lub nawet kamery stanowiącej część
systemu zabezpieczeń.
Kilka uwag
Teraz możemy poświecić się już wyłącznie
testowaniu i wdrażaniu oprogramowania. Do
tego celu będzie nam potrzebna nasza testowa
wiadomość e-mail. Gotowy skrypt składa się
z 143 wierszy i można go pobrać z witryny Linux Magazine. Jednak wszystkie ważne szczegóły zostały omówione w niniejszym artykule.
Oto tylko propozycja (i jedno z możliwych
rozwiązań) dla zautomatyzowanych systemów poczty elektronicznej. Większość kart
telewizyjnych pozwala odbierać także radio.
Dostosowanie istniejącego systemu do na-
Listing 3: Getradio.sh – odpowiednik getvid.sh
1 #!/bin/bash
2
3 FREQ=$1
4 DURATION=$2
5 EMAIL=$3
6
7 FILEPATH="/media/radio/"
8
9 NAME="Radio_`/bin/date
+%Y%m%d_%H%M`_`echo $FREQ | tr [.]
[_]`"
10
11 FILENAME=$FILEPATH$NAME
12 echo "$NAME" | mail -s
"Rozpoczęto nagrywanie audycji
radiowej..." $EMAIL
13
14 BODY=""
76
Kwiecień 2004
15 BODY=$BODY`fm $FREQ $VOL`
16 BODY=$BODY`sound-recorder -S
$DURATION -f=wav $FILENAME.wav
2>&1`
17
18 # Encode and send
19 lame $FILENAME.wav $FILENAME.mp3
>/dev/null 2>&1
20
21 uuencode $FILENAME.mp3
$FILENAME.mp3 | mail -s "Program
radiowy ($FILENAME)!" $EMAIL
>/dev/null 2>&1
22
23 # Clean up
24 /bin/rm $FILENAME.wav
25 /bin/rm $FILENAME.mp3
www.linux-magazine.pl
Tabela 1:
Lista stacji dostępnych na
terenie Wielkiej Brytanii.
Stacja
Wejście
Kanał
Częstotliwość
BBC 1
0
55
743,25
BBC 2
0
62
799,25
ITV
0
59
775,25
Channel 4
0
65
823,25
Five
0
37
599,25
Composite 1
1
grywania programów radiowych wymaga
niewiele wysiłku. Potrzebujemy w tym celu
nowego użytkownika (np. o nazwie radio) do
odbierania wiadomości e-mail. Ponadto musimy zastąpić narzędzia związane z nagrywaniem wideo, ale na to trzeba przeznaczyć nie
więcej niż godzinę czasu. Zobacz Listing 3.
Osobiście korzystam z jednego pakietu do
sterowania radiem (fmtools) oraz z drugiego
do nagrywania plików WAV (sound-recorder). Następnie wywoływany jest enkoder
MP3 w celu zapisania w formacie MP3 żądanej audycji radiowej. Plik MP3 ma znacznie
mniejszą objętość od pliku z filmem, dlatego
można go wysłać pocztą e-mail do użytkownika, który zażądał nagrania audycji. Wymaga to jednak poprawnego skonfigurowania
miksera audio.
Użytkownik może także pokusić się o zrealizowanie kilku innych ciekawych pomysłów. Na
przykład może spróbować opracować sposób
przechwytywania stron telegazety przez kartę
TV. Albo dodawać pliki do kolejki pobierania
w programach peer2peer. Albo zmierzyć się
z usługą „piosenki na żądanie”. Oprogramowanie do realizacji powyższych zadań jest dostępne za darmo. Informacje na ten temat znajdują
się powyżej. Baw się dobrze!
■
INFO
[1] Podręcznik do Procmail: http://www.
perlcode.org/tutorials/procmail/proctut/
[2] Archiwum informacji o Perl:
http://www.cpan.org
[3] Moduł Mail::Internet:
http://search.cpan.org/~markov/
MailTools-1.60/Mail/Internet.pm
[4] MPlayer: http://www.mplayerhq.hu/
[5] Częstotliwości nadawania programów BBC:
http://www.bbc.co.uk/reception/
tv_transmitters/
[6] Projekt LIRC: http:///www.lirc.org
6
ZALET PRENUMERATY
UŻYWASZ LINUKSA? CZYTAJ LINUX MAGAZINE!
1
NISKA CENA
2
STAŁA CENA
3
UNIKALNY UPOMINEK
W prenumeracie rocznej – 3 numery ZA DARMO! W półrocznej – 1 numer
ZA DARMO! Linux Magazine to najtańsze polskie czasopismo o Linuksie.
Gwarancja stałej ceny Linux Magazine przez cały okres trwania
prenumeraty.
Wszyscy prenumeratorzy otrzymują unikalny prezent – linuksową
podkładkę pod mysz z logo Linux Magazine.
4
GWARANCJA ZWROTU PIENIĘDZY
5
BĄDŹ PIERWSZY
6
PRENUMERATA NA PRÓBĘ
Jeśli będziesz chciał zrezygnować z prenumeraty, otrzymasz zwrot pieniędzy
za numery, których jeszcze nie otrzymałeś.
Do naszych prenumeratorów pismo Linux Magazine dociera, zanim ukaże się
w sprzedaży detalicznej. Prenumeratorzy otrzymują Linux Magazine w specjalnej kopercie, chroniącej pismo przed uszkodzeniem.
Wypróbuj prenumeratę Linux Magazine.
TRZY KOLEJNE NUMERY za jedyne 30 zł.
Zamów przez Internet: www.linux-magazine.pl/Subs
WWW. LINUX-MAGAZINE.PL/SUBS

Podobne dokumenty