--- title: TelnetHasciicam kind: wikiarchive ---

Hasciicam via Telnet

Mit der Software Hasciicam lassen sich Videoaufnahmen in ASCII-Art (live) darstellen.

Hier ein kurzer Abriss, wie einfach man unter Linux mit wenigen Befehlen eine Live-Ascii-Cam für Telnet-Clients anbieten kann.

Benötigte Software:
Hasciicam, netcat

1. Schritt:

Hasciicam mit den richtigen Optionen starten.
> hasciicam -d /dev/video0 -i 1 -n pal -m text -s 79x24 -r 1

-d /dev/video0 # Das Video-Device angegeben

-i 1 # Der zu verwendente Input-Channel der Videokarte

-n pal # Die Videonorm (pal, ntsc, ...)

-m text # Den Textmode aktivieren (speichert ASCII-Art in Datei hasciicam.asc)

-s 79x24 # Die Ausgabegröße (Breite x Höhe) angeben. 79x24 ist geeignet für die Ausgabe auf Telnet-Clients.

-r 1 # Der Refresh-Intervall in Sekunden

(optional ausserdem: -f user@ftpserver.de:/directory Die ASCII-Ausgabedatei wird auf einen Ftp-Server hochgeschoben)

Anmerkung: Um hasciicam überhaupt erst mal zum laufen zu bringen, sollte man vorher das richtige Video Device und andere Optionen im "live"-Modus testen und die benötigten Optionen auf obiges Beispiel übertragen:
> hasciicam -d /dev/video0 -m live -i 1 -n pal

2. Schritt

Ein kleines Perl-Script (cam.pl) stellt einen ASCII-Feed für die Darstellung in Telnet Clients bereit. (Könnte man genauso gut als Shell-Script schreiben.)

Dieses Script als cam.pl speichern:
#!/usr/bin/perl

### Einige Telnet vt100 Steuerkommandos definieren
# "ESC [2J" ist vt100 Formfeed und löscht den Telnet-Bildschirm
my $formfeed = chr(27)."[2J";
# "ESC [H" bringt Cursor auf Position (1:1)
my $cursor_pos = chr(27)."[H";
# Hintergrund schwarz, Text grün
my $colors = chr(27)."[40m".chr(27)."[32m"; 

# Alles was wir auf STDOUT ausgeben, wird an den Telnet-Client geschickt werden...

# Das Farbkommando schicken
print "$colors";

#Endlosschleife (Abbruch mit <CTRL>-c)
while(1) {
        #Telnet-Bildschirm löschen und Cursor auf 1:1 repositionieren
        print "$formfeed$cursor_pos";

        #Die ASCII-Art ausgeben
        system("cat",  "hasciicam.asc");

        #Kurz warten
        sleep 1;
}

exit 1;

3. Schritt

Den mit cam.pl generierten ASCII-Feed als Livefeed für Telnet Clients anbieten. Dazu bieten wir mit dem Programm netcat die Ausgabe von cam.pl auf einem TCP-Socket an:

> nc -l -p 9999 -e cam.pl

-l # Sorgt dafür das netcat im Server-Modus auf eingehende Verbindungen "listened"

-p 9999 # Gibt den Port an, auf dem nach Verbindungsanfragen gelauscht wird. (beliebig aber > 1024)

-e cam.pl # Startet cam.pl und leitet dessen Ausgabe auf einen verbundenen Telnet-Client um.

4. Schritt

Zuerst den Telnet-Client mit der Umgebungsvariablen TERM in den vt100-Kompatibilitätsmodus schicken.

> TERM=vt100; export TERM

Und nun Telnet starten

> telnet 127.0.0.1 9999

127.0.0.1 # Die IP-Adresse des Cam-Servers.

9999 # Der Port des Cam-Servers

(Anmerkung: Das Fenster des Telnet-Clients sollte für eine korrekte Darstellung des Videofeeds auf eine Größe von 79x24 Zeichen gebracht werden.)

5. Schritt

Sich an der Spielerei erfreuen.

(Wenn man den Videofeed für Freunde bereitstellen will, muss gegebenenfalls natürlich die Firewall auf dem entsprechenden Port geöffnet werden.)

-- DanielWimpff - 27 Sep 2004