Hallo
Klingt evtl ein wenig verrückt aber gibt es eine Art suspend für einen streamdev client.
Hintergrund ist die Nutzung mehrerer rpi in einem Haus und es muss ja nicht sein dass die 24/7 durchstreamen....
Evtl mit nem timeout oder so...
Cu
GTR
Hallo
Klingt evtl ein wenig verrückt aber gibt es eine Art suspend für einen streamdev client.
Hintergrund ist die Nutzung mehrerer rpi in einem Haus und es muss ja nicht sein dass die 24/7 durchstreamen....
Evtl mit nem timeout oder so...
Cu
GTR
http://www.vdr-wiki.de/wiki/index.php/Suspendoutput-plugin
Zusätzlich solltest du dann noch den EPG-Scan des VDR deaktivieren.
Hallo
Meine fresse das ding gibts ja schon ewig .....
Asche über mein haupt ....
Danke !
Hallo
hat jemand das Plugin unter 2.1.6 laufen ?
Ich bekomme hier:
*** Plugin suspend:
g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE6 4_SOURCE -c -DPLUGIN_NAME_I18N='"suspendoutput"' -I/vdr/VDR216/include -o suspendoutput.o suspendoutput.c
suspendoutput.c: In member function ‘void cPluginSuspendoutput::CheckInactivityTimer()’:
suspendoutput.c:315:20: error: cannot call member function ‘bool cCutter::Active()’ without object
make[1]: *** [suspendoutput.o] Fehler 1
CU
Klarer Fall von: User nicht geeignet für Developer-Versionen?!
Der Fehler ist leicht zu beheben, wenn man weiß, wie. Ich packe das Plugin später mal bei VDR4Arch ins Repository, dann gibts auch einen Patch für 2.1.6
Hallo Copperhead
ich nehme das jetzt mal nicht persönlich .. - denn - ich habe jetzt seit 15.07.2000 den VDR am laufen und da gab es noch keine Distris für jedermann - also absoluter Linux - Neuling war das damals echt hart aber dank der damaligen Mailingliste und KLS kann ich mich jetzt seit 14 Jahren am VDR erfreuen.
Korrekt - ich bin kein Programmierer - aber dennoch inzwischen auf Linux realtiv fit - dennoch bin ich nicht in der Lage solche Probleme zu beheben - oft findet man im Protal oder bei Google "Fetzen" mit Lösungsansätzen - nier nicht - daher bitte ich die Frage zu verstehen.
Warum 2.1.6 - weil die Version auf dem RPI bisher am besten läuft !
Währe toll wenn du das Diff hier anhängst.
CU
GTR
Da vergisst man mal die Smileys... So war das nicht gemeint.
Hier ist der Patch:
https://github.com/VDR4Arch/vd…utput-vdr2.1.2compat.diff
Als kleiner Nebeneffekt ist das Plugin jetzt auch für Arch Linux verfügbar. Vielleicht interessant für dich: Auch für ARMv6
Hallo
vielen Dank - läuft durch ...
So tragisch hab ich´s nicht genommen
CU
GTR
Hallo
das Plugin läuft - soweit ist das klar...
Was mich irritiert: - Laut Anleitung soll der Kommandozeilen Parameter "--logo"
während des Suspend ein VDR logo kommen.
Das funktioniert aber nicht...
Ist das was spezielles beim RPI oder ist da ein Fehler im Plugin ?
CU
GTR
Hallo
wie ich es in einem anderen Beitrag hier geschireben habe (sorry für den Doppel-Post) führt das Plugin (mit dem Patch) bei VDR 2.1.6 zu einem Speicherzugriffsfehler sobald der VDR in den Suspend geht
Hat irgendwer eine Idee was ich hier machen kann ?
(VDR+Streamdev+RPIHDDEVICE+RPI)
Auf dem RPI hat´s aber schon mal funktioniert (2.1.5er VDR+#ltere Version des RPIHDPlugin
CU
GTR
Alles anzeigenHallo
wie ich es in einem anderen Beitrag hier geschireben habe (sorry für den Doppel-Post) führt das Plugin (mit dem Patch) bei VDR 2.1.6 zu einem Speicherzugriffsfehler sobald der VDR in den Suspend geht
Hat irgendwer eine Idee was ich hier machen kann ?
(VDR+Streamdev+RPIHDDEVICE+RPI)
Auf dem RPI hat´s aber schon mal funktioniert (2.1.5er VDR+#ltere Version des RPIHDPlugin
CU
GTR
Was heisst denn "schon mal funktioniert" genau ? Konnte man da tatsaechlich das vdr-logo standbild sehen ?
Habe jetzt keine aelteren versionen runtergeladen/compiliert zum vergleich, aber bei der 2.0.0 suspend sind bloss zwei .mpg files dabei (black und vdr logo), die der omxplayer beide nur als schwarz widergibt, und der StillPicture code im omxplayer des vdr-plugin-rpihddevice mag auch bloss PES Bilder abspielen, und die beiden Dateien sind nicht PES Bilder. Ist zwar nicht weiter schwer, das so zu patchen, das es nicht mehr abschmiert, aber so richtig Standbild abspielen braucht wohl PES .mpg files oder so.
Hi
nein - ein Standbild ging bei mir noch nie - aber unter 2.1.5 wurde das Plugin erfolgreich übersetzt und funktionierte auch problemlos.
Unter 2.1.6 compiliert es auch durch - aber sobald das Plgin Aktiv wird (Suspend)stürzt VDR komplett ab.
CU
GTR
[...] und der StillPicture code im omxplayer des vdr-plugin-rpihddevice mag auch bloss PES Bilder abspielen, und die beiden Dateien sind nicht PES Bilder. Ist zwar nicht weiter schwer, das so zu patchen, das es nicht mehr abschmiert, aber so richtig Standbild abspielen braucht wohl PES .mpg files oder so.
Suspendoutput funktioniert bei mir auf der Himbeere wunderbar, um das Plugin zu kompillieren, habe ich Zeile 315 in suspendoutput.c auskommentiert:
if ( !cRecordControls::Active() &&
// !cCutter::Active() &&
!Interface->HasSVDRPConnection()) {
Und cOmxDevice::StillPicture() benötigt PES- oder TS-Pakete, weil das im API so definiert ist:
virtual void StillPicture(const uchar *Data, int Length);
///< Displays the given I-frame as a still picture.
///< Data points either to a series of TS (first byte is 0x47) or PES (first byte
///< is 0x00) data of the given Length. The default implementation
///< converts TS to PES and calls itself again, allowing a derived class
///< to display PES if it can't handle TS directly.
Das beigelegte VDR-Logo lässt sich aber mit ffmpeg entsprechend konvertieren:
$ ffmpeg -i vdrlogo_720x576.mpg -f mpegts vdrlogo_720x576.pes
$ mv vdrlogo_720x576.pes vdrlogo_720x576.mpg
Damit erscheint auch das VDR-Logo, wenn der VDR in den Suspend geht.
Gruss
Thomas
Moin!
Hier der korrekte Patch für suspendoutput und vdr 2.1.6
--- a/suspendoutput.c
+++ b/suspendoutput.c
@@ -320,7 +320,11 @@
if(cDummyPlayerControl::IsOpen()) {
if ( !cRecordControls::Active() &&
+#if APIVERSNUM > 20101
+ !RecordingsHandler.Active() &&
+#else
!cCutter::Active() &&
+#endif
!Interface->HasSVDRPConnection()) {
#define ACTIVITYTIMEOUT 600 // 10 min
Alles anzeigen
Lars.
Und cOmxDevice::StillPicture() benötigt PES- oder TS-Pakete, weil das im API so definiert ist:
Ja, ok. aber das gibt IMHO dem cOmxDevice::StillPicture() nicht das Recht den VDR mit segmentation fault zu crashen wenn ihm jemand non-PES daten uebergibt (so wie das suspendoutput plugin). Hier mal wie ich das gefixt habe.
*** omxdevice.c.orig 2014-12-15 12:31:30.888563046 +0100
--- omxdevice.c.fixed 2014-12-17 19:57:13.483865468 +0100
***************
*** 207,240 ****
ParseVideoCodec(Data, Length) == cVideoCodec::eMPEG2 ? 4 : 13;
while (repeat--)
- {
const uchar *data = Data;
int length = Length;
- printf("repeat: %d, length: %d\n", repeat, length);
- fflush(stdout);
// play every single PES packet, rise EOS flag on last
! while (length)
{
! int pktLen = PesHasLength(data) ? PesLength(data) : length;
! printf(" length: %d, pktLen: %d\n", length, pktLen);
! fflush(stdout);
- // skip non-video packets as they may occur in PES recordings
if ((data[3] & 0xf0) == 0xe0) {
! printf(" playing\n");
! fflush(stdout);
! PlayVideo(data, pktLen, !repeat && (pktLen == length));
} else {
! printf(" not playing\n");
! fflush(stdout);
}
-
- data += pktLen;
- length -= pktLen;
}
}
-
m_mutex->Unlock();
}
}
--- 207,242 ----
ParseVideoCodec(Data, Length) == cVideoCodec::eMPEG2 ? 4 : 13;
while (repeat--)
const uchar *data = Data;
int length = Length;
// play every single PES packet, rise EOS flag on last
! while (length > 4)
{
! int pktLen;
! int eos;
if ((data[3] & 0xf0) == 0xe0) {
! pktLen = PesHasLength(data) ? PesLength(data) : length;
! if(pktLen < 0 || pktLen > length)
! pktLen = length;
! eos = !repeat && (pktLen == length);
! PlayVideo(data, pktLen, eos);
! data += pktLen;
! length -= pktLen;
} else {
! // skipping
! int skip = 0;
! while( length >= 4 &&
! ( data[0] != 0x00 || data[1] != 0x00 ||
! data[2] != 0x01 || ((data[3] & 0xf0) != 0xe0))) {
! length--;
! data++;
! skip++;
! }
}
}
}
m_mutex->Unlock();
}
}
Alles anzeigen
Das beigelegte VDR-Logo lässt sich aber mit ffmpeg entsprechend konvertieren:
Supi, vielen Dank. Hatte schon versucht das selbst zu machen, war bisher aber erst erfolglos mit mencoder am probieren Ich schick mal eine Mail an Petri das er das mal im module fixen kann.
Quoted from "reufer"
Das beigelegte VDR-Logo lässt sich aber mit ffmpeg entsprechend konvertieren:
Supi, vielen Dank. Hatte schon versucht das selbst zu machen, war bisher aber erst erfolglos mit mencoder am probieren Ich schick mal eine Mail an Petri das er das mal im module fixen kann.
Hat funktioniert mit dem ffmpeg. Allerdings war das VDRlogo ziemlich ploede. Bloss vdrlogo ohne irgendein Hinweis. Ich hatte da das gleiche Logo erwartet wie beim suspend im streamdev-server - das hat den netten hinweis das vdr suspended ist. Habe also das genommen. Das war natuerlich auch kein richtiges PES. Musste ich also auch erst konvertieren bevor ich es im suspendoutput compiliet habe. Denke mal dass streamdev-server auch absemmelt unter rpihddevice solange man das dort nicht auch fixed.
Ich habe StillImage() im rpihddevice-Plugin nun dahingehend geändert, dass auch normales MPEG ohne PES-Header angezeigt wird. Damit zeigt nun suspendoutput ohne zu patchen das VDR-Logo an und auch der Hinweis in streamdev-server sollte funktionieren - letzteres habe ich allerdings nicht getestet.
Fix ist in Git eingecheckt .
Gruss
Thomas
Hallo Patrick
Bekomme jetzt leider einen Build Fehler
Danke für den Hinweis - kleiner Fehler beim Auseinanderfriemeln der einzelnen Hunks. Ist nun gefixt .
Gruss
Thomas
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!