Hi (sorry lang ,aber kompliziert)
seit neuestem stosse ich auf das Problem, das nach einem vdr restart (z.B. über init oder watchdog restart), das mplayer plugin nicht mehr will.
Das Ganze äussert sich im logfile wie folgt:
Jan 13 18:37:08 moviestar vdr: [15278] ERROR (dvbdevice.c,965): Bad file descriptor
Jan 13 18:37:08 moviestar vdr: [15278] ERROR (dvbdevice.c,966): Bad file descriptor
...
Jan 13 18:37:08 moviestar vdr: [15278] ERROR (dvbdevice.c,976): Bad file descriptor
Danach kann ich kein plugin mehr starten, bekomme immer "Kanal blockiert (zeichnet auf) als Fehlermeldung.
Nach VDR Neustart kann ich die Plugins wieder starten, aber sobald eben das mplayer-plugin ins Spiel kommt, fängt das Ganze von vorne an.
Interessanter Weise ist nach einem Reboot (meistens) alles ok. Ein manuelles rmmod aller DVB Treiber (FF + budget PCI) inkl. frontends, v4l usw. mit anschliessendem Neuladen der dvb Treiber hilft (meistens) nicht.
Um das Ganze nochmal spannender zu machen: es ist nicht genz deterministisch Manchmal hilft ein VDR restart (meistens nicht, ca. 1%), manchmal ein Treiber reload (10%) und zu 99% hilft ein reboot.
mplayer.sh lässt sich immer starten und funtioniert auch.
Ich habe das Verhalten mit verschiedenen Kombinationen ausprobiert:
- gentoo-kernel 2.6.18-r5 und -r6
- vdr-1.4.4 und 1.4.5 mal als gentoo emerge mal mit USE="vanilla"
- vdr-mplayer-0.9.15
- mal die Kernel Treiber, mal die v4l-hg Treiber
- mplayer im SLAVE & TRADITIONAL mode
- alle plugins weg (bis auf mplayer)
usw. usw.
Mein Portage tree ist von ca. Anfang Januar, also alles ziemlich neu mit UDEV-103 usw.
Hat jemand eine Idee oder das schon mal gesehen?
Wenn ich mir die dvbdevice.c source anschaue, dann sieht es eben so aus, als ob der Filedescriptor eben nicht auf ein offenes DVB device zeigt, deshalb schlägt ioctl fehl.
bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
{
if (PlayMode != pmExtern_THIS_SHOULD_BE_AVOIDED && fd_video < 0 && fd_audio < 0) {
// reopen the devices
fd_video = DvbOpen(DEV_DVB_VIDEO, CardIndex(), O_RDWR | O_NONBLOCK);
fd_audio = DvbOpen(DEV_DVB_AUDIO, CardIndex(), O_RDWR | O_NONBLOCK);
SetVideoFormat(Setup.VideoFormat);
}
switch (PlayMode) {
case pmNone:
// special handling to return from PCM replay:
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
CHECK(ioctl(fd_video, VIDEO_PLAY));
CHECK(ioctl(fd_video, VIDEO_STOP, true));
CHECK(ioctl(fd_audio, AUDIO_STOP, true));
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_DEMUX));
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_DEMUX));
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, false));
break;
Display More
Gedubugged habe ich allerdings noch nicht, wollte erst mal sehen, ob jemand das Phaenomen auch kennt.
Gruss
Riggert