XChat und Xine
Dieser Artikel beschreibt einen Weg anderen Usern im IRC über XChat zu zeigen was ihr mit dem Medienwiedergabeprogramm Xine grade anguckt oder anhört. Anders als noatun oder mplayer gibt xine nämlich keine Informationen über die aktuell wiedergegebene Datei zurück ans System.
Voraussetzung
Ihr müsst eine XChat- und eine xine-Installation unter Linux verwenden. Kenntnisse in Perl und dem Einfügen von Scripten in XChat wären vorteilhaft.
Lösung
Um dieses Problem zu umgehen empfiehlt es sich auf die filepointer von Linux zurückzugreifen. Sobald xine läuft findet man unter
/proc/$pid/fd/
eine Liste von Informationen über das laufende Programm. An Punkt 5 ist die Datei genannt, auf die xine gerade zugreift. Und diesen filepointer gilt es nun für XChat auslesbar zu machen. Um das Vorweg mal zu testen, starte in xine eine mp3-Datei und ruf in der Konsole folgendes auf:
ps ax | grep /usr/bin/xine | grep -v grep | awk '{ print \$1 }'
gibt die PID von xine zurück
ls -all /proc/$pid/fd/ | cut -c37,42- | grep '5/'
gibt den Dateinamen der Datei zurück, welche xine gerade abspielt (an Stelle von $pid bitte die eben ausgelesene PID einsetzen)
Hierzu gibt es folgenden perl-Code-Schnippsel, den ihr in euer Script einfügen müsst:
$pidget="ps ax | grep /usr/bin/xine | grep -v grep | awk '{ print \$1 }' ";
sub display_xine
{
open( HANDLE, $pidget."|" );
if( $pid = <HANDLE> )
{
$pid=~s/\n//g;
$getfile=`ls -all /proc/$pid/fd/ | cut -c37,42- | grep '5/'`;
IRC::command( "\002$type\002 $getfile");
close(HANDLE);
}
else
{
IRC::print( "Dein xine läuft nicht!" );
close(HANDLE)
}
return 1;
}
Nach der Ausführung der Funktion display_xine sollte (bei laufendem xine) der Dateiname der gerade von xine wiedergegebenen Datei ausgegeben werden. Die Ausgabe könnt ihr natürlich noch selber anpassen (z.B. mittels des Programms id3info den ID3-Tag einer mp3-Datei auslesen).
Hinweis
Die oben genannten Kommandos wurden unter MandrakeLinux 10.1 ausgeführt und getestet. Auf anderen Systemen könnte es Verschiebungen z.B. beim Befehl cut geben. In diesem Fall bitte die dazugehörige man-page aufrufen.
|