CapturePlugin - v4l2: Unterschied zwischen den Versionen

Aus TV-Browser Wiki
Wechseln zu: Navigation⧼comma-separator⧽Suche
Bodo⧼word-separator⧽⧼parentheses⧽
⧼parentheses⧽
Ronald⧼word-separator⧽⧼parentheses⧽
Zeile 21: Zeile 21:
 
'''Kurzanleitung:'''<BR>
 
'''Kurzanleitung:'''<BR>
 
(mpeg-Stream, v4lctl-Tools, atd und mencoder vorhanden)<BR>
 
(mpeg-Stream, v4lctl-Tools, atd und mencoder vorhanden)<BR>
Die zwei Shell-Skripts [http://www.dassymbol.de/download/tvbrowser/Aufzeichnen.sh Aufzeichnen] und [http://www.dassymbol.de/download/tvbrowser/Aufzeichnung_löschen.sh Aufzeichnung löschen] herunterladen und in einem geeigneten Verzeichnis abspeichern.<BR>
+
Die zwei Shell-Skripts [http://www.dassymbol.de/download/tvbrowser/Aufzeichnen.sh Aufzeichnen] und [http://www.dassymbol.de/download/tvbrowser/Aufzeichnung_loeschen.sh Aufzeichnung löschen] herunterladen und in einem geeigneten Verzeichnis abspeichern.<BR>
 
Die Pfadangaben in den beiden Dateien den eigenen Bedürfnissen anpassen.<BR>
 
Die Pfadangaben in den beiden Dateien den eigenen Bedürfnissen anpassen.<BR>
 
In der Datei Aufzeichnen.sh sind es folgende Zeilen:<BR>
 
In der Datei Aufzeichnen.sh sind es folgende Zeilen:<BR>
Zeile 108: Zeile 108:
 
  #! /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
  *Titel der Sendung
+
  #Titel der Sendung
 
  TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen
 
  TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen
  *Skriptdatei für den at-Befehl
+
  #Skriptdatei für den at-Befehl
 
  VideoPfad=$HOME/Programme/Video/ #Pfad anpassen
 
  VideoPfad=$HOME/Programme/Video/ #Pfad anpassen
  *Speicherort der Videofilme
+
  #Speicherort der Videofilme
 
  atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
 
  atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
  *Speicherort der Ausgabedateien des Skripts
+
  #Speicherort der Ausgabedateien des Skripts
 
  atMeldung=
 
  atMeldung=
  *Rückmeldung des at-Befehls
+
  #Rückmeldung des at-Befehls
 
  AktZeitSec=<BR>
 
  AktZeitSec=<BR>
 
  DatZeitSec=<BR>
 
  DatZeitSec=<BR>
Zeile 134: Zeile 134:
 
  Dauer=$[$Dauer-($AktZeitSec-$DatZeitSec)]<BR>
 
  Dauer=$[$Dauer-($AktZeitSec-$DatZeitSec)]<BR>
 
  fi<BR>
 
  fi<BR>
  *sollte der Startzeitpunkt der Sendung in der Vergangenheit liegen, wird die Dauer der Aufzeichnung angepaßt.
+
  #sollte der Startzeitpunkt der Sendung in der Vergangenheit liegen, wird die Dauer der Aufzeichnung angepaßt.
 
   
 
   
 
  rm $atPfad'AktZeitSec.txt'<BR>
 
  rm $atPfad'AktZeitSec.txt'<BR>
 
  rm $atPfad'DatZeitSec.txt'<BR>
 
  rm $atPfad'DatZeitSec.txt'<BR>
  *Lösche die zuvor erstellten Dateien
+
  #Lösche die zuvor erstellten Dateien
 
   
 
   
  *Textdatei für den at-Befehl erstellen
+
  #Textdatei für den at-Befehl erstellen
 
  echo 'menPID=' > $TextPfad<BR>
 
  echo 'menPID=' > $TextPfad<BR>
 
  echo >> $TextPfad<BR>
 
  echo >> $TextPfad<BR>
 
  echo 'v4lctl setnorm PAL-BG' >> $TextPfad<BR>
 
  echo 'v4lctl setnorm PAL-BG' >> $TextPfad<BR>
  *Schalte auf PAL-Fernsehnorm
+
  #Schalte auf PAL-Fernsehnorm
 
  echo 'v4lctl setfreqtab europe-west' >> $TextPfad
 
  echo 'v4lctl setfreqtab europe-west' >> $TextPfad
  *Schalte auf Frequenztabelle "europe-west"
+
  #Schalte auf Frequenztabelle "europe-west"
 
  echo 'v4lctl setinput television' >> $TextPfad
 
  echo 'v4lctl setinput television' >> $TextPfad
  *Schalte auf TV
+
  #Schalte auf TV
 
  echo 'v4lctl volume mute off' >> $TextPfad
 
  echo 'v4lctl volume mute off' >> $TextPfad
  *Dreh den Ton an
+
  #Dreh den Ton an
 
  echo 'v4lctl setstation' $Kanal >> $TextPfad
 
  echo 'v4lctl setstation' $Kanal >> $TextPfad
  *Wechsle zu Fernsehkanal
+
  #Wechsle zu Fernsehkanal
 
  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
  *Starte Aufzeichnung durch mencoder von /dev/video0 mit bitrate 6000
+
  #Starte Aufzeichnung durch mencoder von /dev/video0 mit bitrate 6000
  *Alternativ kann auch "'cat /dev/video0 > '$VideoPfad$Titel'_'$Kanal'_'$DatZeit'.mpg &' >>  $TextPfad" verwendet werden.
+
  #Alternativ kann auch "'cat /dev/video0 > '$VideoPfad$Titel'_'$Kanal'_'$DatZeit'.mpg &' >>  $TextPfad" verwendet werden.
 
  echo 'menPID=$!' >> $TextPfad<BR>
 
  echo 'menPID=$!' >> $TextPfad<BR>
 
  echo 'echo $menPID >' $atPfad'PID.txt' >> $TextPfad<BR>
 
  echo 'echo $menPID >' $atPfad'PID.txt' >> $TextPfad<BR>
  *speicher die PID von mencoder in Datei PID.txt
+
  #speicher die PID von mencoder in Datei PID.txt
 
  echo 'sleep' $Dauer >> $TextPfad
 
  echo 'sleep' $Dauer >> $TextPfad
  *warte bis Ende der Sendung
+
  #warte bis Ende der Sendung
 
  echo 'kill $menPID' >> $TextPfad
 
  echo 'kill $menPID' >> $TextPfad
  *stoppe mencoder
+
  #stoppe mencoder
 
  echo 'rm' $atPfad$Kanal'_'$DatZeit'.txt' >> $TextPfad<BR>
 
  echo 'rm' $atPfad$Kanal'_'$DatZeit'.txt' >> $TextPfad<BR>
 
  echo 'rm' $atPfad'PID.txt' >> $TextPfad<BR>
 
  echo 'rm' $atPfad'PID.txt' >> $TextPfad<BR>
 
  echo 'rm' $TextPfad >> $TextPfad<BR>
 
  echo 'rm' $TextPfad >> $TextPfad<BR>
  *lösche nicht mehr benötigte Dateien
+
  #lösche nicht mehr benötigte Dateien
 
  at -f $TextPfad -t $DatZeit -m >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'
 
  at -f $TextPfad -t $DatZeit -m >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'
  *starte at-Befehl
+
  #starte at-Befehl
 
  atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt')<BR>
 
  atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt')<BR>
 
  tail -n 1 $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'| cut -b 5-10 | cut -f 1 -d a > $atPfad$Kanal'_'$DatZeit'.txt'<BR>
 
  tail -n 1 $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'| cut -b 5-10 | cut -f 1 -d a > $atPfad$Kanal'_'$DatZeit'.txt'<BR>
Zeile 175: Zeile 175:
 
  echo<BR>
 
  echo<BR>
 
  echo $atMeldung<BR>
 
  echo $atMeldung<BR>
  *Meldung für Capture Plugin
+
  #Meldung für Capture Plugin
  
  
Zeile 182: Zeile 182:
 
  #! /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 CCYYMMDDHHSS
+
  #Datum/Uhrzeit im Format CCYYMMDDHHSS
 
  atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
 
  atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
  *Pfad zu den Ausgabedateien
+
  #Pfad zu den Ausgabedateien
 
  JobPfad=$atPfad$Kanal'_'$DatZeit.txt<BR>
 
  JobPfad=$atPfad$Kanal'_'$DatZeit.txt<BR>
 
  JobNum=$(cat $JobPfad)<BR>
 
  JobNum=$(cat $JobPfad)<BR>
  *Jobnummer des at-Befehls
+
  #Jobnummer des at-Befehls
 
   
 
   
 
  atrm $JobNum >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'
 
  atrm $JobNum >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'
  *lösche at-Job
+
  #lösche at-Job
 
  atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt')<BR>
 
  atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt')<BR>
 
  if [ "$atMeldung" = 'Warning: deleting running job' ]; then<BR>
 
  if [ "$atMeldung" = 'Warning: deleting running job' ]; then<BR>
Zeile 202: Zeile 202:
 
  fi<BR>
 
  fi<BR>
 
  fi<BR>
 
  fi<BR>
  *wenn at-Job die Meldung "deleting running Job" ausgibt, dann versuche mencoder zu killen.
+
  #wenn at-Job die Meldung "deleting running Job" ausgibt, dann versuche mencoder zu killen.
 
  rm $atPfad$Kanal'_'$DatZeit'.txt'<BR>
 
  rm $atPfad$Kanal'_'$DatZeit'.txt'<BR>
 
  rm $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'<BR>
 
  rm $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'<BR>
Zeile 208: Zeile 208:
 
  rm $atPfad'KillAusgabe.txt'<BR>
 
  rm $atPfad'KillAusgabe.txt'<BR>
 
  rm $atPfad'Aufzeichnung.txt'<BR>
 
  rm $atPfad'Aufzeichnung.txt'<BR>
  *lösche nicht benötigte Ausgabedateien
+
  #lösche nicht benötigte Ausgabedateien
 
  echo 'Aufzeichnung gelöscht'<BR>
 
  echo 'Aufzeichnung gelöscht'<BR>
 
  echo<BR>
 
  echo<BR>
Zeile 214: Zeile 214:
 
  echo<BR>
 
  echo<BR>
 
  echo $KillMeldung<BR>
 
  echo $KillMeldung<BR>
  *Meldung für TV-Browser
+
  #Meldung für TV-Browser
  
  

Version vom 18. November 2005, 12:12 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


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


http://www.dassymbol.de/download/tvbrowser/aufnahme_geloescht.jpg


Löschen einer schon laufenden Aufzeichnung


http://www.dassymbol.de/download/tvbrowser/aufnahme_geloescht1.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.


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
#Titel der Sendung
TextPfad=$HOME/System/Skripts/Ausgabe/Aufzeichnung.txt #Pfad anpassen
#Skriptdatei für den at-Befehl
VideoPfad=$HOME/Programme/Video/ #Pfad anpassen
#Speicherort der Videofilme
atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
#Speicherort der Ausgabedateien des Skripts
atMeldung=
#Rückmeldung des at-Befehls
AktZeitSec=
DatZeitSec=
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
#sollte der Startzeitpunkt der Sendung in der Vergangenheit liegen, wird die Dauer der Aufzeichnung angepaßt. rm $atPfad'AktZeitSec.txt'
rm $atPfad'DatZeitSec.txt'
#Lösche die zuvor erstellten Dateien #Textdatei für den at-Befehl erstellen echo 'menPID=' > $TextPfad
echo >> $TextPfad
echo 'v4lctl setnorm PAL-BG' >> $TextPfad
#Schalte auf PAL-Fernsehnorm echo 'v4lctl setfreqtab europe-west' >> $TextPfad #Schalte auf Frequenztabelle "europe-west" echo 'v4lctl setinput television' >> $TextPfad #Schalte auf TV echo 'v4lctl volume mute off' >> $TextPfad #Dreh den Ton an echo 'v4lctl setstation' $Kanal >> $TextPfad #Wechsle zu Fernsehkanal 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 #Starte Aufzeichnung durch mencoder von /dev/video0 mit bitrate 6000 #Alternativ kann auch "'cat /dev/video0 > '$VideoPfad$Titel'_'$Kanal'_'$DatZeit'.mpg &' >> $TextPfad" verwendet werden. echo 'menPID=$!' >> $TextPfad
echo 'echo $menPID >' $atPfad'PID.txt' >> $TextPfad
#speicher die PID von mencoder in Datei PID.txt echo 'sleep' $Dauer >> $TextPfad #warte bis Ende der Sendung echo 'kill $menPID' >> $TextPfad #stoppe mencoder echo 'rm' $atPfad$Kanal'_'$DatZeit'.txt' >> $TextPfad
echo 'rm' $atPfad'PID.txt' >> $TextPfad
echo 'rm' $TextPfad >> $TextPfad
#lösche nicht mehr benötigte Dateien at -f $TextPfad -t $DatZeit -m >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' #starte at-Befehl 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
#Meldung für Capture Plugin


Aufzeichnung_loeschen.sh

#! /bin/sh
Kanal=$1
#Fernsehkanal
DatZeit=$2$3$4$5$6
#Datum/Uhrzeit im Format CCYYMMDDHHSS
atPfad=$HOME/System/Skripts/Ausgabe/ #Pfad anpassen
#Pfad zu den Ausgabedateien
JobPfad=$atPfad$Kanal'_'$DatZeit.txt
JobNum=$(cat $JobPfad)
#Jobnummer des at-Befehls atrm $JobNum >& $atPfad$Kanal'_'$DatZeit'Ausgabe.txt' #lösche at-Job atMeldung=$(cat $atPfad$Kanal'_'$DatZeit'Ausgabe.txt')
if [ "$atMeldung" = 'Warning: deleting running job' ]; then
PIDNummer=$(cat $atPfad'PID.txt')
kill $PIDNummer >& $atPfad'KillAusgabe.txt'
KillMeldung=$(cat $atPfad'KillAusgabe.txt')
if [ -z $KillMeldung ]; then
KillMeldung="Running Job $PIDNummer beendet."
fi
fi
#wenn at-Job die Meldung "deleting running Job" ausgibt, dann versuche mencoder zu killen. rm $atPfad$Kanal'_'$DatZeit'.txt'
rm $atPfad$Kanal'_'$DatZeit'Ausgabe.txt'
rm $atPfad'PID.txt'
rm $atPfad'KillAusgabe.txt'
rm $atPfad'Aufzeichnung.txt'
#lösche nicht benötigte Ausgabedateien echo 'Aufzeichnung gelöscht'
echo
echo $atMeldung
echo
echo $KillMeldung
#Meldung für TV-Browser


Downloads

Skript zum Aufzeichnen
Skript um Aufzeichnung zu löschen
Beispieldatei Senderliste
Gerätedatei für Capture Plugin

Anmerkungen

Mit den Einstellungen von mencoder bin ich noch nicht ganz zufrieden, vielleicht kennt da jemand bessere und kann sie einfügen.