Hallo zusammen,
Das streamdev-plugin kann bekanntlich Live-TV streamen, also sollte es kein Problem sein, dasselbe auch mit den Aufnahmen zu machen. Ist es auch nicht. Die Daten werden mit meinem Perlskript per HTTP auf Port 2005 angeboten und MPlayer spielt sie ab. Dies geht auch über Internet. Meine Skripte zeigen, dass es geht, der Komfort und die Sauberkeit des Codes gehen jedoch gegen Null. Man müsste die "Playlist" ebenfalls über HTTP im Browser anbieten und dann die zu streamende Aufnahme auswählen können. Dazu fehlen mir jedoch die Fähigkeit und die Zeit, die Fähigkeit zu erwerben, Perl-Gurus bitte vortreten! Alternativ darf jemand auch das streamdev-Plugin damit aufwerten. Hier also der Code:
schleife.sh:
#!/bin/bash
# schleife.sh
# sucht sich geschnittene Aufnahmen und schickt sie durch MEncoder
# und bietet sie per Perl-Skript im Netz an.
# (c) Jochen Puchalla 2007
while true
do
find /video/%* -name "*.rec" > /tmp/recliste
cat /tmp/recliste|while read line
do
rm -f /tmp/fifo /var/run/menc.pid
/usr/bin/mkfifo /tmp/fifo
sleep 1
start-stop-daemon --start --pidfile /var/run/menc.pid --name mencoder --background --make-pidfile --startas \
/usr/bin/mencoder -- -fps 25 -ofps 15 -ovc lavc -ffourcc DIVX -oac mp3lame -srate 16000 -lameopts cbr:mode=3:br=32:vbr=0 -lavcopts keyint$
perl sws.pl
start-stop-daemon --stop --pidfile /var/run/menc.pid --name mencoder
done
kill $(ps ax|grep mp3lame|awk {'printf $1 " " '}) # DIRTY!
sleep 1
done
Alles anzeigen
sws.pl:
#!/usr/bin/perl
# sws.pl
# Bietet Daten aus einem FIFO im Netz an.
# (c) Jochen Puchalla 2007
use IO::Socket;
use POSIX qw(mkfifo);
print "simple web server started\n";
$sock = new IO::Socket::INET (
LocalPort => '2005',
Listen => 1,
Reuse => 1,
)
or die "Could not create socket: $!\n" unless $sock;
while ($client = $sock->accept())
{
print "Accepted connection from ", $client->peerhost(), ":", $client->peerport(), "\n";
print $client "HTTP/1.0 200 OK\r\n";
print $client "Server: perl webserver\r\n";
print $client "\r\n";
open(FILE, "< /tmp/fifo") or die "cannot open FIFO \n" ;
print "file opened\n";
$| = 1;
binmode FILE;
while (1)
{
$char = getc FILE;
print $client $char;
}
close(FILE);
}
Alles anzeigen
Gestartet wird der "Server" mit "bash schleife.sh". Auf der Clientside nutzt man: "mplayer http://servername:2005".
Viel Spaß und ich freue mich auf Rückmeldungen!