Jepp!
Der Befehl war genau richtig.
Ich habe jetzt Ton auf beiden Karten, auch bei den Aufnahmen.
Jetzt kann ich noch ein paar Tests machen.
Gruss,
Zerphod
Jepp!
Der Befehl war genau richtig.
Ich habe jetzt Ton auf beiden Karten, auch bei den Aufnahmen.
Jetzt kann ich noch ein paar Tests machen.
Gruss,
Zerphod
Hallo,
habe die Optionen in die modules.conf eingebaut. Hat aber leider keine Änderung gebracht.
Ich werde wohl mal warten was sich auf der ivtv-Seite tut. Da ist ja auch ein Thread mit einem ähnlichen Problem.
Ich denke auch,daß es ein ivtv-Problem ist, da auch ein 'dd of=/dev/video1 if=/dev/video16' ein LiveBild ohne Ton hervorbringt.
Bei der ganzen Testerei ist aber eine Sache aufgefallen. Wie kann man eigendlich sehen, mit welchen Optionen/Paramtern ein Modul geladen wurde?
Gruss,
Zerphod
Hallo,
die neuen Versionen kommen ja schneller als man testen kann.
Mit dem pvrinput(0.0.5), ivtv(0.3.7k) hat sich am Verhalten nichts geändert. Aufnahmen und LiveBild leider ohne Ton.
Ich habe mal Auszüge aus meinem SYSLOG angehängt.
(Ich hoffe, dass das klappt)
Gruss Zerphod
ich habe mal ein paar kleine Tests gemacht.
Nach einem Update auf ivtv 0.3.7(j) funktioniert auch die zweite PVR fast perfekt.
LiveTV läuft immer auf der ersten Karte. Wird eine Aufnahme gestartet, wird das LiveBild auf die zweite Karte umgeschaltet. Bild ist ok, leider ist der Ton weg.
Wird dann noch eine Aufnahme gestartet, wird auch diese Sendung aufgenommen, leider aber ohne Ton.
Ich kann beide Sendungen auch ansehen, kein Standbild mehr.
Ich werde gleich mal das neue pvrinput instalieren, dann noch mal testen, und dann auch mal das syslog posten.
Gruss,
Zerphod
Hallo obifrz,
ich habe folgende Erfahrungen gemacht:
Ich benutze das pvrinput-Plugin, und habe auch mal eine PVR150MCE in den Rechner gesteckt. IVTV hat beide Karten erkannt. Der VDR startet und alles funktioniert auf der PVR350.
Wenn eine Aufnahme startet, steht das LiveBild (kein Ton). Die Aufnahem aber wird korrekt durchgeführt. Ich gehe davon aus, das dieses Verhalten i.O. ist.
Schalte ich nun auf einen anderen Kanal um, zeigt mir das OSD die Informationen von dem neuen Kanal. (steht auch so im message log) Ich sehe aber weiter das Standbild (kein Ton). Ich gehe davon aus, daß der VDR zwei Karten erkannt hat, aber die zweite Karte nicht 'benutzt' wird.
Ich bin kein Programmierer, und kenne mich (noch) nicht so mit dem Zusammenspiel zwischen VDR<->Plugin<->IVTV aus. Vielleicht muß ich die channels.conf noch anpassen. Vielleicht muß das pvrinput-Plugin (läuft super) noch erweitert werden. Mal sehen...
Gruss,
Zerphod
Hallo MAK,
sieht ja kompliziert aus.
Ich glaub' ich probier mal mythtv aus.
Danke,
Zerphod
Hallo,
da mein VDR (siehe Signatur) jetzt stabil läuft, habe ich mir überlegt, noch eine zweite PVR(150/250) einzubauen.
Hat schon jemand so eine Konfiguration am laufen?
Habe im Forum so recht nichts gefunden.
Bin für jede Info dankbar.
Gruss,
Zerphod
Hallo powarman,
erstmal vielen Dank für das super Plugin!
Hab's sogleich installiert, läuft super, hatte mit der vorigen Version leichte Klötzchenbildung beim Umschalten. Das ist jetzt weg.
Im syslog kommt vom ivtv laufend folgende Meldung:
Jul 23 15:46:09 localhost kernel: ivtv: ENC Stream 2 OVERFLOW #3: Stealing a Buffer, 1317 currently allocated
nach dem OVERFLOW kommt #0 - #3.
Noch 'ne kleine Frage. Ist vielleicht mal eine Unterstützung von mehreren PVR-Karten angedacht?
Gruss,
Zerphod
Hmm...
Log sieht gut aus. Sollte eigendlich funktionieren.
Welche VDR Version setzt Du ein?
Disable (auf '0' stellen) mal alle Einstellungen mit denen der VDR selbst versucht EPG-Daten zu bekommen. Unter Einstellungen->EPG und bei den analogTV Einstellungen. (EPGfrom auf file)
in der setup.conf sollte dann so etwas stehen:
<snipp>
DoubleEpgAction = 0
DoubleEpgTimeDelta = 10
EPGBugfixLevel = 2
EPGScanTimeout = 0
<snipp>
analogtv.EPGfrom = 0
analogtv.EPGprovider = "FF
analogtv.External = "
<snipp>
Zerphod
Hier ein Auszug aus der 'svdrp.c':
svdrp: Simple Video Disk Recorder Protocol
The "Simple Video Disk Recorder Protocol" (SVDRP) was inspired
by the "Simple Mail Transfer Protocol" (SMTP) and is fully ASCII
text based. Therefore you can simply 'telnet' to your VDR port
and interact with the Video Disk Recorder - or write a full featured
graphical interface that sits on top of an SVDRP connection.
CHAN [ + | - | <number> | <name> | <id> ]
Switch channel up, down or to the given channel number, name or id.
Without option (or after successfully switching to the channel)
it returns the current channel number and name.
CLRE
Clear the entire EPG list.
DELC <number>
Delete channel.
DELR <number>
Delete the recording with the given number. Before a recording can be
deleted, an LSTR command must have been executed in order to retrieve"
the recording numbers. The numbers don't change during subsequent DELR
commands. CAUTION: THERE IS NO CONFIRMATION PROMPT WHEN DELETING A
RECORDING - BE SURE YOU KNOW WHAT YOU ARE DOING!
DELT <number>
Delete timer.
GRAB <filename> [ jpeg | pnm [ <quality> [ <sizex> <sizey> ] ] ]
Grab the current frame and save it to the given file. Images can
be stored as JPEG (default) or PNM, at the given quality (default
is 'maximum', only applies to JPEG) and size (default is full screen).
HELP [ <topic> ]
The HELP command gives help info.
HITK [ <key> ]
Hit the given remote control key. Without option a list of all
valid key names is given.
LSTC [ <number> | <name> ]
List channels. Without option, all channels are listed. Otherwise
only the given channel is listed. If a name is given, all channels
containing the given string as part of their name are listed.
LSTE
List EPG data.
LSTR [ <number> ]
List recordings. Without option, all recordings are listed. Otherwise
the summary for the given recording is listed.
LSTT [ <number> ]
List timers. Without option, all timers are listed. Otherwise
only the given timer is listed.
MESG [ <message> ]
Displays the given message on the OSD. If message is omitted, the
currently pending message (if any) will be returned. The message
will be displayed for a few seconds as soon as the OSD has become
idle. If a new MESG command is entered while the previous message
has not yet been displayed, the old message will be overwritten.
MODC <number> <settings>
Modify a channel. Settings must be in the same format as returned
by the LSTC command.
MODT <number> on | off | <settings>
Modify a timer. Settings must be in the same format as returned
by the LSTT command. The special keywords 'on' and 'off' can be
used to easily activate or deactivate a timer.
MOVC <number> <to>
Move a channel to a new position.
MOVT <number> <to>
Move a timer to a new position.
NEWC <settings>
Create a new channel. Settings must be in the same format as returned
by the LSTC command.",
NEWT <settings>
Create a new timer. Settings must be in the same format as returned
by the LSTT command. It is an error if a timer with the same channel,
day, start and stop time already exists.
NEXT [ abs | rel ]
Show the next timer event. If no option is given, the output will be
in human readable form. With option 'abs' the absolute time of the next
event will be given as the number of seconds since the epoch (time_t
format), while with option 'rel' the relative time will be given as the
number of seconds from now until the event. If the absolute time given
is smaller than the current time, or if the relative time is less than
zero, this means that the timer is currently recording and has started
at the given time. The first value in the resulting line is the number
of the timer.
PUTE
Put data into the EPG list. The data entered has to strictly follow the
format defined in vdr(5) for the 'epg.data' file. A '.' on a line
by itself terminates the input and starts processing of the data (all
entered data is buffered until the terminating '.' is seen).
STAT disk
Return information about disk usage (total, free, percent).
UPDT <settings>
Updates a timer. Settings must be in the same format as returned
by the LSTT command. If a timer with the same channel, day, start
and stop time does not yet exists, it will be created.
VOLU [ <number> | + | - | mute ]
Set the audio volume to the given number (which is limited to the range
0...255). If the special options '+' or '-' are given, the volume will
be turned up or down, respectively. The option 'mute' will toggle the
audio muting. If no option is given, the current audio volume level will
be returned.
QUIT
Exit vdr (SVDRP).
You can also hit Ctrl-D to exit.
SVDRP Reply Codes:
214 Help message
215 EPG data record
220 VDR service ready
221 VDR service closing transmission channel
250 Requested VDR action okay, completed
354 Start sending EPG data
451 Requested action aborted: local error in processing
500 Syntax error, command unrecognized
501 Syntax error in parameters or arguments
502 Command not implemented
504 Command parameter not implemented
550 Requested action not taken
554 Transaction failed
dwoe:
Nein, mein Board bootet ohne 'reboot' wieder.
Heute abend kann ich meine Einstellungen online stellen.
dwoe:
Ich benutze das gleiche Board, und bei mir funktioniert der Wakeup jedesmal. (Der VDR nimmt jedenfalls immer alles auf was ich programmiert habe)
Kann es sein, daß 'nvram-wakeup' nicht vor jedem shutdown aufgerufen wird um den neuen Timer einzutragen?
Bis die Tage,
Zerphod
Ist mir auch aufgefallen, man sollte (muss) in der '/etc/vdr/svdrphosts.conf' sein locales Netzwerk eintragen. Muss für den VDRADMIN oder andere streaming-clients sowieso gemacht werden. Dann kann man auch die IP des VDR eingetragen lassen.
Bis die Tage,
Mathias
Hmmm, zuerst muss der VDR natürlich EPG-Daten haben/anzeigen. Dann muss der User, der das script aufruft nach '/video' und in das Verzeichnis schreiben dürfen von wo das Script aufgerufen wird.(für die epg.tmp). Ist die epg.tmp leer/nicht da?
Bis die Tage,
Mathias
epsyp:
Also, läuft sehr stabil, Bild ist gut, der Ton hat ab und zu einen kleinen 'Knacks', solange man nicht so oft umschaltet. Bei mir wird dann Bild und Ton immer etwas schlechter. Probiere aber jetzt mal andere Einstellungen für analogTV.
Bis die Tage,
Zerphod
Natürlich!
Also, mit dem Script 'savepg' kann man epg-Daten aus dem Vdr auslesen und in '/video/epg.data' schreiben:
#! /usr/bin/perl
$verz = "/var/log";
$epg = "/video";
sub open_logging
{
open (LOGGING, ">>$verz/savepg.log");
}
sub close_logging
{
close LOGGING;
}
# Debuglevel -> 1=kein Debug / 6=alles
sub printlog
{
my $debuglevel = 6;
my ($text,$dbl) = @_;
my $date = localtime();
&open_logging;
printf LOGGING "$date: $text" if ($debuglevel > $dbl);
&close_logging;
}
printlog "SAVEPG: EPG-Daten speichern\n",1;
# Hauptprogramm
# EPG-Daten aus VDR lesen
$Text="/root/svdrpsend.pl -d 192.168.65.130 LSTE > epg.tmp";
system $Text;
# epg.tmp einlesen
&Lesepgtmp;
&Loeschepg;
foreach $epgzeile (@epgdatei)
{
if ($epgzeile =~ /\A\d\d\d-/)
{
$epgzeile = $';
# printlog "SAVEPG: EPG_Zeile-> $epgzeile\n".3;
&Schreibepg;
}
}
printlog "SAVEPG: fertig!\n",1;
sub Lesepgtmp
{
open (EINGABE, "<./epg.tmp");
@epgdatei = <EINGABE>;
close (EINGABE);
}
sub Schreibepg
{
open (AUSGABE, ">>$epg/epg.data");
print AUSGABE $epgzeile;
close (AUSGABE);
}
sub Loeschepg
{
open (AUSGABE, ">$epg/epg.data");
print AUSGABE "";
close (AUSGABE);
}
Mit dem Script 'putepg' kann man die EPG-Daten aus '/video/epg.data' in den VDR übertragen.
#!/usr/bin/perl
# warten bis der VDR hochgefahren ist
sleep (20);
use IO::Socket;
use Getopt::Std;
use Date::Manip;
use HTML::Entities;
use bytes; # no unicode
push (@INC, "/etc/vdr/tvmovie2vdr");
require ("config.pl");
### require ("channels.pl");
push (@INC, "/usr/share/vdr-addon-tvmovie2vdr/inc");
require ("helperfunc.pl");
$verz = "/var/log";
$epg = "/video";
sub open_logging
{
open (LOGGING, ">>$verz/putepg.log");
}
sub close_logging
{
close LOGGING;
}
# Debuglevel -> 1=kein Debug / 6=alles
sub printlog
{
my $debuglevel = 6;
my ($text,$dbl) = @_;
my $date = localtime();
&open_logging;
printf LOGGING "$date: $text" if ($debuglevel > $dbl);
&close_logging;
}
printlog "PUTEPG: EPG-Daten in den Vdr eintragen\n",1;
our ($sim,$verbose) = 0;
$verbose = 1 if $opt_v;
$sim = 1 if $opt_s;
$Dest = $opt_d "localhost";
$Port = $opt_p 2001;
$Timeout = $opt_t 300; # max. seconds to wait for response
if ($cleanupoldfiles)
{
print "cleanup old files ..\n";
cleanup();
}
$SIG{'INT'} = \&SIGhandler;
our $SVDRP = SVDRP->new($Dest,$Port,$verbose,$sim);
our $EXIT = false;
if ($clearEPG eq 1)
{
print "clearing EPG\n";
my($result) = $SVDRP->SendCMD("clre");
die "Fehler beim Löschen EPG-Daten: $result" if ($sim == 0 && !$result =~ /EPG data cleared/);
}
# epg.tmp einlesen
&Lesepg;
foreach $epgzeile (@epgdatei)
{
chomp ($epgzeile);
if ($epgzeile =~ /\AC C-\d-\d\d\d-\d\d/)
{
$sender = $';
$epgzeile = substr($epgzeile,0,12);
printlog "PUTEPG: EPG-Zeile für Sender $sender ist -> $epgzeile\n",4;
my($result) = $SVDRP->SendCMD("PUTE");
printlog "PUTEPG: PUTE gesendet Result=$result \n",1;
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AC C-\d-\d\d-\d\d/)
{
$sender = $';
$epgzeile = substr($epgzeile,0,11);
printlog "PUTEPG: EPG-Zeile für Sender $sender ist -> $epgzeile\n",4;
my($result) = $SVDRP->SendCMD("PUTE");
printlog "PUTEPG: PUTE gesendet Result=$result \n",1;
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AE /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AT /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AS /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AD /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\Ac\z/)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
my($result) = $SVDRP->SendCMD(".");
printlog "PUTEPG: . gesendet!! Result=$result\n",1;
printlog "PUTEPG: Kanal abgeschlossen!!!\n",1;
}
if ($epgzeile =~ /\Ae\z/)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
}
my($result) = $SVDRP->SendCMD("QUIT");
printlog "PUTEPG: QUIT gesendet!! Result=$result\n",1;
$SVDRP->close;
printlog "PUTEPG: fertig!!!\n",1;
exit;
sub Error
{
print STDERR "Fehler: @_\n";
close(SOCK);
exit 0;
}
sub Lesepg
{
open (EINGABE, "<$epg/epg.data");
@epgdatei = <EINGABE>;
close (EINGABE);
}
Das zweite Script ist, wie man sieht, aus dem tvm2vdr.pl entstanden, und sind beide noch "ausbaufähig" (Fehlerbehandlung, usw).
Bis die Tage,
Zerphod