MPV VDR-Streamdev-Client

This is a Lua-Skript which turns MPV [[]] into a full-featured, cross-plattform (Linux, Mac OS, Windows) VDR client.

It is comparable to the vdr-xinliboutput-plugin with vdr-sxfe as a client, Kodi with vdr-plugin-vnsiserver or a VDR with the streamdev-client-plugin.


  • VDR like channel switching
  • Channel info with current and next EPG event
  • Browse the EPG
  • Create timers from EPG
  • Disable/Enable/Delete timers
  • Watch Recordings
  • Benefits from MPVs great hardware support (hardware acceleration)
  • Very simple installation!


Channel info with current and next EPG event

Browsing the EPG for a channel

Show EPG for a event

Comparison with other VDR-Clients

MPV VDR-Streamdev-Client Xineliboutput VDR with Streamdev-Client-Plugin Kodi with vdr-plugin-vnsiserver
Concurrent Clients as many as DVB devices one as many as DVB devices as many as DVB devices
VDR-OSD through svdrposd-plugin(currently very slow) yes through svdrposd-plugin (text based OSD) text based
Cutting Recordings no yes if the video direcotry is shared no

This is my personal opinion/knowledge, I may be wrong. If you think I'm wrong please correct me :-)


  • On the VDR side it only needs the VDR-Streamdev-Plugin installed.
  • On the client bash and netcat (nc) must be installed. On Linux/Mac OS this is usually installed by default, on Windows this means cygwin or probably the Linux-subsystem should work. I have reports of it working with cygwin.



  1. If you haven't already you'll have to install VDR [[]] with vdr-plugin-streamdev [[]].
  2. Enable the streamdev server plugin, and add the clients IP to streamdevhosts.conf
  3. Add the clients IP to svdrphosts.conf


  1. Install mpv [[]], any version above 0.20.0 should work. Channel switching times are much faster with the current versions
  2. Download the vdr-streamdev-client.lua [[]], optionally move it to ~/.config/mpv/scripts (for Linux and Mac OS)
  3. Start mpv with:
    mpv  vdrstream://[vdr-host][:streamdev-port] [--script /path/to/vdr-streamdev-client.lua]

    The --script part is only needed if you haven't moved the script into MPVs script directory.


There are some options which are configurable through the command line or a configuration file. For a full list, have a look at the vdr-streamdev-client.lua script, right at the top blow the first large comment.
Here is a sample config file, to be placed in the file ~/.config/mpv/lua-settings/vdr-streamdev-client.conf

# default VDR host    
# default SVDRP port    
# default streamdev port

# time after which the '0' key returns to this channel
# for how long to show playback/channel info
# timeout after which channel entry is assumed to be finished

# directry for media files

# if you don't want to use streamdev-streaming for recordings
# you can provide the path to VDRs video directory here (mounted locally)


VDR Key Default Name for script-message in input.conf
0-9 0-9 vdrkey0-vdrkey9
RED F1 vdrkeyRED
BLUE F4 vdrkeyBLUE
UP Cursor-UP vdrkeyUP
DOWN Cursor-DOWN vdrkeyDOWN
LEFT Cursor-LEFT vdrkeyLEFT
BACK Backspace vdrkeyBACK
MENU m vdrkeyMENU

You can redefine the keys by creating an input.conf file in the directory ~/.config/mpv using the 'script-message' command. For example if you want to bind the 'r' key to the RED VDR-key, place a line 'r script-message vdrkeyRED' in the input.conf file.

Any keybinding in input.conf overrides the vdr-streamdev-client.conf defaults, so if you want to change the action on the key 'm' you can just put a new definition in your input.conf. See for the MPVs default configuration and examples.


After starting the client is stuck and nothing happens. What could be the problem?

There are different versions of nc (netcat). Some need different parameters to work with VDR-Streamdev-Client. Maybe it helps to install a different netcat version. For instance Debian/Ubunto offers netcat-traditional and netcat-openbsd.

Or <ou can try to add the paramter "-N" to nc. Open the vdr-streamdev-client.lua script in a texteditor, and look for the line

local function send_svdrp(command)
. A few lines below there is a line
..'\n" |nc '' '..config.svdrp_port},

, change it to
 ..'\n" |nc -N'' '..config.svdrp_port},
and try again.