Wird dieser "ungültige Kanal" dann jemals weggeschaltet?
Ja, sobald sich ein Client verbindet und umschaltet.
Ich vermute mal, dass der initiale Kanal halt einfach dafür da ist, um die Verbindung zur TV-Karte aufzubauen.
Wird dieser "ungültige Kanal" dann jemals weggeschaltet?
Ja, sobald sich ein Client verbindet und umschaltet.
Ich vermute mal, dass der initiale Kanal halt einfach dafür da ist, um die Verbindung zur TV-Karte aufzubauen.
S.o. Screenshot im Startbeitrag. Wenn VDR gestartet wird, wird automatisch auf den ersten Sender/zuletzt gesehenen Sender geschaltet. VDR ruft den Stream vom Device (DVB-Tuner/SatIP-Tuner) ab. Ob der Stream dabei angezeigt wird, dürfte da keine Rolle spielen.
Was würde eigentlich passieren wenn man einfach ein nicht vorhandenes Sat-System einrichtet, nebst nicht tunbarem Kanal. Den dann als Startkanal festlegen. Dann müsste der VDR eigentlich mit "Kein Signal" dastehen...
Ich hab die Octopus erst mal vom Stromnetz getrennt. Wenn ich den VDR da starte, erscheint folgendes im Log:
Sep 24 12:07:04 nas systemd[1]: Starting Video Disk Recorder Daemon...
…
Sep 24 12:07:17 nas vdr[29720]: [29720] SATIP: Creating device CardIndex=0 DeviceNumber=0 [device 0]
Sep 24 12:07:17 nas vdr[29720]: [29744] SATIP poller thread started (pid=29720, tid=29744, prio=high)
…
Sep 24 12:07:19 nas vdr[29720]: [29720] switching to channel 1 S19.2E-1-1019-10301 (Das Erste HD)
Sep 24 12:07:19 nas vdr[29720]: [29720] info: Kanal nicht verfügbar!
…
Sep 24 12:07:21 nas systemd[1]: Started Video Disk Recorder Daemon.
D.h. VDR startet, findet keine Karte/SatIP-Signal und meldet halt, dass der Kanal nicht verfügbar ist. Der VDR braucht in dem Fall fast keine CPU-Last. Ist also im Grunde genommen genau das, was ich will.
Das generelle Problem ist aber damit nicht behoben. Nach dem Disconnect eines Frontendclients würde ja der Stream trotzdem weiterlaufen. D.h. nach der ersten Nutzung ist damit wieder der unerwünschte Zustand erreicht.
Wünschenswert wäre eine Option:
ReleaseDeviceWhenIdle = 1
Und als Parameter dann halt, dass der Stream sofort gestoppt wird oder eine Art Timeout, wenn das irgendwie sinnvoll ist.
Das hatte ich bereits gefunden und explizit deaktiviert. Das Ziel ist weder das NAS noch den VDR-Dienst runterzufahren. Ersteres wäre komplett falsch, zweiteres braucht dann ja bei einer langsameren Kiste durchaus einige Zeit, bis der Dienst wieder verfügbar ist.
Socket Activation wäre natürlich ein Workaround - wenn auch ein eher schlechter.
Mir geht's halt wirklich nur darum, dass der VDR bei Inaktivität keinen Stream vom Device anfordert. Bei epg-scan, Channelscan oder Client Connection darf er gern loslegen. Wird bei der Octopus kein Stream abgerufen, ist der Verbrauch bei der Hälfte.
Hi,
Ob Satip das kann weiß ich nicht. Ansonsten geht es mit dem dynamite-Plugin (bei lokalen Tunern).
Müsstest du mal testen ob das geht.
Aber wie soll erkannt werden, dass kein Tuner verwendet wird?
Sep 24 00:03:45 nas systemd[1]: Starting Video Disk Recorder Daemon...
Sep 24 00:03:56 nas vdr[28323]: [28323] VDR version 2.4.1 started
Sep 24 00:03:56 nas vdr[28323]: [28323] codeset is 'UTF-8' - known…
…
Sep 24 00:03:58 nas vdr[28323]: [28323] switching to channel 9 S19.2E-1-1057-61205 (RTLII HD)
…
Sep 24 00:20:36 nas vdr[28323]: [28323] [xine..put] OSD bandwidth: 594392 bytes/s (4643 kbit/s)
Sep 24 00:20:38 nas vdr[28323]: [28360] [xine..put] Closing connection 0
…
Sep 23 23:06:43 nas vdr[19143]: [19178] VNSI: Client with ID 1 connected: 192.168.109.24:50784
Sep 23 23:06:43 nas vdr[19143]: [19188] VNSI Client 1->192.168.109.24:50784 thread started (pid=19143, tid=19188, prio=high)
Sep 23 23:06:43 nas vdr[19143]: [19188] VNSI: Welcome client 'XBMC Media Center' with protocol version '13'
Sep 23 23:06:43 nas vdr[19143]: [19188] VNSI: LiveStreamer::Close - close
Sep 23 23:06:43 nas vdr[19143]: [19188] VNSI: close video input ...
Sep 23 23:06:43 nas vdr[19143]: [19188] VNSI: Successfully found following device: 0x701e38 (1) for receiving, priority=0
Sep 23 23:06:44 nas vdr[19143]: [19188] VNSI: Dummy receiver (0xb4114e80) activated
Sep 23 23:06:44 nas vdr[19143]: [19188] VNSI: activate live receiver: 1
Sep 23 23:06:44 nas vdr[19143]: [19188] VNSI: Successfully switched to channel 1 - Das Erste HD
Sep 23 23:06:44 nas vdr[19143]: [19188] VNSI: Started streaming of channel Das Erste HD (timeout 10 seconds)
…
Sep 23 23:06:58 nas vdr[19143]: [19190] VNSI: exit streamer thread
Sep 23 23:06:58 nas vdr[19143]: [19190] cLiveStreamer stream processor thread ended (pid=19143, tid=19190)
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI: LiveStreamer::Close - close
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI: close video input ...
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI: activate live receiver: 0
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI: Dummy receiver (0xb4114e80) deactivated
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI: close video input ...
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI: cxSocket::read(fd=28): eof, connection closed
Sep 23 23:06:58 nas vdr[19143]: [19188] VNSI Client 1->192.168.109.24:50784 thread ended (pid=19143, tid=19188)
Sep 23 23:06:58 nas vdr[19143]: [19189] device 1 receiver thread ended (pid=19143, tid=19189)
Sep 23 23:06:58 nas vdr[19143]: [19182] VNSI: removing client with ID 1 from client list
Display More
Bei SatIP hab ich noch keine Einstellung gefunden. Bisher beobachte ich folgendes Verhalten:
VDR-Start
Wenn der VDR-Service gestartet wird und alle Plugins initialisiert sind, wird sofort auf einen Kanal geschaltet. In den Einstellungen kann man konfigurieren, ob das der erste Kanal sein soll oder der zuletzt genutzte (setup.conf: InitialChannel = S19.2E-1-1019-10301). In der Zeit ist auch noch kein Frontend-Client geladen (Xineliboutput, Kodi per VNSI).
Das Dynamite-Plugin hatte ich noch nicht auf dem Schirm. Der Beschreibung nach zielt das aber eher auf das Hotplugging von Devices. Ich werd mich mal einlesen in das Plugin. Danke für den Tipp.
Clientüberwachung
Der VDR weiß, ob ein Client verbunden ist. Sowohl bei Xineliboutput als auch bei VNSI zeigt das Log an, ob ein Client verbunden ist.
Einfach die EPG Suche in den Einstellungen von Client/Server abschalten, dann ist Ruhe auf der Octopus.
Die EPG-Suche ist bei mir so konfiguriert, dass alle 5 Stunden ein Scan stattfindet. Auch hab ich beobachtet, dass beim epg-Scan die CPU-Leistung (schwaches NAS) auf 30% hochgeht. Ist das Scan beendet, liegt die CPU-Last für den VDR-Prozess nur noch bei 6-10%. Man kann also den Zeitraum des epg-Scans durchaus bestimmen. Der Screenshot von oben war außerhalb des epg-Scans.
Ideen
Ich werd mal den EPG-Scan und evtl. auch den Channelscan (Namen + PIDs) testhalber komplett deaktivieren. Auch hab ich schon beobachtet, dass beim Start von Xineliboutput nicht direkt auf den ersten/zuletzt genutzten Kanal geschaltet wurde sondern eine Art Titelbild angezeigt wurde. Ich wühl mich auch mal durch die Optionen in der setup.conf.
Falls ich nichts find, wär das wohl auch ein Fall für ein Feature Request, da ich wohl bestimmt nicht der Einzige mit dem Problem bin.
Guten Abend,
ich rüste derzeit meine Konfiguration um von HTPC mit TV-Karte auf Octopus NET + VDR auf ARM-NAS.
Sowohl die Octopus als auch das NAS laufen permanent. Jetzt hätte ich das Ganze natürlich gerne so stromsparend wie möglich. D.h. wenn kein Client mehr auf den VDR zugreift und keine Aufnahme im Gange ist, dann wär's nicht schlecht, wenn der VDR auch sämtliche Streams beendet.
Leider tut er das nicht, wie ich im Webfrontend der Octopus nachprüfen kann (siehe Screenshot).
Kann man das irgendwie einstellen? Ich hab leider nichts dazu gefunden.
Guten Abend,
Eigentlich hab ich andere Sachen zu tun, bin dann aber auf diesen Thread hier gestoßen. Wer's nicht anklicken will:
FernetMenta ist umgestiegen auf TV-Headend und pflegt das vnsi-Plugin für Kodi nicht mehr. Hier wurde das Thema schon mal angesprochen. Eigentlich würde ich nur sehr ungern weg von VDR. Es läuft halt ziemlich stabil bei mir. Allerdings ist die Integration in Kodi für mich zumindest zwingende Voraussetzung.
Und zu den Ebuilds:
Ich hab das vdr-overlay eingebunden. Da ist aber die 2.3.1 als maskierte Version die aktuellste. Gibt's da noch immer Pläne, das mal auf die 2.4.x zu aktualisieren? Welche Ebuilds nutzt gen2vdr?
*meld*
Nutze es auf meinem PC, Notebook, HTPC und meiner ARM-Nas.
Gerade auf der ARM-Nas wäre die notwendige Systemanpassung (Kernelpatch + Device Tree) mit anderen Distros wesentlich schwieriger.
Würde mich auch interessieren. vdr-2.4.0 ist jetzt schon eine ganze Weile raus. Im vdr-devel ist aber sogar noch die 2.3.1 maskiert. Ein Ebuild für die 2.4.0 konnte ich in den großen weiten Welten des Internets überhaupt nicht finden. Der Status der meisten Plugins ist wenig positiv.
Ich würde gern mal die 2.4.0 ausprobieren. Das Problem an der Sache ist, dass ich die 2.3.2 auch nur mit irgendwelchen Patches zum Laufen bekommen hab. Und bei mir muss zwingend vdr-sc und vdr-vnsi laufen. Die 2.3.2 funktioniert momentan ziemlich problemlos. Wenn ich mit der 2.4.0 meine aktuelle Config versau, streikt die Familie.
So, jetzt hab ich's endgültig geschafft. Schaltet man das Debug-Log ein, dann wird das Problem sichtbar.
Oder mit anderen Worten, das Netzwerk war noch nicht da. Jetzt gibt's als mögliche Dependencies network-target, network-online.target. Das gewünschte Ergebnis brachte allerdings nur systemd-networkd-wait-online.
/etc/systemd/system/vdr.service.d/02_wait_for_network.conf
Ich bin einen halben Schritt weiter.
Ich hab die setup.conf mal verschoben, d.h. mit einer Vanilla-Config für den VDR wieder begonnen.
Als nächstes hab ich nur die Plugins aktiviert:
eselect vdr-plugin list
Available VDR plugins:
[1] sc *
[2] streamdev-client
[3] streamdev-server
[4] svdrpservice
[5] vdrmanager
[6] vnsiserver *
[7] xineliboutput *
D.h. Streamdev, SVRDP, VDRManager sind deaktiviert. Bis jetzt funktioniert es damit schon den 2. Tag in Folge. Ich werd jeden Tag mal etwas an der Config ändern und dann beobeachten, wer der eigentliche Übeltäter ist.
Viele Grüße
Da du ja unter Gentoo sowieso Systemd benutzt, kannst du das auch gleich für das Automount hernehmen:
https://ddumont.wordpress.com/…usb-devices-with-systemd/
Alternativ sollte es auch mit Udev problemlos gehen:
https://www.axllent.org/docs/view/auto-mounting-usb-storage/
Sinnvoll ist es vermutlich in beiden Fällen, für die einzelnen Partitionen Labels zu verwenden, die du dann entweder in Udev oder mit Systemd in der fstab adressieren kannst.
Leider muss ich den Thread wieder öffnen. Hab mich wohl zu früh gefreut. Das Problem trat in den letzten Tagen dann doch wieder auf. Tut mir leid, wenn in einigen vorherigen Beiträgen ein bisschen Frust mit durchkam.
Ich hab gestern abend mal vor dem Ausschalten das VNSI-Plugin deaktiviert, einfach um VNSI als Blockierquelle auszuschließen. Und heut früh beim einschalten:
ARD: klappt
ZDF: klappt
Pro7 HD: Sender nicht verfügbar …
Langsam bin ich echt am Verzweifeln. Mir gehen die Ideen aus, wo ich noch ansetzen kann. Die Holzhammermethode wäre, nach dem Abschluss des Startvorgangs des VDR noch mal einen VDR-Restart durchführen zu lassen.
Meine bisherigen Erkenntnisse:
Randinfomationen:
Was ist jetzt noch testen werde:
Btw. der Dynamite-Patch
diff -urBN work.orig/device.c work/device.c
--- work.orig/device.c 2017-02-01 18:04:35.751419424 +0100
+++ work/device.c 2017-02-01 18:58:14.095114281 +0100
@@ -285,6 +285,54 @@
int cScDevices::budget=0;
+int cScDevices::numScDevices = 0;
+cDevice *cScDevices::scdevice[MAXDEVICES] = { NULL };
+bool cScDevices::autoLateInit = false;
+
+int cScDevices::NumScDevices(void)
+{
+ return numScDevices;
+}
+
+cDevice *cScDevices::GetScDevice(int CardIndex)
+{
+ for (int n = 0; n < numScDevices; n++) {
+ if (scdevice[n] && (scdevice[n]->CardIndex() == CardIndex))
+ return scdevice[n];
+ }
+ return NULL;
+}
+
+void cScDevices::AddScDevice(cDevice *Device)
+{
+ if (Device == NULL)
+ return;
+ int i = 0;
+ while ((i < numScDevices) && (i < MAXDEVICES) && (scdevice[i] != Device))
+ i++;
+ if (i < MAXDEVICES) {
+ scdevice[i] = Device;
+ if (i == numScDevices)
+ numScDevices++;
+ }
+ else
+ esyslog("too many sc-devices!");
+}
+
+void cScDevices::DelScDevice(cDevice *Device)
+{
+ if (Device == NULL)
+ return;
+ int i = 0;
+ while ((i < numScDevices) && (i < MAXDEVICES)) {
+ if (scdevice[i] == Device) {
+ scdevice[i] = NULL;
+ break;
+ }
+ i++;
+ }
+}
+
void cScDevices::DvbName(const char *Name, int a, int f, char *buffer, int len)
{
snprintf(buffer,len,"%s/%s%d/%s%d",DEV_DVB_BASE,DEV_DVB_ADAPTER,a,Name,f);
@@ -393,17 +441,18 @@
{
if(ScSetup.ForceTransfer)
SetTransferModeForDolbyDigital(2);
- for(int n=cDevice::NumDevices(); --n>=0;) {
- cDevice *dev=cDevice::GetDevice(n);
+ for(int n=NumScDevices(); --n>=0;) {
+ cDevice *dev=GetScDevice(n);
for(cScDevicePlugin *dp=devplugins.First(); dp; dp=devplugins.Next(dp))
if(dp->LateInit(dev)) break;
}
+ autoLateInit = true;
}
void cScDevices::Shutdown(void)
{
- for(int n=cDevice::NumDevices(); --n>=0;) {
- cDevice *dev=cDevice::GetDevice(n);
+ for(int n=NumScDevices(); --n>=0;) {
+ cDevice *dev=GetScDevice(n);
for(cScDevicePlugin *dp=devplugins.First(); dp; dp=devplugins.Next(dp))
if(dp->EarlyShutdown(dev)) break;
}
diff -urBN work.orig/device.h work/device.h
--- work.orig/device.h 2017-02-01 18:04:35.751419424 +0100
+++ work/device.h 2017-02-01 18:59:55.159814133 +0100
@@ -93,6 +93,16 @@
static bool ForceBudget(int n);
static void DvbName(const char *Name, int a, int f, char *buffer, int len);
static int DvbOpen(const char *Name, int a, int f, int Mode, bool ReportError
=false);
+private:
+ static int numScDevices;
+ static cDevice *scdevice[MAXDEVICES];
+ static bool autoLateInit;
+public:
+ static int NumScDevices(void);
+ static cDevice *GetScDevice(int CardIndex);
+ static void AddScDevice(cDevice *Device);
+ static void DelScDevice(cDevice *Device);
+ static bool AutoLateInit() { return autoLateInit; };
};
// ----------------------------------------------------------------
diff -urBN work.orig/device-hd.c work/device-hd.c
--- work.orig/device-hd.c 2017-02-01 18:04:35.762417341 +0100
+++ work/device-hd.c 2017-02-01 18:19:58.295566719 +0100
@@ -51,12 +51,14 @@
{
if(!initial) cCondWait::SleepMs(150);
cMutexLock lock(&cafdMutex);
+ if(fd_ca < 0) return false;
return ioctl(fd_ca,CA_SET_DESCR,ca_descr)>=0;
}
bool cScDvbHdFfDevice::SetCaPid(ca_pid_t *ca_pid)
{
cMutexLock lock(&cafdMutex);
+ if(fd_ca < 0) return false;
return ioctl(fd_ca,CA_SET_PID,ca_pid)>=0;
}
diff -urBN work.orig/device-sd.c work/device-sd.c
--- work.orig/device-sd.c 2017-02-01 18:04:35.751419424 +0100
+++ work/device-sd.c 2017-02-01 18:22:43.979598238 +0100
@@ -59,12 +59,14 @@
bool cScDvbSdFfDevice::SetCaDescr(ca_descr_t *ca_descr, bool initial)
{
cMutexLock lock(&cafdMutex);
+ if(fd_ca < 0) return false;
return ioctl(fd_ca,CA_SET_DESCR,ca_descr)>=0;
}
bool cScDvbSdFfDevice::SetCaPid(ca_pid_t *ca_pid)
{
cMutexLock lock(&cafdMutex);
+ if(fd_ca < 0) return false;
return ioctl(fd_ca,CA_SET_PID,ca_pid)>=0;
}
@@ -88,6 +90,7 @@
void cScDvbSdFfDevice::DumpAV(void)
{
+ if(fd_ca < 0) return;
if(LOG(L_CORE_AV7110)) {
#define CODEBASE (0x2e000404+0x1ce00)
cMutexLock lock(&cafdMutex);
diff -urBN work.orig/device-tmpl.c work/device-tmpl.c
--- work.orig/device-tmpl.c 2017-02-01 18:04:35.751419424 +0100
+++ work/device-tmpl.c 2017-02-01 18:45:09.925767678 +0100
@@ -64,6 +64,12 @@
#else
cCam *Cam(void) { return cam; }
#endif //!SASC
+private:
+ bool lateInit;
+public:
+#ifdef __DYNAMIC_DEVICE_PROBE
+ virtual bool SetIdleDevice(bool Idle, bool TestOnly);
+#endif
};
SCDEVICE::SCDEVICE(cScDevicePlugin *DevPlugin, int Adapter, int Frontend, int cafd)
@@ -77,6 +83,7 @@
:DVBDEVICE(Adapter)
#endif //APIVERSNUM >= 10711
{
+ lateInit = false;
#ifndef SASC
tsBuffer=0; hwciadapter=0;
#endif
@@ -90,10 +97,14 @@
#ifdef SASC
cam=new cCam(this,Adapter,0,devId,devplugin,softcsa,fullts);
#endif // !SASC
+ cScDevices::AddScDevice(this);
+ if (cScDevices::AutoLateInit())
+ LateInit();
}
SCDEVICE::~SCDEVICE()
{
+ cScDevices::DelScDevice(this);
#ifndef SASC
DetachAllReceivers();
Cancel(3);
@@ -141,6 +152,9 @@
void SCDEVICE::LateInit(void)
{
+ if (lateInit)
+ return;
+ lateInit = true;
int n=CardIndex();
if(DeviceNumber()!=n)
PRINTF(L_GEN_ERROR,"CardIndex - DeviceNumber mismatch! Put SC plugin first on VDR commandline!");
@@ -157,8 +171,15 @@
if(fullts) PRINTF(L_GEN_INFO,"Enabling hybrid full-ts mode on card %s",devId);
else PRINTF(L_GEN_INFO,"Using software decryption on card %s",devId);
}
- if(fd_ca2>=0) hwciadapter=cDvbCiAdapter::CreateCiAdapter(this,fd_ca2);
- cam=new cCam(this,DVB_DEV_SPEC,devId,devplugin,softcsa,fullts);
+#ifdef __DYNAMIC_DEVICE_PROBE
+ cDevice *cidev = parentDevice ? parentDevice : this;
+#else
+ cDevice *cidev = this;
+#endif
+ if(fd_ca2>=0) hwciadapter=cDvbCiAdapter::CreateCiAdapter(cidev,fd_ca2);
+ if (cidev != this)
+ fd_ca2 = -1; // will be closed by patched cDvbCiAdapter
+ cam=new cCam(cidev,DVB_DEV_SPEC,devId,devplugin,softcsa,fullts);
}
bool SCDEVICE::HasCi(void)
@@ -229,6 +250,34 @@
return false;
}
+#ifdef __DYNAMIC_DEVICE_PROBE
+bool SCDEVICE::SetIdleDevice(bool Idle, bool TestOnly)
+{
+ if (TestOnly) {
+ if (hwciadapter)
+ return hwciadapter->SetIdle(Idle, true);
+ return DVBDEVICE::SetIdleDevice(Idle, true);
+ }
+ if (hwciadapter && !hwciadapter->SetIdle(Idle, false))
+ return false;
+ if (!DVBDEVICE::SetIdleDevice(Idle, false)) {
+ if (hwciadapter)
+ hwciadapter->SetIdle(!Idle, false);
+ return false;
+ }
+ if (Idle) {
+ if (fd_ca >= 0)
+ close(fd_ca);
+ fd_ca = -1;
+ }
+ else {
+ if (fd_ca < 0)
+ fd_ca = cScDevices::DvbOpen(DEV_DVB_CA,adapter,frontend,O_RDWR);
+ }
+ return true;
+}
+#endif
+
#endif // !SASC
#undef SCDEVICE
diff -urBN work.orig/sc.c work/sc.c
--- work.orig/sc.c 2017-02-01 18:04:35.754418856 +0100
+++ work/sc.c 2017-02-01 19:00:59.057886885 +0100
@@ -968,8 +968,8 @@
{
AutoUpdate=1;
memset(ScCaps,0,sizeof(ScCaps));
- ScCaps[0]=1;
- ScCaps[1]=2;
+ for(int i=0; i<MAXSCCAPS; i++)
+ ScCaps[i]=i+1;
ConcurrentFF=0;
LocalPriority=0;
ForceTransfer=1;
Display More
Hab mein Problem lösen können.
Nicht die Ladereihenfolge der Plugins war das Problem. Vielmehr startete der VDR bevor die TV-Karte initialisiert war. Darauf gestoßen bin ich über den Umweg des Dynamite-Plugins.
Also hab ich mich hingesetzt, den VDR, SC und Dynamite gepatcht und alles compiliert. VDR startete inklusive aller Plugins. Dummerweise kann ich weder über Kodi (VNSI) noch über xineliboutput auf den VDR zugreifen. Entsprechend hab ich das Dynamite-Plugin inkl. sämtlicher Patches wieder runtergeschmissen.
Tante Google brachte mich nach langer Recherche (leider wird überall abgeblockt, wenn die bösen Plugins im Thread erscheinen) auf eine Systemd-Lösung. Und die funktioniert ausgesprochen gut. Ich geb mal hier 'ne Anleitung:
1. Die Devices ermitteln
Meine TV-Karte ist eine Cine S2.
ls /dev/dvb/adapter*
/dev/dvb/adapter0:
demux0 dvr0 frontend0
/dev/dvb/adapter1:
demux0 dvr0 frontend0
2. Udev-Regeln
udevadm info -a -p $(udevadm info -q path -n /dev/dvb/adapter0/dvr0)
looking at device '/devices/pci0000:00/0000:00:1c.2/0000:03:00.0/dvb/dvb0.dvr0':
KERNEL=="dvb0.dvr0"
SUBSYSTEM=="dvb"
DRIVER==""
…
udevadm info -a -p $(udevadm info -q path -n /dev/dvb/adapter1/dvr0)
looking at device '/devices/pci0000:00/0000:00:1c.2/0000:03:00.0/dvb/dvb0.dvr0':
KERNEL=="dvb1.dvr0"
SUBSYSTEM=="dvb"
DRIVER==""
…
Display More
Daraus bastel ich mir die Datei:
/etc/udev/rules.d/98-dvb.rules
KERNEL=="dvb0.demux0", TAG+="systemd"
KERNEL=="dvb0.dvr0", TAG+="systemd"
KERNEL=="dvb0.frontend0", TAG+="systemd"
KERNEL=="dvb1.demux0", TAG+="systemd"
KERNEL=="dvb1.dvr0", TAG+="systemd"
KERNEL=="dvb1.frontend0", TAG+="systemd"
Das Taggen ist wichtig, damit Systemd die Devices mit systemctl auflistet und diese in den Units verwendet werden können.
3. Systemd+VDR
Die mitgelieferte VDR-Unit zu ändern, ist schlecht, da man bei Systemupdates die Änderungen verpasst. Also erweitern wir einfach die Unit:
/etc/systemd/system/vdr.service.d/01_wait_for_devices.conf
[Unit]
Wants=dev-dvb-adapter0-demux0.device
After=dev-dvb-adapter0-demux0.device
Wants=dev-dvb-adapter0-dvr0.device
After=dev-dvb-adapter0-dvr0.device
Wants=dev-dvb-adapter0-frontend0.device
After=dev-dvb-adapter0-frontend0.device
Wants=dev-dvb-adapter1-demux0.device
After=dev-dvb-adapter1-demux0.device
Wants=dev-dvb-adapter1-dvr0.device
After=dev-dvb-adapter1-dvr0.device
Wants=dev-dvb-adapter1-frontend0.device
After=dev-dvb-adapter1-frontend0.device
Display More
Abschließender Tralala
Entweder man startet das System neu, oder man tippt halt folgende Befehle noch ein:
Fazit
Der Aufwand und das Ergebnis von vdr-dynamite waren irgendwie ernüchternd. Zuviel Patcherei (einen musste ich manuell anpassen). Und hinterher funktionierte es trotzdem nicht.
Die Identifikation des Problems selbst war auch ein Stochern im Heuhaufen. XVDR+SC lief damals problemlos. Mit Umstieg auf VNSI musste ich dann VDR immer bei der ersten Nutzung 2x starten. VNSI lag da irgendwie als Fehlerquelle nahe. Irgendwelche Ausflüge zum anderen bösen Plugin brachten irgendwie außer einigem Lernerfolg keine brauchbaren Erfolge.
Jetzt funktioniert alles, wie es soll. Ich hoffe, es hilft anderen, die Suche zu verkürzen.
Ich würde mal … nachsehen, … was in /var/vdr/tmp/systemd_env landet.
VDR_OPTS=" '--chartab=ISO8859-9' '--watchdog=60' '--device=0' '--device=1' '--cachedir=/var/cache/vdr' '--log=0' '--video=/home/sm/Daten/vdr/video' '--record=/usr/share/vdr/bin/vdrrecord-gate.sh' '--plugin=svdrpservice ' '--plugin=vdrmanager -p6420 -Pxbmc -k /etc/vdr/plugins/vdrmanager/vdrmanager.pem -c ' '--plugin=vnsiserver ' '--plugin=xineliboutput --local=none --remote=37890' '--plugin=streamdev-server -r /usr/share/vdr/streamdev/externremux.sh ' '--plugin=sc '"
LANG=de_DE.utf8
LC_COLLATE=
Allerdings muss ich dazu sagen, dass ich vorm letzten Update die VDR-Start-Unit selbst geschrieben hatte. Die sah in etwa so aus wie die Ausgabe hier. Und obwohl --plugin=sc an erster Stelle stand, hatte ich dasselbe Problem. Ich nehme daher stark an, dass die angegebene Reihenfolge der Plugins keine Rolle für das Ladeverhalten der Plugins durch vdr spielt.
Kann es sein, dass Du das alte und das neuere böse plugin parallel lädst? Du brauchst nur eins von denen.
Nein, da hab ich schon drauf geachtet.
Mit dem neueren "bösen" Plugin hab ich allerdings auch so meine Probleme. Da krieg ich permanent den Fehler:
Jan 30 18:27:50 htpc systemd[1]: Starting Video Disk Recorder Daemon...
Jan 30 18:27:51 htpc vdr[31730]: New default svdrp port 6419!
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: plugin version 2.2.3 initializing (VDR 2.3.2)
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: decryption library: libdvbcsa
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: Creating sCCIAdapter for device 0
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: Creating sCCIAdapter for device 1
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: plugin started
Jan 30 18:27:52 htpc vdr[31708]: [31748] DVBxPI: 0.0: doReply changed, reset triggered
Jan 30 18:27:52 htpc vdr[31708]: [31748] DVBxPI: 0.0: now using CAIDs version 1
Jan 30 18:27:52 htpc vdr[31708]: [31748] DVBxPI: 0.0: status 'present'
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 1.0: doReply changed, reset triggered
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 1.0: now using CAIDs version 1
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 1.0: status 'present'
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 0.0: status 'reset'
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 1.0: status 'reset'
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 0.0: status 'ready'
Jan 30 18:27:52 htpc vdr[31708]: [31708] DVBxPI: 1.0: status 'ready'
Jan 30 18:27:52 htpc vdr[31708]: [31748] DVBxPI: CaInfo: 0.0 sending CA info
Jan 30 18:27:52 htpc vdr[31708]: [31749] DVBxPI: CaInfo: 1.0 sending CA info
Jan 30 18:27:54 htpc systemd[1]: Started Video Disk Recorder Daemon.
Jan 30 18:28:20 htpc vdr[31708]: [31708] DVBxPI: 0.0 set CAM decrypt (SID 61200 (0xEF10), caLm 4, HasCaDescriptors 0)
Jan 30 18:28:22 htpc vdr[31708]: [31708] DVBxPI: 0.0 set CAM decrypt (SID 61200 (0xEF10), caLm 5, HasCaDescriptors 1)
Jan 30 18:28:22 htpc vdr[31708]: [31708] DVBxPI: 0.0 set CAM decrypt (SID 61200 (0xEF10), caLm 4, HasCaDescriptors 1)
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: 002b6f3c
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: 00000000
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: 00000000
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: 00000000
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: 00000000
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: ff000000
Jan 30 18:28:22 htpc vdr[31708]: [31747] DVBxPI-Error: Action: read failed unknown command: 00000000
Display More
Das Problem wurde hier und hier schon mal adressiert. Das Problem wurde damit als gelöst gekennzeichnet, in dem der Socketmodus deaktiviert wurde. Leider tritt das Problem bei mir im Netzwerkmodus auf.
Wie startest du denn den VDR?
Danke, systemctl. cat ... kannte ich noch nicht. Man lernt doch nie aus.
# /usr/lib/systemd/system/vdr.service
[Unit]
Description=Video Disk Recorder Daemon
After=systemd-udevd.service lirc.service
Requires=systemd-udevd.service
DefaultDependencies=no
[Service]
User=vdr
# this will collect the parameters and set them into the VDR_OPTS
# variable in the EnvironmentFile
ExecStartPre=/usr/share/vdr/systemd/vdr-systemd_helper.sh --start-pre
# this is where we get our parameters (still manageable
# in the /etc/conf.d/vdr.* files
EnvironmentFile=/var/vdr/tmp/systemd_env
# start VDR with our desired parameters, please disable the
# internal watchdog by setting the timeout to 0
ExecStart=/usr/bin/vdr "$VDR_OPTS"
# execute addons/plugins scripts meant to be run afer starting
ExecStartPost=/usr/share/vdr/systemd/vdr-systemd_helper.sh --start-post
# execute addons/plugins scripts meant to be run before stopping
ExecStop=/usr/share/vdr/systemd/vdr-systemd_helper.sh --stop-pre
# execute final scripts
ExecStopPost=/usr/share/vdr/systemd/vdr-systemd_helper.sh --stop-post
Restart=always
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/vdr.service.d/00-gentoo-vdr-user.conf
#
# /etc/systemd/system/vdr.service.d/00-gentoo-vdr-user.conf
#
# use this file to override settings from vdr.service
[Service]
# Please consult media-tv/gentoo-vdr-scritpts
# README.systemd for further details
#User=root
Display More
Die Plugins werden aktiviert über:
eselect vdr-plugin list
Available VDR plugins:
[1] dvb**zensiert**
[2] zensiert *
[3] streamdev-client
[4] streamdev-server *
[5] svdrpservice *
[6] vdrmanager *
[7] vnsiserver *
[8] xineliboutput *
Wenn ich über vdr-sxfe (xineliboutput) in die Plugin-Einstellungen reingeh, steht das XX-Plugin an der letzten Stelle. Aber die Reihenfolge ist irgendwie immer unterschiedlich.
Guten Abend,
ich kann mich dunkel daran erinnern, dass Fragen zu einem gewissen Plugin nicht erwünscht waren. Ich probier's trotzdem mal. Falls unerwünscht, dann bitte den Thread einfach löschen (und mir evtl. 'ne PN schreiben).
Ich nutze vdr als Backend in Kodi. Die Verbindung zwischen vdr und Kodi stelle ich mit dem VNSI-Server her. Dabei nutze ich auch PayTV-Sender.
Starte ich jetzt den HTPC, dann funktionieren nur die FreeTV-Sender. Sämtliche verschlüsselte Kanäle werden beim Aufruf als nicht verfügbar angezeigt. D.h. nicht die Entschlüsselung schlägt fehl, sondern die Kanäle sind einfach blockiert und nicht verfügbar. Starte ich vdr neu, funktioniert's (systemctl restart vdr). Ab dem 2. VDR-Start funktionieren alle Sender auch, wenn der HTPC für ein paar Stunden ausgeschaltet wird. Nur wenn ich am nächsten Tag (keine Ahnung, wieviel Stunden Pause notwendig sind) den HTPC wieder hochfahr, dann hab ich wieder das o.g. Problem.
Jetzt könnte man dahinter die Ladereihenfolge der Plugins vermuten. Regeln konnte man das mit der order.conf. Aber so, wie ich aus Tante Google rausquetschen konnte, war die order.conf yavdr-spezifisch (ich nutze ein reines Gentoo) und ist mittlerweile obsolet. Den Quelltext von VDR hab ich ebenfalls mal durchgegrept, ohne jedoch den Suchbegriff "order.conf" überhaupt zu finden. Von daher gehe ich aus, dass es die order.conf im Vanilla-VDR nicht gibt.
Daher die Frage:
Wie kann ich den VNSI-Server dazu bewegen, dass er erst startet, wenn das sc-Plugin geladen und initialisiert ist?
Version VDR: 2.3.2 (das Problem bestand aber auch schon mit VDR-2.2.x)
VNSI: Git-Version
Kodi: 17.0_rc3-r2
Hab ebenfalls das USE-Flag "vanilla" gesetzt und die 2.3.2 erfolgreich compilieren könnnen - mit Systemd-Unterstützung.
Mit der 2.2.x hatte ich mein eigenes Startscript. Die 2.3.2 mit der mitgelieferten Systemd-Unit funktioniert klasse. Vielen Dank für die ganze Arbeit.
Den zusätzlichen Gentoo-Patch hab ich im Übrigen nicht vermisst. Aber ich verwende VDR sowieso ausschließlich als Backend für Kodi.
Sowas gehört bitte nicht in einen Announce/News Thread, bekommt sowieso schwerlich jemand mit, sondern in einen passenden bzw. am Besten in einen eigenen Thread.
Sorry, hast natürlich Recht. Danke fürs Verschieben.
Verwendest Du wirklich diesen Scheißdreck?
Ja, und ich hatte Gentoo schon vor vielen Jahren umgestellt, als Systemd noch gar nicht richtig unter Gentoo unterstützt wurde.
Aber die Diskussion würde wohl eher in einen Flamewar ausarten. Lassen wir's einfach dabei, dass ich Poetterings Produkten sicherlich sehr kritisch gegenüber steh, aber nach sehr ausgiebiger Überlegung für mich viele Vorteile von Systemd gefunden hab.
Guten Abend,
hab grad versucht, die 2.3.1 zu compilieren und bin daran gescheitert. Der Grund könnte u.a. Systemd-232 sein, denn die Fehlermeldung lautete:
Package libsystemd-daemon was not found in the pkg-config search path.
Perhaps you should add the directory containing `libsystemd-daemon.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libsystemd-daemon' found
Jetzt hab ich im Changelog auf der ersten Seite gesehen, dass das in der 2.3.1 gefixt wurde.
Leider hab ich bisher kein Ebuild für die 2.3.2 entdecken können. Die Umversionierung hat nicht funktioniert, da in der 2.3.1 noch diverse Patches enthalten sind.
diff -Naur vdr-2.1.7.orig/Makefile vdr-2.1.7/Makefile
--- vdr-2.1.7.orig/Makefile 2015-01-18 12:37:45.506034673 +0100
+++ vdr-2.1.7/Makefile 2015-01-18 12:38:34.086037162 +0100
@@ -116,7 +116,7 @@
VDRVERSION = $(shell sed -ne '/define VDRVERSION/s/^.*"\(.*\)".*$$/\1/p' config.h)
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' config.h)
-all: vdr i18n plugins
+all: vdr i18n
# Implicit rules:
@@ -170,7 +170,7 @@
PODIR = po
LOCALEDIR = locale
-I18Npo = $(wildcard $(PODIR)/*.po)
+I18Npo = $(foreach dir,$(LINGUAS),$(wildcard $(PODIR)/$(dir)*.po))
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr.mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/vdr.pot
@@ -193,7 +193,7 @@
install-i18n: i18n
@mkdir -p $(DESTDIR)$(LOCDIR)
- cp -r $(LOCALEDIR)/* $(DESTDIR)$(LOCDIR)
+ @(cd $(LOCALEDIR); for linguas in $(LINGUAS); do [ "$$linguas" = "en" ] && continue; cp -r --parents $$linguas* $(DESTDIR)$(LOCDIR); done)
# The 'include' directory (for plugins):
@@ -255,7 +255,7 @@
# Install the files (note that 'install-pc' must be first!):
-install: install-pc install-bin install-dirs install-conf install-doc install-plugins install-i18n install-includes
+install: install-pc install-bin install-dirs install-conf install-doc install-i18n install-includes
# VDR binary:
@@ -267,12 +267,13 @@
install-dirs:
@mkdir -p $(DESTDIR)$(VIDEODIR)
- @mkdir -p $(DESTDIR)$(CONFDIR)
- @mkdir -p $(DESTDIR)$(ARGSDIR)
- @mkdir -p $(DESTDIR)$(CACHEDIR)
+# @mkdir -p $(DESTDIR)$(CONFDIR)
+ @mkdir -p $(DESTDIR)$(ARGSDIR)
+# @mkdir -p $(DESTDIR)$(CACHEDIR)
@mkdir -p $(DESTDIR)$(RESDIR)
install-conf:
+ @mkdir -p $(DESTDIR)$(CONFDIR)
@cp -pn *.conf $(DESTDIR)$(CONFDIR)
# Documentation:
@@ -299,8 +300,11 @@
# Includes:
install-includes: include-dir
- @mkdir -p $(DESTDIR)$(INCDIR)
- @cp -pLR include/vdr include/libsi $(DESTDIR)$(INCDIR)
+# @mkdir -p $(DESTDIR)$(INCDIR)
+# @cp -pLR include/vdr include/libsi $(DESTDIR)$(INCDIR)
+ @mkdir -p $(DESTDIR)$(INCDIR)/vdr $(DESTDIR)$(INCDIR)/vdr/libsi
+ @cp -pLR include/vdr $(DESTDIR)$(INCDIR)
+ @cp -pLR include/libsi Make.config $(DESTDIR)$(INCDIR)/vdr
# pkg-config file:
Display More
Brauch ich die Patches noch, oder sind die in der 2.3.2 schon integriert? Gibt's vielleicht schon irgendwo ein Ebuild?