Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[gelöst]noad nur für bestimmte Sender - möglich?
#1
Hallo,
die im Setup gesetzten Einstellungen für noad haben wie es scheint ja keinen Effekt.
Ich habe mich jetzt gefragt, ob es irgendeine Möglichkeit gibt, dass die noad_channels.conf vom VDR wieder beachtet wird.
Das ganze ist zwar nicht wirklich wichtig, weil ich selbst aber praktisch nie im Nachmittagsprogramm der ÖR-Sender irgendwelche Aufnahmen mache, wäre es mir persönlich lieber, wenn ich den VDR so einrichten könnte, dass die Werberkennung nur bei Privatsendern läuft.
Gibt es dafür irgendwo in den Tiefen der VDR Konfiguration einen "Schalter" oder ist das gewissermassen "fest verdrahtet"?

Gruss

Michael
easyvdr-3.0; MB: Asus M2N-X Plus; DVB: TT-3200, Hauppauge NovaS2; Graka: Geforce GT1030
Zitieren
#2
Ok, ich habe jetzt noch eine Weile gebastelt, und bin so zu einer wie es aussieht zumindest teilweisen Lösung (oder vllt. eher Lösungsansatz) gekommen.
Den Befehl, der in /etc/vdr/recording-hooks/R10.noad noad startet habe ich auskommentiert.
In die /usr/share/vdr/recording-hooks/10_recording.custom habe ich mir im Abschnitt "before" einen Eintrag auf ein Skript /usr/local/bin/noad_recording_hook.sh gesetzt, dieses macht nicht viel ausser ein zweites Hilfsskript aufzurufen:

Code:
#!/bin/sh

logger -s "noad_recording_hook.sh: starte $2"
printf "/usr/local/bin/start_noad.sh $2" | at now + 1 minutes

Das start_noad.sh Skript nutzt einen Codeschnipsel, den ich in der noad.sh aus easyvdr-0.8 gefunden habe; dieser checkt, ob NOAD_ON_CHANNELS in der sysconfig auf "yes" gesetzt ist, falls ja, wird versucht, den Kanal der Aufnahme mit der Liste in der noad_channels.conf abzugleichen. Falls der Kanal dort nicht drinsteht, bricht das Skript ab, ohne noad zu starten, falls der Kanal drinsteht oder etwas schiefläuft, wird noad gestartet (so zumindest die Idee).
Das Problem ist, dass der Kanal bei der 0.8er offenbar als $3 an noad.sh übergeben wurde, jetzt sehe ich nicht wie ich auf einfache Art an diese Info herankomme.
Deshalb als Krücke das "at now + 1 minutes" im ersten Skript, das zweite Skript versucht dann, die "Info"-Datei im Aufnahmeverz. auszuwerten.
Weil ich beim Shell-skripten (vorsichtig ausgedrückt) nicht sehr gewieft bin, habe ich für letzteres bisher nur einen sehr pfuschigen Weg mit grep gefunden, der nur für Testzwecke halbwegs brauchbar ist, aber schon versagt, wenn der Sendername ein Leerzeichen enthält :-) (egal, da kümmere ich mich später drum)
Jedenfalls, prinzipiell scheint das zu funktionieren, ausser dass ich beim Testen bemerkt habe, dass aus unbekannten Gründen einmal das zweite Skript nicht startete.
Hier noch der Inhalt von start_noad.sh :

Code:
#!/bin/sh

#############################################################################
# aus der alten noad.sh von easyvdr-0.8 geborgtes Snippet, das noad nur für
# best. Sender ermöglicht
#############################################################################


logger -s "start_noad.sh: starte $1"

kanal=`grep '<channel' $1/info | cut -f3 -d">" | cut -f1 -d"<"| cut -f3 -d" "`


# Code snippet aus der alten noad.sh von easyvdr-0.8 geborgt;
# dies ermöglicht, noad nur für bestimmte Sender automatisch aufzurufen:

DO_NOAD="no"

. /var/lib/vdr/sysconfig
. /var/lib/vdr/noad_channels.conf

##### nur für bestimmte Sender  #####
if [ x$NOAD_ON_CHANNELS = x"yes" ]; then
  for channel in $CHANNELLIST; do
    [ "$kanal" = $channel ] && DO_NOAD="yes"
  done
  # Falls der parameter fehlt: Noad ausführen
  [ "$kanal" = "" ] && DO_NOAD="yes"
  if [ "$DO_NOAD" = "no" ]; then
    logger -s "start_noad.sh: kein noad für Sender $kanal"
    exit 0
  fi
fi

/usr/bin/noad --online=2 --ac3 --overlap --jumplogo --comments --savelogo nice --background --OSD before "$1"

Bin für Anregungen und Infos natürlich immer dankbar!

Gruss

Michael
easyvdr-3.0; MB: Asus M2N-X Plus; DVB: TT-3200, Hauppauge NovaS2; Graka: Geforce GT1030
Zitieren
#3
So, nach einigem Basteln habe ich schliesslich eine Lösung finden können, die hier einwandfrei zu funktionieren scheint. :-)
Das Skript aus dem vorigen Post konnte ja die Sender-Information aus der info-Datei nicht korrekt auswerten, ausserdem musste ich feststellen, dass auch der aus der 0.8er geborgte Codeschnipsel die Liste der Noad-Sender nicht richtig auswerten kann (hier das gleiche Problem, Leerzeichen im Sendernamen stören).


Ich habe das für mich jetzt so gelöst, dass ich das ganze nochmal neu als Python-Skript geschrieben habe, damit komme ich besser zurecht und kann so beide Dateien  korrekt behandeln.
Das andere, zweizeilige Start-Skript wird nicht mehr benötigt, der Aufruf erfolgt jetzt direkt aus der /usr/share/vdr/recording-hooks/10_recording.custom .


Falls jemand das auch einmal ausprobieren möchte folgt hier eine kurze Anleitung (das Python-Skript incl. einer Beispiel-10_recording.custom Datei für den Aufruf habe ich angehängt):


Bevor das Skript verwendet wird, sollte sicher gestellt werden, dass noad durch keinen anderen Aufruf gestartet wird.
Standardmässig wird dies wohl durch das Skript in /usr/share/vdr/recording-hooks/R10.noad berwerkstelligt (tatsächlich ein Link auf /etc/vdr/recording-hooks/R10.noad), also entweder den Aufruf von noad in dieser Datei auskommentieren. Es sollte auch alternativ funktionieren durch
Code:
# sudo dpkg-reconfigure easyvdr-addon-noad
und bei der Abfrage dann Auswählen von "Nein" den automatischen Start von noad zu unterbinden (ich vermute, das entfernt den Symlink nach /usr/share/vdr/recording-hooks, habe es selbst aber nicht getestet).
Am Besten danach durch eine kurze Testaufnahme bestätigen, dass noad tatsächlich nicht mehr gestartet wird.


Wenn das erledigt ist, kann das noad_on_channels.py Skript z.B. nach /usr/local/bin kopiert werden.
Das Skript muss mit zwei Parametern gestartet werden, wie sie von den VDR recording-hooks übergeben werden: der erste ist entweder "before" oder "after", je nachdem ob noad nach der Aufnahme ("after") oder im Online-Modus bereits während der Aufnahme ("before") laufen soll.
Da der von der easyvdr mitgelieferte noad z.Zt. (Anfang Sept. 2015) leider noch am Online-Modus scheitert, sollte hier zumindest vorerst (ein Fix durch die noad-Entwickler ist wohl in Arbeit, liegt aber aktuell noch nicht vor) für alle User, die noad aus den Easyvdr-Paketquellen verwenden, "after" die richtige Wahl sein.
Der zweite Parameter ist das Verzeichnis der Aufnahme, so wie z.B. /video0/Titel_der Sendung/2015-08-20.00.03.11-0.rec .


Anschliessend kann man das Skript aktivieren, indem man einen passenden Eintrag in die /usr/share/vdr/recording-hooks/10_recording.custom hinzufügt.
Für die Ausführung nach Ende der Aufnahme könnte das z.B. so aussehen:
Code:
case $1 in
    before)
        # do here whatever you would like to do right BEFORE
        # the recording $2 STARTS
        ;;
    after)
        # do here whatever you would like to do right AFTER
        # the recording $2 ENDED
        # Befehl für noad f. best. Sender nach Ende der Aufnahme:
        /usr/local/bin/noad_on_channels.py "$@"
        ;;
    edited)
        # do here whatever you would like to do right AFTER
        # the recording $2 has been EDITED
        ;;
esac
Falls eine noad-Version installiert ist, die Online-Scan-fähig ist, und man noad bereits während der Aufnahme nutzen möchte, ist der Aufruf etwas komplizierter; da zum Zeitpunkt des Aufrufs das Aufnahmeverzeichnis und damit auch die darin befindliche info-Datei noch nicht existieren, muss der Aufruf mittels "at" etwas in die Zukunft verschoben werden, damit der VDR Zeit hat, Verzeichnis und info-Datei zu erstellen. Am Besten wählt man dafür 2 Minuten (1 Minute könnte sich im ungünstigsten Fall, d.h. Aufruf etwa um 19:29:59 auf 1 Sekunde (19:30:00) reduzieren).
Die 10_recording.custom könnte damit etwa so aussehen:
Code:
case $1 in
    before)
        # do here whatever you would like to do right BEFORE
        # the recording $2 STARTS
        # Befehl für noad für best. Sender Online-Scan während d. Aufnahme:
        echo -n /usr/local/bin/noad_on_channels.py \"$1\" \"$2\" | at now + 2 minutes
        ;;
    after)
        # do here whatever you would like to do right AFTER
        # the recording $2 ENDED
        ;;
    edited)
        # do here whatever you would like to do right AFTER
        # the recording $2 has been EDITED
        ;;
esac
Die Backslashe vor den Anführungszeichen sind nötig, da sonst die Weitergabe der Parameter durch "at" fehl schlagen kann, falls der Sendungstitel Sonderzeichen wie Ausrufezeichen oder Apostrophe enthält (siehe meine Bemerkung wg. des mysteriösen Nicht-Startens von noad bei einigen Aufnahmen im vorigen Post).
Die beiden Parameter werden dann so an noad weiter gereicht.
Das Skript prüft dann zunächst, ob in der sysconfig die Option NOAD_ON_CHANNELS auf "yes" gesetzt ist (im OSD unter noad-Einstellungen "noad nur für definierte Sender" auf "ja" setzen), anderenfalls wird noad auf jeden Fall gestartet.
ACHTUNG: weitere Einstellungen im Setup werden in dieser Version des Skripts ignoriert!
Falls also NOAD_ON_CHANNELS="yes" ist, wird versucht, den Sender der aktuellen Aufnahme aus der info-Datei im Aufnahmeverzeichnis zu ermitteln und diesen gegen die in der Datei /var/lib/vdr/noad_channels.conf definierten Sender abzugleichen, bei einem Treffer wird noad gestartet, steht der Sender nicht in der Datei, gibt es kein noad für diese Aufnahme.
Das Format der Datei ist einfach eine durch neue Zeilen getrennte Liste von Sendernamen, wie z.B.:
Code:
CHANNELLIST="
RTL
RTL2
Super RTL
RTLNITRO
"
Bitte hierbei zu beachten: bei einigen Sendern kann der Sendername für die Aufnahme von dem im OSD gezeigten Sendernamen abweichen, konkret habe ich das beim SD-Programm von RTL bemerkt, im OSD erscheint es als "RTL Television", in der Aufnahme aber als "RTL". Wahrscheinlich liegt das daran, dass der Sender in der channels.conf mit 2 durch Komma getrennten Namen erscheint (RTL Television,RTL;RTL World:12187...). Falls also für einen gewünschten Sender kein noad ausgeführt wird, bitte zuerst prüfen, ob der Sendername korrekt in die noad_channels.conf eingetragen wurde.
Das Skript schreibt einige diagnostische Informationen in das syslog, die (hoffentlich) helfen können, bei Fehlfunktionen die Fehlerursache einzugrenzen.


So, jetzt viel Spass damit!


Angehängte Dateien
.zip   noad_on_channels.zip (Größe: 2,11 KB / Downloads: 0)
easyvdr-3.0; MB: Asus M2N-X Plus; DVB: TT-3200, Hauppauge NovaS2; Graka: Geforce GT1030
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: