CapturePlugin - v4l2: Unterschied zwischen den Versionen
Version vom 17. November 2005, 21:17 Uhr ⧼parentheses⧽ Ronald⧼word-separator⧽⧼parentheses⧽ |
Version vom 17. November 2005, 21:31 Uhr ⧼parentheses⧽ Bodo⧼word-separator⧽⧼parentheses⧽ ⧼parentheses⧽ |
||
Zeile 105: | Zeile 105: | ||
''Aufzeichnen.sh''<BR> | ''Aufzeichnen.sh''<BR> | ||
− | ! /bin/sh | + | ! /bin/sh |
− | Kanal=$1 | + | Kanal=$1 |
− | #Fernsehkanal | + | #Fernsehkanal |
− | DatZeit=$2$3$4$5$6 | + | DatZeit=$2$3$4$5$6 |
− | #Datum/Uhrzeit im Format CCYYMMDDHHMM | + | #Datum/Uhrzeit im Format CCYYMMDDHHMM |
− | Dauer=$7 | + | Dauer=$7 |
− | #Dauer in Sekunden | + | #Dauer in Sekunden |
− | Titel=$8 | + | Titel=$8 |
− | + | ||
− | TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen | + | TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen |
− | VideoPfad=$HOME/Programme/Video/ #Pfad anpassen | + | VideoPfad=$HOME/Programme/Video/ #Pfad anpassen |
− | atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen | + | atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen |
− | atMeldung= | + | atMeldung= |
− | AktZeitSec= | + | AktZeitSec= |
− | DatZeitSec= | + | DatZeitSec= |
− | Dauer2= | + | Dauer2= |
− | + | ||
− | date +%s > $atPfad'AktZeitSec.txt' | + | date +%s > $atPfad'AktZeitSec.txt' |
− | AktZeitSec=$(cat $atPfad'AktZeitSec.txt') | + | AktZeitSec=$(cat $atPfad'AktZeitSec.txt') |
− | date --date="$2-$3-$4 $5:$6" +%s > $atPfad'DatZeitSec.txt' | + | date --date="$2-$3-$4 $5:$6" +%s > $atPfad'DatZeitSec.txt' |
− | DatZeitSec=$(cat $atPfad'DatZeitSec.txt') | + | DatZeitSec=$(cat $atPfad'DatZeitSec.txt') |
− | + | ||
− | if [ $AktZeitSec -gt $DatZeitSec ]; then | + | if [ $AktZeitSec -gt $DatZeitSec ]; then |
− | + | Dauer=$[$Dauer-($AktZeitSec-$DatZeitSec)] | |
− | fi | + | fi |
− | + | ||
− | rm $atPfad'AktZeitSec.txt' | + | rm $atPfad'AktZeitSec.txt' |
− | rm $atPfad'DatZeitSec.txt' | + | rm $atPfad'DatZeitSec.txt' |
− | + | ||
− | echo 'menPID=' > $TextPfad | + | echo 'menPID=' > $TextPfad |
− | echo >> $TextPfad | + | echo >> $TextPfad |
− | echo 'v4lctl setnorm PAL-BG' >> $TextPfad | + | echo 'v4lctl setnorm PAL-BG' >> $TextPfad |
− | echo 'v4lctl setfreqtab europe-west' >> $TextPfad | + | echo 'v4lctl setfreqtab europe-west' >> $TextPfad |
− | echo 'v4lctl setinput television' >> $TextPfad | + | echo 'v4lctl setinput television' >> $TextPfad |
− | echo 'v4lctl volume mute off' >> $TextPfad | + | echo 'v4lctl volume mute off' >> $TextPfad |
− | echo 'v4lctl setstation' $Kanal >> $TextPfad | + | echo 'v4lctl setstation' $Kanal >> $TextPfad |
− | echo 'mencoder /dev/video0 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=1:vbitrate=6000:aspect=1.33 -o' $VideoPfad$Titel'_'$Kanal'_'$DatZeit'.mpg' '-vf scale=720:576 &' >> $TextPfad | + | echo 'mencoder /dev/video0 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=1:vbitrate=6000:aspect=1.33 -o' $VideoPfad$Titel'_'$Kanal'_'$DatZeit'.mpg' '-vf scale=720:576 &' >> $TextPfad |
− | # echo 'cat /dev/video0 > '$VideoPfad$Kanal'_'$DatZeit'_'$Titel'.mpg &' >> $TextPfad | + | # echo 'cat /dev/video0 > '$VideoPfad$Kanal'_'$DatZeit'_'$Titel'.mpg &' >> $TextPfad |
− | echo 'menPID=$!' >> $TextPfad | + | echo 'menPID=$!' >> $TextPfad |
− | echo 'echo $menPID >' $atPfad'PID.txt' >> $TextPfad | + | echo 'echo $menPID >' $atPfad'PID.txt' >> $TextPfad |
− | echo 'sleep' $Dauer >> $TextPfad | + | echo 'sleep' $Dauer >> $TextPfad |
− | echo 'kill $menPID' >> $TextPfad | + | echo 'kill $menPID' >> $TextPfad |
− | echo 'rm' $atPfad$Kanal'_'$DatZeit'.txt' >> $TextPfad | + | echo 'rm' $atPfad$Kanal'_'$DatZeit'.txt' >> $TextPfad |
− | echo 'rm' $atPfad'PID.txt' >> $TextPfad | + | echo 'rm' $atPfad'PID.txt' >> $TextPfad |
− | echo 'rm' $TextPfad >> $TextPfad | + | echo 'rm' $TextPfad >> $TextPfad |
− | + | ||
− | at -f $TextPfad -t $DatZeit -m >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' | + | at -f $TextPfad -t $DatZeit -m >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' |
− | atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt') | + | atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt') |
− | tail -n 1 $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'| cut -b 5-10 | cut -f 1 -d a > $atPfad$Kanal'_'$DatZeit'.txt' | + | tail -n 1 $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'| cut -b 5-10 | cut -f 1 -d a > $atPfad$Kanal'_'$DatZeit'.txt' |
− | rm $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' | + | rm $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' |
− | echo 'Aufzeichnung von' $Titel 'gespeichert' | + | echo 'Aufzeichnung von' $Titel 'gespeichert' |
− | echo | + | echo |
− | echo $atMeldung | + | echo $atMeldung |
Version vom 17. November 2005, 21:31 Uhr
v4l2-Stream an /dev/video0 unter Linux
Die Beschreibung bezieht sich auf die Hauppauge WinTV PVRUSB2, sollte aber mit jeder TV-Karte funktionieren, die unter /dev/video0 einen mpeg-Stream bereitstellt.
Systemvoraussetzung:
1. Linux
2. mpeg-Stream an /dev/video0
3. die zwei Shell-Skripts Aufzeichnen und Aufzeichnung löschen
4. xawtv4 oder anderes Programm, das die v4lctl-Tools bereitstellt
5. der at-daemon (atd) muß laufen (sollte Standard sein)
Wer in den beiden Shell-Skripts nicht allzuviel editieren will, benötigt noch:
6. MPlayer, stellt den mencoder bereit
und falls die Hauppauge WinTV PVRUSB2 benutzt wird und noch kein Treiber installiert ist
7. den Treiber von Mike Isely
Kurzanleitung:
(mpeg-Stream, v4lctl-Tools, atd und mencoder vorhanden)
Die zwei Shell-Skripts Aufzeichnen und Aufzeichnung löschen herunterladen und in einem geeigneten Verzeichnis abspeichern.
Die Pfadangaben in den beiden Dateien den eigenen Bedürfnissen anpassen.
In der Datei Aufzeichnen.sh sind es folgende Zeilen:
TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen
Das Skript erstellt eine Datei "Aufzeichnung.txt", die an den at-Befehl übergeben wird.
VideoPfad=$HOME/Programme/Video/ #Pfad anpassen
Das Verzeichnis, in dem die Videos abgespeichert werden sollen. (den abschliessenden / beachten)
atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
Die Meldungen der einzelnen Systembefehle werden hier zwischengespeichert. (den abschliessenden / beachten)
In der Datei Aufzeichnung_löschen.sh ist es folgende Zeile:
atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
Die Meldungen der einzelnen Systembefehle werden hier zwischengespeichert. (den abschliessenden / beachten)
Im CapturePlugin unter Applikation /bin/sh eintragen.
Unter Parameter -> Aufnehmen:
/pfad/zum/skript/Aufzeichnen.sh {channel_name_external} {start_year} {leadingZero(start_month,"2")} {leadingZero(start_day,"2")} {leadingZero(start_hour,"2")} {leadingZero(start_minute,"2")} {length_sec} {cleanLess(title)}
Unter Parameter -> Löschen:
/pfad/zum/skript/Aufzeichnung_löschen.sh {channel_name_external} {start_year} {leadingZero(start_month,"2")} {leadingZero(start_day,"2")} {leadingZero(start_hour,"2")} {leadingZero(start_minute,"2")}
/pfad/zum/skript/ an den Speicherort der beiden Shell-Skripts anpassen.
Jetzt sollte die Aufnahme mit dem CapturePlugin funktionieren. Falls es Probleme gibt, kann vielleicht die ausführliche Anleitung helfen.
Ausführliche Anleitung:
Der Kerneltreiber für die Hauppauge PVRUSB2 wird zur Zeit von Mike Isely entwickelt. Der ursprungliche Treiber stammt von Aurelien Alleaume.
Vor dem Kerneltreiber gab es eine Sammlung von Perl-Scripts erstellt von Björn Danielsson, die relativ gut funktionierten (einige niedrige Frequenzen konnte man nicht einstellen) und auch mit dem Capture Plugin laufen. Björns Homepage sollte dabei helfen.
Tips für die Installation der Kerneltreiber
Bei der Installation des Kerneltreibers von Mike Isely gibt es kaum Probleme solange man sich an seine Anleitung hält.
Der Teiber benötigt das Modul "tveeprom", welches auch mitgeliefert wird. Manche Distributionen (z.B. SuSE) liefern eine eigene Version dieses Moduls mit (bei SuSE ivtv_tveeprom) und solange dieses Modul geladen ist, funktioniert der Treiber nicht. Deshalb sollte man darauf achten, daß das mitgelieferte Modul läuft und nicht das von der Distri.
Zum Testen des Treibers empfiehlt sich xawtv4 (mit xawtv funktioniert der Treiber nicht). Leider benutzt xawtv4 einen neuen Pfad zur Speicherung der Senderdaten, während die v4l-Tools (benötigt für das Capture Plugin) noch auf den alten Speicherort zugreifen, deshalb ist es notwendig eine eigene Sendertabelle unter $home/.xawtv zu erstellen.
Die Meldungen vom Capture Plugin
Aufnehmen
Datei:Http://www.dassymbol.de/download/tvbrowser/aufnahme gestartet.jpg
Der Text "warning: commands will be executed..." enthält die Jobnummer des at-Befehls und Datum/Uhrzeit des Startzeitpunktes.
Löschen einer noch nicht gestarteten Aufzeichnung
Datei:Http://www.dassymbol.de/download/tvbrowser/aufnahme gelöscht.jpg
Löschen einer schon laufenden Aufzeichnung
Datei:Http://www.dassymbol.de/download/tvbrowser/aufnahme gelöscht1.jpg
Der at-Befehl gibt die Fehlermeldung "Warning: deleting running job" aus.
Die Zeile "Running Job ###### beendet" zeigt an, daß die Aufzeichnung durch mencoder gestoppt wurde.
Datei:Http://www.dassymbol.de/download/tvbrowser/deleting running warnung.jpg
Sollte diese Zeile nicht erscheinen oder die Meldung "kill usage:" erscheinen, muß mencoder manuell gestoppt werden.
Das Aufzeichnungsskript und der sleep-Befehl des Skripts laufen weiter. Das sollte aber kein Problem darstellen (steht auf meiner Todo-Liste).
Der Quellcode
Aufzeichnen.sh
! /bin/sh Kanal=$1 #Fernsehkanal DatZeit=$2$3$4$5$6 #Datum/Uhrzeit im Format CCYYMMDDHHMM Dauer=$7 #Dauer in Sekunden Titel=$8 TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen VideoPfad=$HOME/Programme/Video/ #Pfad anpassen atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen atMeldung= AktZeitSec= DatZeitSec= Dauer2= date +%s > $atPfad'AktZeitSec.txt' AktZeitSec=$(cat $atPfad'AktZeitSec.txt') date --date="$2-$3-$4 $5:$6" +%s > $atPfad'DatZeitSec.txt' DatZeitSec=$(cat $atPfad'DatZeitSec.txt') if [ $AktZeitSec -gt $DatZeitSec ]; then Dauer=$[$Dauer-($AktZeitSec-$DatZeitSec)] fi rm $atPfad'AktZeitSec.txt' rm $atPfad'DatZeitSec.txt' echo 'menPID=' > $TextPfad echo >> $TextPfad echo 'v4lctl setnorm PAL-BG' >> $TextPfad echo 'v4lctl setfreqtab europe-west' >> $TextPfad echo 'v4lctl setinput television' >> $TextPfad echo 'v4lctl volume mute off' >> $TextPfad echo 'v4lctl setstation' $Kanal >> $TextPfad echo 'mencoder /dev/video0 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=1:vbitrate=6000:aspect=1.33 -o' $VideoPfad$Titel'_'$Kanal'_'$DatZeit'.mpg' '-vf scale=720:576 &' >> $TextPfad # echo 'cat /dev/video0 > '$VideoPfad$Kanal'_'$DatZeit'_'$Titel'.mpg &' >> $TextPfad echo 'menPID=$!' >> $TextPfad echo 'echo $menPID >' $atPfad'PID.txt' >> $TextPfad echo 'sleep' $Dauer >> $TextPfad echo 'kill $menPID' >> $TextPfad echo 'rm' $atPfad$Kanal'_'$DatZeit'.txt' >> $TextPfad echo 'rm' $atPfad'PID.txt' >> $TextPfad echo 'rm' $TextPfad >> $TextPfad at -f $TextPfad -t $DatZeit -m >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt') tail -n 1 $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'| cut -b 5-10 | cut -f 1 -d a > $atPfad$Kanal'_'$DatZeit'.txt' rm $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' echo 'Aufzeichnung von' $Titel 'gespeichert' echo echo $atMeldung