Der Slave-Mode ist im git auch schon raus, sprich in Release 0.10 wird es mit dem mplayer Plugin gar nicht mehr funktionieren.
HowTo: mplayer-Plugin mit mpv (mplayer-fork) benutzen
-
-
Lang ist es her ... die hier beschriebene Konfiguration leistet mir seit Jahren treue Dienste. Mittlerweile habe ich zwar auch die Vorzüge eines Kodi schätzen gelernt, das auf einem Raspi rund um die Uhr bereit steht. Aber es kommt immer mal wieder vor, dass dort bestimmte Filme nicht oder nur ruckelnd laufen. Obwohl ich mpv nie upgedatet habe, spielt er bis heute alles klaglos ab.
Das mpv-Plugin war für mich nie eine Alternative, da es keine Anpassung der Bildwiederholfrequenz kann.
Als ich jetzt meinen Test-VDR auf Ubuntu 18.04 aktualisiert habe, gab es einiges anzupassen. Der entfallene slave-Mode, von dem maniac sprach, ist kein Problem. Der wurde sowieso nie genutzt. Gravierender war für mich der Fortfall der lirc-Unterstützung. Da ich feststellen musste, dass mein serieller Atric mit lirc erheblich flotter läuft als über den Kernel mit /dev/input..., nutze ich weiter lirc und suchte nach einer Lösung. Es geht mir irxevent. Das ganze ist aber etwas tricky, was die unterschiedlichen Namenskonventionen angeht. Die Doku dazu ist leider bescheiden, so dass ich lange experimentieren musste.
Ebenfalls entfallen ist im aktuellen mpv die dvdnav-Menüunterstützung. Die Entwickler meinten, es habe sowieso nie richtig funktioniert und es kurzerhand rausgeschmissen. Hätte man m.E. nicht machen müssen. Man kann dvdnav weiterhin nutzen ( es ist in der Lage, den größten Titel selbstständig zu finden und abzuspielen), aber eben halt ohne Menüs.
Beispiel meiner lircrc:
Code
Alles anzeigen#seek -10 begin prog = irxevent button = KEY_LEFT config = Key Left mpv repeat = 1 end #add audio-delay 0.100 begin prog = irxevent button = KEY_9 config = Key plus mpv end #add audio-delay -0.100 begin prog = irxevent button = KEY_7 config = Key minus mpv end #seek -60 begin prog = irxevent button = KEY_GREEN config = Key Down mpv repeat = 1 end #seek +10 begin prog = irxevent button = KEY_RIGHT config = Key Right mpv repeat = 1 end #seek +60 begin prog = irxevent button = KEY_YELLOW config = Key Up mpv repeat = 1 end #show_proggress (Fortschritt) begin prog = irxevent button = KEY_OK config = Key f mpv end #cycle pause begin prog = irxevent button = KEY_PAUSE config = Key p mpv end #osd begin prog = irxevent button = KEY_MENU config = Key o mpv end #cycle audio begin prog = irxevent button = KEY_MODE config = Key a mpv end #add chapter -1 begin prog = irxevent button = KEY_RED config = Key Page_Down mpv end #add chapter 1 begin prog = irxevent button = KEY_BLUE config = Key Page_Up mpv end #quit begin prog = irxevent button = KEY_ESC config = Key q mpv end #add chapter -1 #auch auf Rot-Taste begin prog = irxevent button = KEY_DOWN config = Key Page_Down mpv end #add chapter 1 #auch auf Blau-Taste begin prog = irxevent button = KEY_UP config = Key Page_Up mpv end #cycle sub begin prog = irxevent button = KEY_SUBTITLE config = Key j mpv end #show_text "${filename}" begin prog = irxevent button = KEY_INFO config = Key I mpv end
Dazu habe ich mir eine passende ~/.config/mpv/vdr-input.conf angelegt:
Code
Alles anzeigenRIGHT osd-msg-bar seek +10 LEFT osd-msg-bar seek -10 DOWN osd-msg-bar seek -60 UP osd-msg-bar seek +60 + add audio-delay 0.100 - add audio-delay -0.100 o no-osd cycle-values osd-level 3 1 # cycle through OSD mode i show_text "${filename}" # display filename in osd f show-progress p cycle pause a cycle audio # switch audio streams q quit j cycle sub # cycle through subtitles PGUP osd-msg-bar add chapter 1 # skip to next chapter PGDWN osd-msg-bar add chapter -1 # skip to previous chapter
Man sieht z.B., dass irxevent auf die Tastenbezeichnung Page_Up hört, für mpv muss man hingegen PGUP definieren. Hütet Euch davor, mpv-Tasten sowohl mit Groß- als auch Kleinbuchstaben zu verwenden. Ich hatte erst p für Pause und P für Progress verwandt. irxevent unterscheidet da aber anscheinend nicht, so dass bei mpv immer beides ankommt.
In der mplayer.sh muss man dann irxevent starten. Bei den mpv-Optionen hat sich auch einiges bei der Syntax geändert. Aus fps wurde z.B. container_fps. Damit mpv nur auf die speziell für irxevent erstellte input-Konfigurationsdatei hört, gibt man folgende Parameter vor:
Hier mal meine komplette mplayer.sh für Nvidia-Grafik mit VDPAU.
Dank der Option --save-position-on-quit funktioniert jetzt auch die Wiedergabe an der letzten Stelle, wo man zuvor den Film beendet hat.
Bash
Alles anzeigen#!/bin/bash export DISPLAY=:0 svdrpsend REMO off irxevent -d MPLAYER="/usr/bin/mpv --input-conf=~/.config/mpv/vdr-input.conf --no-input-default-bindings --osd-level=1 --osd-duration=2000 --save-position-on-quit" AUDIOSET="/usr/bin/iecset audio 1" #AUDIOSET="" FILE="$1" VO="--vo=vdpau --cursor-autohide=10" VC="--hwdec=vdpau --hwdec-codecs=all" #HDMI: AO="--audio-spdif=ac3,dts,dts-hd,eac3,truehd" CONNECTION="HDMI-0" REFRESH_RATE="" # What is your DVD-ROM device ? DVD="/dev/dvd" # use dvdnav for playing DVDs # if set to false, mpv will use dvd:// DVDNAV="true" # Where to find DVD/VCD dummy files? (just a fake and empty text file for the plugin) DVDFiles="/var/lib/vdr-plugin-mplayer/DVD-VCD" declare ORIG_FPS function debugvar () { echolog "*** DEBUG: Variable $1 has value \"$2\"" return; } function debugmsg () { echolog "*** DEBUG: $1 \"$2\"" return; } function echolog () { # prints the string on stdout and into /var/log/syslog using logger! logger -s -- "$1" return; } function getfps () { # variable definitions local MPV_IDENTIFY_RETURN if test "$FILE" == "$DVDFiles/DVD"; then ORIG_FPS=`/usr/local/bin/mpv_identify.sh -dvd-device $DVD dvd:// 2>/dev/null | grep -i -e "container_fps" | cut -d"=" -f2 | cut -c 1-6` else ORIG_FPS=`/usr/local/bin/mpv_identify.sh "$FILE" 2>/dev/null | grep -i -e "container_fps" | cut -d"=" -f2 | cut -c 1-6` fi MPV_IDENTIFY_RETURN=$? if test $MPV_IDENTIFY_RETURN -ne 0; then echolog "*** FATAL: something went wrong analyzing the video; mpv_identify.sh reported an error!" echolog "*** FATAL: check your mpv installation. Exiting..." exit fi debugmsg "ORIG_FPS: " "$ORIG_FPS" debugmsg "MPV_IDENTIFY_RETURN: " "$MPV_IDENTIFY_RETURN" return; } function setrefreshrate () { local -i TEMP_FPS TEMP_FPS=`echo $ORIG_FPS|sed 's/\.//'` debugmsg "TEMP_FPS: " "$TEMP_FPS" if [ $TEMP_FPS -ge "23000" -a $TEMP_FPS -le "24499" ]; then echolog "*** INFO: set refresh rate to 24" REFRESH_RATE="24" debugmsg "REFRESH_RATE: " "$REFRESH_RATE" elif [ \( $TEMP_FPS -ge "14000" -a $TEMP_FPS -le "16000" \) -o \( $TEMP_FPS -ge "29000" -a $TEMP_FPS -le "30499" \) ]; then echolog "*** INFO: set refresh rate to 60" REFRESH_RATE="60" debugmsg "REFRESH_RATE: " "$REFRESH_RATE" elif [ "$TEMP_FPS" == "25" ] || [ "$TEMP_FPS" == "25000" ] || [ "$TEMP_FPS" == "12500" ]; then echolog "*** INFO: set refresh rate to 50" REFRESH_RATE="50" debugmsg "REFRESH_RATE: " "$REFRESH_RATE" else debugmsg "unknown" $ORIG_FPS echolog "*** INFO: Potentially unreliable framerate, will not change refresh rate" fi if test "$REFRESH_RATE" != "" -a "$REFRESH_RATE" != "50"; then #stop vdr-frontend export DISPLAY=:0 debugmsg "CONNECTION: " "$CONNECTION" xrandr --output $CONNECTION --mode 1920x1080 --rate $REFRESH_RATE fi debugmsg "setrefreshrate fertig" return; } # main getfps # get the file extension of the video SUFFIX=$(echo -e "${FILE:$[${#FILE}-4]:4}" | tr [A-Z] [a-z]) if test \( "$FILE" == "$DVDFiles/DVD" -o "$FILE" == "$DVDFiles/VCD" \) -a -n "$DVDFiles" -a -n "$DVD"; then if test "$FILE" == "$DVDFiles/DVD"; then if $DVDNAV; then CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --cache=no --ontop --v -dvd-device $DVD dvdnav://" else CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --ontop --v -dvd-device $DVD dvd://" fi fi if test "$FILE" == "$DVDFiles/VCD"; then CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --ontop --v -cdrom-device $DVD vcd://" fi unset FILE elif test "${SUFFIX}" == ".cue"; then CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --ontop --v cue://\"$FILE\":2" unset FILE elif test \( "$SUFFIX" == ".img" -o "$SUFFIX" == ".iso" \); then if $DVDNAV; then CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --cache=no --ontop --v -dvd-device '$FILE' dvdnav://" else CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --ontop --v dvd://" fi unset FILE elif (( [[ "$FILE" == *VIDEO_TS* ]] || [[ "$FILE" == *video_ts* ]] || [[ "$FILE" == *VTS_* ]] || [[ "$FILE" == *vts_* ]] ) && $DVDNAV ); then d=$(dirname "$FILE") logger -s -- "$d" CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --alang=de,en --cache=no --ontop --v -dvd-device '$d' dvdnav://" unset d unset FILE else CMDLINE="$MPLAYER $VO $AO $VC --fs --monitoraspect=16:9 --cache 32768 --ontop --v --index=default" fi setrefreshrate $AUDIOSET debugvar CMDLINE "$CMDLINE" eval "$CMDLINE \"$FILE\"" #eval "$CMDLINE \"$FILE\""&> /var/log/mpv.log killall irxevent svdrpsend REMO on #restore settings for viewing vdr if we previously set something else than 50Hz if test "$REFRESH_RATE" != "" -a "$REFRESH_RATE" != "50"; then export DISPLAY=:0 echolog "*** INFO: set refresh rate back to 50Hz" debugmsg "CONNECTION: " "$CONNECTION" xrandr --output $CONNECTION --mode 1920x1080 --rate 50 fi
Ich weiss, in Zeiten von Kodi ist das hier etwas Retro. Aber vielleicht ist es für den einen oder anderen doch interessant. Zumindest ich selbst weiis jetzt, wo ich es bei der Umstellung des Produktiv-VDR nachschlagen kann
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!