Quantcast
Channel: IP-Phone-Forum
Viewing all articles
Browse latest Browse all 15636

[HowTo] Recorder für Streamripper mit "freetz" auf Fritz!Box

$
0
0
Hi,

Wer regelmässig Internet-Radios aufzeichnen möchte, hat sicher eine Vielzahl an Möglichkeiten.
Eine, weshalb ich meine Box auch gefreezt habe, ist die mittels Crontab-Jobs und Streamripper.
Allein die langen Zeilen haben mir nicht gefallen, ich wollte es lieber kurz, etwa so:

29 08 * * 1-5 ./recorder ndrKultur "Am Morgen vorgelesen" 32 Stick
04 09 * * 1-5 ./recorder mdrFigaro Lesezeit 33 Onlinespeicher
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD

Die letzte Zeile sähe im Orginal etwa so aus:

04 10 * * 6 ./recorder DLF KPetc 57 usbHDD streamripper http://dradio_mp3_dlf_m.akacast.akam...adio_mp3_dlf_m --with-id3v1 --quiet -a RecorderTest_2014-03-19_21-52-27_DLF -s -A -o larger -k 1 -l 15 -d /var/media/ftp/usbHDD/Music/DLF/RecorderTest


Nicht wirklich praktikabel, zumal alles in einer Zeile stehen muss.
Also schnell ein Script geschrieben auf dass die Sache im Blick bleibt. ;)
Die Crontab-Zeile kurz erklärt:


mm HH DD MM W
Befehl Sender Programm Dauer HDD-Label
04 10 * * 6 ./recorder DLF KPetc 57 (min) Name lt. Datei-Manager

Zu gut deutsch: Nimm jeden Samstag (6) um 10:04 für 57 min das Programm "KPetc" vom DLF auf.

Noch einmal in Code-Format:
Code:

04 10 * * 6 ./recorder DLF KPetc 57 Sat-SD
Es ist also immer nur ein Leerzeichen "erlaubt", bzw., ansonsten halt in Anführungszeichen.


Wie ist der Script zu verwenden?


Ich unterstelle jetzt einmal, dass eine Freetz-Variante auf der Box mit Streamripper im Paket läuft. Dann sind die Grundlagen bereits gelegt. Wenn nicht, eine der Internet-Suchmaschinen wird da helfen können! :D

Den Code in eine Datei auf den USB-Stick / -HDD packen, ausführbar machen und einmal auf der Konsole (telnet / dropbear) ausführen. Dann wird im root-Verzeichnis ein Link erstellt, der es ermöglicht, die obige Kurzform zu verwenden. Nach einem reboot / Neustart der Box muss dieser Erststart wieder ausgeführt werden, oder man muss tiefer in die Materie des Freez-System einsteigen und es dort fest integrieren.

Code:

#!/bin/sh
# Stream-Aufnahmen per crontab via Streamripper mit ausgewähltem Sender
# $1 = Sender
# $2 = Programm
# $3 = Dauer
# $4 = Speicher-Namen (Label)

# 0. Wer lieber einen anderen Test-Stream will, bitte anpassen
def_sender=DLF
def_stream=http://dradio_mp3_dlf_m.akacast.akamaistream.net/7/249/142684/v1/gnl.akacast.akamaistream.net/dradio_mp3_dlf_m

##### Speicherorte, don`t edit #####
Speicherorte="uStor01 usbHDD online"

# 1. Start oder Teststrecke für die Konsole
if [ -z "$1" ] ; then
  echo & echo Das ist ein recorder-Test
  sleep 5 & echo =============================
    sender=$def_sender
  programm=RecorderTest
    dauer=15          # sind Sekunden
      test=yes
else
  ## Input-Variable zuweisen
    sender=$1
  programm=$2
    dauer=$4
  speicher=$4
fi
echo memorys=$Speicherorte
echo \  Dauer=$dauer min
echo 1. Abschnitt: Start-Phase beendet.

# 2. Namen der default-Ordner ermitteln oder festlegen
echo  Start-Ort=$0
        ortsTeil=${0#??}
        ortsTest=$(ls -l $0 | cut -d'>' -f2)
echo  \ ortsTest=$ortsTest
if [ "${ortsTest:0:4}" = "-rwx" ] ; then ortsCheck=$0 ; else ortsCheck=${ortsTest#?} ; fi
  echo OrtsCheck=$ortsCheck
          muster=$(echo $ortsCheck | cut -d'/' -f7)
echo \ \  Muster=$muster
            teil=$(echo ${ortsCheck//$muster})
        scripts=${teil%?}
  echo scriptsFO=$scripts

if [ "${0:0:1}" = "." ]; then
        scripts=$(echo ${ortsCheck//$ortsTeil})
        scripts=${scripts%/*}
if [ "$scripts" = "." ] ; then scripts=$(echo | pwd) ; fi 
fi
echo    scripts=\"$scripts\"
          string=$(grep MUSICDIR /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2 | cut -d'/' -f6 | cut -d'\' -f1)
echo      string=\"$string\"
            teil=${string%?}
          ordner=${teil#?}

if [ -z "$ordner" ] ; then  ordner=Music ; else ordner=${string%?} ; fi
echo      ordner=\"$ordner\"
echo 2. Abschnitt: Ordner-Suche beendet.

# 3. Speicher-Namen mit "mount" auslesen und den -Orten zuweisen
dev_Name=$(mount | grep "ftp/" | cut -d' ' -f3 | cut -d'/' -f5)
dev_Anz=$(mount | grep -c "ftp/" | cut -d' ' -f3 | cut -d'/' -f5)
echo $dev_Name > /var/tmp/recorder.tmp
read -t 1 $Speicherorte < /var/tmp/recorder.tmp

echo dev_Anz=\"$dev_Anz\"
echo uStor01=\"$uStor01\"
echo  usbHDD=\"$usbHDD\"
echo  online=\"$online\"
echo 3. Abschnitt: Speicher-Namen \(Label\) beendet.
# sleep 5 & exit

# 4. symLink für crontab und USB-Stick anlegen (./recorder ruft dann diesen script auf)
if [ ! -e "/var/mod/root/recorder" ] ; then
  ln -s $scripts/recorder.sh /var/mod/root/recorder
  echo "symLink erstellt"
  if [ -p "/var/tam/mount" ] ; then
    echo "/var/media/ftp/$uStor01" > /var/tam/mount
    rm -f /var/media/NEW_LINK
    ln -f -s /var/media/ftp/$uStor01 /var/media/NEW_LINK
  fi
fi
echo 4. Abschnitt: SymLink beendet.

# 5. URL des Streams in Streamripper-Config-Datei suchen
srch=$(grep -i $sender /var/mod/etc/conf/streamripper.cfg | cut -d'_' -f2 | cut -d'E' -f2 | cut -d'=' -f1)
srch=$(echo $srch | cut -d' ' -f1)
echo StreamSuche=\"$srch\"

if [ -z "$srch" ] && [ "$test" = "yes" ] ; then
    srch=1
  string=$(grep NAME$srch /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2)
    teil=${string%?}
  sender=${teil#?}
fi
    string=$(grep SERVER$srch /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2)
echo Stream=$string
      teil=${string%??????}
    stream=${teil#?}
echo Stream=$stream

if [ -z "$stream" ] && [ "$test" = "yes" ] ; then
  echo Keine Stream-URL gefunden, setze Test-Stream auf $def_stream
  sender=Test-mit-$def_sender
  stream=$def_stream
  sleep 5 & echo
else
  echo $sender=$srch
fihttp://www.ip-phone-forum.de/images/smilies/icon_smile.gif
echo 5. Abschnitt: Stream-Suche beendet.

# 6. Speicher-Ort festlegen
if [ -z "$speicher" ] || [ -z "$4" ] ; then
    string=$(grep MUSICDIR /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2)
      teil=${string%?}
  speicher=${teil#?}
      HDD="$speicher/$sender/$programm"
else
  case $speicher in
    $uStor01) HDD="/var/media/ftp/$uStor01/$ordner/$sender/$programm"  ;;
    $usbHDD) HDD="/var/media/ftp/$usbHDD/$ordner/$sender/$programm"  ;;
    $online) HDD="/var/media/ftp/$online/$ordner/$sender/$programm"  ;;
  esac
fi

if [ -z "$HDD" ] ; then
  muster=$(echo $scripts | cut -d'/' -f6)
  defHDD=$(echo ${scripts//$muster})
    HDD="$defHDD$ordner/$sender/$programm"
fi
echo Speicher=$HDD
echo 6. Abschnitt: Speicher-Ort beendet.
# sleep 5 & exit

# 7. Log-Buch 1. Eintrag schreiben
    zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
dateiName=$(echo $programm\_$(date +%F_%H-%M-%S\_$sender))

if [ "$test" = "yes" ] ; then
  echo $zeit: $sender nimmt $dauer s $programm als \"$dateiName\" auf.
  echo $zeit: $sender nimmt $dauer s $programm in \"$HDD\" auf. >> "$scripts/recorder.log"
else
  echo $zeit: $sender startet $dauer min Aufnahme von \"$programm\". >> "$scripts/recorder.log"
fi
echo 7. Abschnitt: Logbuch, 1. Eintrag beendet.

# 8. Streamripper mit gefundendem Sender starten
if [ "$test" = "yes" ] ; then
  echo streamripper $stream --with-id3v1 --quiet -a "$dateiName" -s -A -o larger -k 1 -l $dauer -d "$HDD"
  sleep 5 & echo
fi
if [ ! -z "$3" ] ; then  dauer=$(expr $3 \* 60) ; else dauer=$dauer ; fi # Minuten-Input in Sekunden umrechnen
streamripper $stream --with-id3v1 --quiet -a "$dateiName" -s -A -o larger -k 1 -l $dauer -d "$HDD"
errCode=$?
echo Streamripper, Exit-Code: \"$errCode\"
echo 8. Abschnitt: Stream-Aufnahme beendet.

# 9. Log-Buch 2. Eintrag schreiben
if [ "$errCode" != "0" ] ; then
  echo Streamripper mit Fehler beendet: \"$errCode\"
  zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
  echo $zeit: streamripper mit Fehler \"$errCode\" beendet.>>"$scripts/recorder.log"
  echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'>>"$scripts/recorder.log"
else
  echo Streamripper erfolgreich beendet.
  zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
  echo $zeit: $sender auf \"$HDD\" beendet.>>"$scripts/recorder.log"
  echo '------------------------------'>>"$scripts/recorder.log"
fi
echo 9. Abschnitt: Logbuch, 2. Eintrag beendet.

rm /var/tmp/recorder.tmp

Das Script ist so angelegt, dass es, so hoffe ich, für jeden (der sich schon einmal mit ...) nachvollziehbar bleibt.
Ansonsten stehen viele Hinweise bereits im Script.
Dieser sollte ohne weitere Anpassung, ausser man mag meinen Test-Sender nicht, :( laufen.
Bei mir heißt der Script "recorder.sh" und liegt im Ordner "/scripts".
Eigentlich sind diese Namen nicht zwingend, wenn auch logisch ...

Die notwendigen Informationen über Sender-Namen, Stream, HDD-Label etc. holt sich das Script aus der
lokalen Freetz-Umgebung. Das bedeutet, die in der Crontab verwendeten Begriffe sollten mit den Werten auf dem
Config-Menü für den Streamripper übereinstimmen. Die Aufnahme landet dann als .mp3 /.ogg (je nach Stream) auf der im Streamripper-Menü angegeben Ordner, wobei gleich nach Sender und Programm sortiert wird.
Je nach Fritz!Box und sonstiger Konstellation wie Onlinespeicher sind derzeit drei Speicher-Orte möglich:

  • USB-Stick
  • USB-Festplatte
  • Online-Speicher

Wer mehr braucht, müsste im 6. Abschnitt den case-Teil anpassen und entsprechend dazu im 0. Abschnitt die Variable "Speicherorte" anpassen. Doch dann entfällt die Gewährleistung. :cool:
Beim Erststart des Scripts werden im 4. Abschnitt zwei symbolische Links angelegt.
Der erste ist für die Crontab, der zweite ist für den Verweis des Anrufsbeantworters (AVM-Zweig der Box) auf den 1. USB-Speicher (uStor01).
Wer den 2. Link nicht will oder braucht, kann den Bereich löschen oder mit #auskommentieren:
Code:

  if [ -p "/var/tam/mount" ] ; then
    echo "/var/media/ftp/$uStor01" > /var/tam/mount
    rm -f /var/media/NEW_LINK
    ln -f -s /var/media/ftp/$uStor01 /var/media/NEW_LINK
  fi

So nun viel Spass beim Aufnehmen.

Cu, rapat
Angehängte Dateien

Viewing all articles
Browse latest Browse all 15636


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>