An meinem Test-VDR verwende ich das xineliboutput-Plugin mit "Remote" frontend auf der gleichen Kiste.
Das Frontend wird nur gestartet, wenn der Bildschirm an ist bzw. wird beides mit der Fernbedienung angeschaltet.
Bisheriges "vanilla" Verhalten war, das eine Minute nach dem Start vom VDR grundsätzlich alle SAT>IP Tuner dauerbelegt sind bis "in alle Ewigkeit" bzw. bis der VDR wieder abgeschaltet wird, leider unabhängig der "äußeren" Bedingungen:
- Automatischer Start wegen Aufnahme (erstmal kein Kanal benötigt)
- manueller Start um sich per ssh einzuloggen (erstmal kein Kanal benötigt)
- manueller oder automatischer Start, zusätzlich Start des Frontends per Fernbedienung (Kanal benötigt)
Mein Patch von hier führt schonmal dazu das nicht ständig sämtliche Tuner in Verwendung sind und der EITScan nach dem ersten Durchlauf ein Päuschen einlegt. Dadurch kann der vtuner diese SAT>IP-Tuner freigeben.
Mit diesem kruden "Holzhammer"-Patch habe ich meinen vdr dazu bekommen gänzlich ohne Kanal zu starten:
diff --git a/vdr.c b/vdr.c
index 1bdc51ab..fd8d82c1 100644
--- a/vdr.c
+++ b/vdr.c
@@ -913,10 +913,13 @@ int main(int argc, char *argv[])
}
if (Setup.InitialVolume >= 0)
Setup.CurrentVolume = Setup.InitialVolume;
+
+/*
{
LOCK_CHANNELS_READ;
Channels->SwitchTo(Setup.CurrentChannel);
}
+*/
// Restore volume:
@@ -980,9 +983,10 @@ int main(int argc, char *argv[])
LOCK_CHANNELS_READ;
const cChannel *Channel = Channels->GetByNumber(cDevice::CurrentChannel());
if (Channel && (Channel->Vpid() || Channel->Apid(0) || Channel->Dpid(0))) {
+ /*
if (cDevice::GetDeviceForTransponder(Channel, LIVEPRIORITY) && Channels->SwitchTo(Channel->Number())) // try to switch to the original channel...
;
- else if (LastTimerChannel > 0) {
+ else */ if (LastTimerChannel > 0) {
Channel = Channels->GetByNumber(LastTimerChannel);
if (Channel && cDevice::GetDeviceForTransponder(Channel, LIVEPRIORITY) && Channels->SwitchTo(LastTimerChannel)) // ...or the one used by the last timer
;
Display More
Das führt nun zu folgendem Verhalten: VDR startet und belegt erstmal keine SAT>IP-Tuner, nach einer Minute wird der EPG-Scan auf allen SAT>IP-Tunern gestartet. Nach dem ersten Durchlauf werden alle SAT>IP-Tuner von vtuner wieder freigegeben (Erkennung nur Section-Pids mit Timeout 60 Sekunden), der VDR selbst lässt die SAT>IP-Tuner lustig weiter senden. Startet eine Aufnahme wurde bei mir ein SAT>IP-Tuner belegt und nach der Aufnahme nie wieder freigegeben
Einziger Nachteil: Fernsehbild erscheint nun erst nach einmaligem Umschalten, da ja von Haus aus erstmal kein Kanal angewählt ist. Die Frage ist ob ein Ausgabeplugin (xineliboutput) dem VDR mitteilen kann das sich ein Ausgabefrontend verbunden hat und damit dann auf den zuletzt verwendeten Kanal geschaltet wird.
So wie ich es bis jetzt sehe gibt es nur ein "anschalten" von allem, aber kein "abschalten". Im Endeffekt läuft alles über cDevice::SetChannel, dort wird vor dem Umschalten der alte Kanal abgeschaltet. Ein cDevice::UnSetChannel oder cDevice::ClearChannel das die SectionHandler beendet und beim PrimaryDevice zusätzlich StopReplay aufruft gibt es leider nicht