Watch digital TV with VDR and a streaming client

From Linuxintro

Introduction

This article describes some aspects to setup an enviroment with a VDR server and a xine stream client.

Here typically should be the obligatory screenshot of my desktop showing the running stream - I add that later on :)

To proceed, find out your distribution and proceed accordingly:

SUSE Linux 12.1

The setup as basic for this article

We need some Hardware - I my case:

  • a laptop Dell Latitude 2100
  • an external digital TeraTec Cinergy S2 USB with remote control

And of course some software repositories - in my case:

  • Base OS is openSUSE 12.1

We setup the following componets

Setup Procedure

Installing VDR and XINE

Installation channels

  • Set up installation channels
zypper ar http://packman.inode.at/suse/openSUSE_12.1/Essentials packman-essentials
zypper ar http://packman.inode.at/suse/openSUSE_12.1/Multimedia packman-multimedia
  • Now the command
zypper lr -u

must contain

| packman-essentials                 | packman-essentials                 | Yes     | No      | http://packman.inode.at/suse/openSUSE_12.1/Essentials                      
| packman-multimedia                 | packman-multimedia                 | Yes     | No      | http://packman.inode.at/suse/openSUSE_12.1/Multimedia

Installation

Now install the software:

yast -i xine-ui vdr-plugin-xine

Configuration

Now configure the software. In /etc/sysconfig/vdr, replace

VDR_PLUGINS=""

by

VDR_PLUGINS="remote xine"
VDR_PLUGIN_ARGS_remote="-i /dev/input/ir"
VDR_PLUGIN_ARGS_xine=""

and restart the video disk recorder:

/etc/init.d/vdr restart

Test

Now connect the USB device to your computer and to the satelite cable. open a console and enter

xine vdr://

If you get:

The stream 'vdr://' uses an unsupported codec:
(null)Audio Codec: MPEG layer 2/3 (0x0)
Start playback anyway ?

then deinstall the libxine2 libaries and keep the libxine1 ones. Besides, install xine-ui depending on libxine1:

rpm -e libxine2
zypper install --repo download.opensuse.org-oss xine-ui

And try again:

xine vdr://

Use it

To start watching TV open a console and enter

xine vdr://

To switch channels, select Menu 1

SUSE Linux 11.4

The setup as basic for this article

We need some Hardware - I my case:

  • a laptop DELL D620
  • an external USB S2 digtital HD device TeVii S660
  • a TechnoTrend remote control (because unfortunately the remote control support of TeVii S660 is buggy in my setup)

And of course some software repositories - in my case:

  • Base OS is openSUSE 11.4
  • Additional package repositories: TBD

We setup the following componets

Setup Procedure

Installing VDR and XINE

Installation channels

  • Set up installation channels
zypper ar http://packman.inode.at/suse/openSUSE_11.4/Essentials packman-essentials
zypper ar http://packman.inode.at/suse/openSUSE_11.4/Multimedia packman-multimedia
  • Now the command
zypper lr -u

must contain

  | packman-essentials   | packman-essentials         | Yes     | Yes     |   99     | rpm-md | http://packman.inode.at/suse/openSUSE_11.4/Essentials                       
  | packman-multimedia   | packman-multimedia         | Yes     | Yes     |   99     | rpm-md | http://packman.inode.at/suse/openSUSE_11.4/Multimedia                       
  • libxine2 removed; xine-ui from other vendor. Install VDR and xine packages - sou might need also some dependent packages so use zypper to resolve dependencies
    • Remark: 2012-07-18: Updated List
    • removed package libxine2
    • xine-ui from openSUSE not packman.links2linux.de
    • downgraded vdr-plugin-xine to version 0.9.3
    • To query the packages in this format:
printf " %-22s | %-22s | %-30s | %s\

" "Name" "Version" "Vendor" "Project URL"

printf " -----------------------+------------------------+--------------------------------+-------------------------------\

"

rpm -qa --queryformat ' %-22{name} | %-22{version} | %-30{vendor} | %{url} \

' | egrep '(vdr|xine)'

Name                   | Version                | Vendor                         | Project URL
-----------------------+------------------------+--------------------------------+-------------------------------
libxine1-pulse         | 1.1.20.1               | http://packman.links2linux.de  | http://www.xine-project.org/home 
xine-ui                | 0.99.5                 | openSUSE                       | http://xine.sourceforge.net 
libxine1-codecs        | 1.1.20.1               | http://packman.links2linux.de  | http://www.xine-project.org/home 
vdr-plugin-streamdev   | 0.0_CVS20080716080048  | openSUSE                       | http://streamdev.vdr-developer.org/ 
libdvdread3            | 0.9.7                  | http://packman.links2linux.de  | http://www.dtek.chalmers.se/groups/dvd/index.shtml 
libxine1               | 1.1.20.1               | http://packman.links2linux.de  | http://www.xine-project.org/home 
vdr                    | 1.6.0                  | openSUSE                       | http://www.tvdr.de/ 
xine-skins             | 1.0.3                  | Packman                        | http://xinehq.de/index.php/skins 
vdr-plugin-epgsearch   | 0.9.24                 | obs://build.opensuse.org/vdr   | http://winni.vdr-developer.org/epgsearch/downloads/vdr-epgsearch-0.9.24.tgz 
kdebase4-runtime-xine  | 4.6.0                  | openSUSE                       | http://www.kde.org/ 
libdvdread4            | 4.1.3                  | openSUSE                       | http://www.mplayerhq.hu/ 
xinetd                 | 2.3.14                 | openSUSE                       | http://www.xinetd.org/ 
phonon-backend-xine    | 4.4.4                  | openSUSE                       | http://phonon.kde.org/ 
vdr-plugin-cutalot     | 0.0.3                  | openSUSE                       | http://www.vdr-wiki.de/wiki/index.php/Cutalot-plugin 
libxine1-gnome-vfs     | 1.1.20.1               | http://packman.links2linux.de  | http://www.xine-project.org/home 
vdr-plugin-xine        | 0.9.3                  | openSUSE                       | http://home.vr-web.de/~rnissl/
  • Install optional VDR packages
vdr-plugin-cutalot 0.0.3 openSUSE http://www.vdr-wiki.de/wiki/index.php/Cutalot-plugin
vdr-plugin-epgsearch 0.9.24 obs://build.opensuse.org/vdr http://winni.vdr-developer.org/epgsearch/downloads/vdr-epgsearch-0.9.24.tgz
vdr-plugin-streamdev 0.0_CVS20080716080048 openSUSE http://streamdev.vdr-developer.org/

Remark: Using the xine plugin (from repository PackMan) you could use xine for a complete VDR client (with full control over all menus).

  • Adapt plugin configuration /etc/sysconfig/vdr (the plugin "remote" is optional and can be dropped, if you use lirc)
#
# With plugin remote plugin:
#
VDR_PLUGINS="remote xine"
VDR_PLUGIN_ARGS_remote="-i /dev/input/ir"
VDR_PLUGIN_ARGS_xine=""
#
# Without plugin remote plugin:
#
VDR_PLUGINS="remote xine"
VDR_PLUGIN_ARGS_remote="-i /dev/input/ir"
VDR_PLUGIN_ARGS_xine=""
  • Restart VDR
 /etc/init.d/vdr restart
  • start watching VDR: - You should get a OSD message from VDR that tells you to train VDR to understand your remote control or keyboard sequences
xine vdr://

In this setup we proceed to integrate the Technotrend Remote control to be able to send signals to LIRCD and than configure VDR to understand LIRCD commands...

TechnoTrend USB Remote-Control

Low Level Test with mode2

To test, if the IR keys are recognized on a very low level test using command mode2. This works also without lircd.

furka:~ # mode2 -d /dev/lirc0
space 3508766
pulse 806
space 744
pulse 806

lircd configuration

In openSUSE 11.4 lircd is configured via

/etc/sysconfig/lirc
## Description:    lirc (infrared remote control) configuration
## Type:           string
## Default:        "660"
## ServiceRestart: lirc
#
# permissions for /dev/lircd
#
LIRCD_DEV_PERMISSIONS="660"

## Type:        string
## Default:     "root:video"
#
# owner and group for /dev/lircd
#
LIRCD_DEV_OWNER="root:video"

## Type:        string
## Default:     ""
#
# use given driver
#
LIRCD_DRIVER=""

## Type:        string
## Default:     ""
#
# read from given device
#
LIRCD_DEVICE="/dev/lirc0"

## Type:        string(lirc_bt829,lirc_gpio,lirc_i2c,lirc_it87,lirc_parallel,lirc_sir,ir-kbd-i2c,ir-kbd-gpio)
## Default:     ""
#
# load given lirc driver module
#
LIRC_MODULE="lirc_ttusbir"

## Type:        string
## Default:     ""
#
# listen for network connections on specified port.
# WARNING: don't use this on a machine with an internet
# connection as lircd is running as root!
# 
LIRCD_LISTENPORT=

## Type:        string
## Default:     ""
#
# connect lircd to specified host
#
LIRCD_CONNECT=
/etc/lirc/lircd.conf

/etc/lirc/lircd.conf (enthaelt die definition der Fernbedienungstasten)

#
# this config file was automatically generated
# using lirc-0.8.3(default) on Wed Jul  2 21:51:15 2008
#
# contributed by 
#
# brand:                                   Technotrend
# model no. of remote control: 
# devices being controlled by this remote: TV-Card
#
 
begin remote
  
 name       Technotrend
 bits                 6
 flags RC5|CONST_LENGTH
 eps                 30
 aeps                100 
  
 one                 889   889
 zero                889   889
 plead               889
 pre_data_bits         7
 pre_data           0x55
 gap              113792
 toggle_bit            2
 frequency         36000
 duty_cycle           50
 
     begin codes
         Power                    0x01
         Mute                     0x18
         1                        0x03
         2                        0x04
         3                        0x05
         4                        0x06
         5                        0x07
         6                        0x08
         7                        0x09
         8                        0x0A
         9                        0x0B
         0                        0x0C
         Audio                    0x1A
         Repeat                   0x02
         vol-                     0x26
         vol+                     0x25
         Text                     0x19
         ch-                      0x24
         ch+                      0x23
         Exit                     0x13
         OK                       0x0F
         Up                       0x0D
         Down                     0x11
         Left                     0x0E
         Right                    0x10
         Red                      0x14
         Green                    0x15
         Yellow                   0x16
         Blue                     0x17
         Record                   0x3A
         Play                     0x3B
         Stop                     0x3C
         Info                     0x12
         Rew                      0x3D
         Pause                    0x3E
         Fwd                      0x3F
         EPG                      0x22
     end codes

end remote

lircd start and start at boot time

furka:~ # rclirc start
Starting lircd (/dev/lirc0)                                          done
furka:~ # chkconfig lirc on

lircd-client Connection Test

To test, if a client of lircd could recognize key presses use command irw. This command is part of package lirc.

furka:~ # irw
000000000000154c 00 0 Technotrend
000000000000154c 01 0 Technotrend
000000000000154c 00 0 Technotrend
000000000000154c 01 0 Technotrend

Trouble-Shooting

  • If you do NOT have a valid config file for your remote you might create one interactive using irrecord
irrecord -d /dev/lirc0 file

lirc to talk with vdr

  • VDR automatically tries to get signals/commands from LIRC, but you need to help VDR to understand whoat to do, if a special LIRC command is received. You could either "train" VDR and press keys in the training mode, or provide a ready-to-go definition file. File /etc/vdr/remote.conf needs to contain those additional entries for accepting lircd keys:
LIRC.Up         Up
LIRC.Down       Down
LIRC.Menu       Repeat
LIRC.Ok         OK
LIRC.Back       Exit
LIRC.Left       Left
LIRC.Right      Right
LIRC.Red        Red
LIRC.Green      Green
LIRC.Yellow     Yellow
LIRC.Blue       Blue
LIRC.0          0
LIRC.1          1
LIRC.2          2
LIRC.3          3
LIRC.4          4
LIRC.5          5
LIRC.6          6
LIRC.7          7
LIRC.8          8
LIRC.9          9
LIRC.Info       Info
LIRC.Play       Play
LIRC.Pause      Pause
LIRC.Stop       Stop
LIRC.Record     Record
LIRC.FastFwd    Fwd
LIRC.FastRew    Rew
LIRC.Power      Power
LIRC.Channel+   ch+
LIRC.Channel-   ch-
LIRC.Volume+    vol+
LIRC.Volume-    vol-
LIRC.Mute       Mute
  • Restart VDR again to activate the new configuration

UNSORTED STUFF

Auf dem Laptop Latitude D820 habe ich einen vdr installiert mit einer externen USB-Box TVii 660

Installation of the DVB-S2 USB-Box

<TBD>

Plugins, plugins, plugins ...

Why are there so much differetn plugins for VDR to provide video streams? They all have different feature sets and use cases. While in the use case to watch TV on a Laptop where the TV-Card/Box is connected is matching to the plugine xine, there are other usescases for network streaming.

TBD We need / explain the following VDR plugins:

  • xine
  • streamdev
  • libxineoutput

Video clients

Remote Streaming: vdr-plugin-streamdev

vlc - What is already running is that you can watch TV and also switch the programm. But you do not have full control over VDR using that method.

vlc http://127.0.0.1:3000/PES/1

URL in general:

http://<hostip>:<port>/[PES|xx]/<prognummer>

You need to setup the file /etc/vdr/streamdev.conf:

# streamdev.conf:
<TBD>

Passender /etc/sysconfig/vdr Auszug

 VDR_PLUGINS="streamdev"

vdr-plugin-xineliboutput

With xineliboutput

vlc tcp://localhost:37890

But how to switch the program using this connection?

Best practice local access with On Screen Display: vdr-plugin-xine

This is the recommended way if you want to watch TV on the computer where VDR is running.

Using the xine plugin (from repository PackMan) you could use xine for a complete VDR client (with full control over all menus).

  • install it:
yast -i vdr-plugin-xine
  • Matching line in /etc/sysconfig/vdr (the plugin "remote" is optional and can be dropped, if you use lirc)
 VDR_PLUGINS="remote xine"
 VDR_PLUGIN_ARGS_remote="-i /dev/input/ir"
 VDR_PLUGIN_ARGS_xine=""
  • Restart VDR
 /etc/init.d/vdr restart
  • start watching TV:
xine vdr://

Remote Control

TBD: translate de->en

TeVii S660 remote control is a bit painfull for me

Translation: <TBD>

  • Mit dem Update von c.a. Mitte März auf den Herstellerseiten (auf Simplon Download/Tevii) geht nun die Erkennung der Fernbedienung
  • Kleiner Patch in ./v4l/dw2102.c die Ausgaben von "query RC..." auskommentiert (also nicht aktiv), weil sonst der syslog voll läuft
  • VDR meldet (ohne Config s.u.) beim Starten, dass er kein lirc findet, allerdings scheint die Fernbedienung als Tastatur zur funktionieren:
    • Test mit fb bringt messages im syslog (kann ggf später entfallen)
    • xev zeigt tastaturreaktion, wenn man fb bedient
    • KDE lautstärke regler funktioniert bereits :)
    • Cursorbewegungen (auf/ab/rechts/links) funktinieren u.a. hier im wiki :)
    • war jetzt nach einigen Eingaben nicht stabil - prüfen!

In den VDR bindet man die Fernbedienung mit dem plugin remote ein. Passender Auszug aus der /etc/sysconfig/vdr

 VDR_PLUGINS="remote"
 VDR_PLUGIN_ARGS_remote="-i /dev/input/ir

Die Berechtigungen für das IR-device (/dev/input/ir) müssen so eingestellt werden, dass der VDR (Benutzer vdr) darauf Zugreifen darf.

 chown vdr:users /dev/input/ir

Die FB muss beim ersten Benutzen im VDR trainiert werden, wenn die Datei /etc/vdr/remote.conf nicht angepasst wird (Datei stelle ich bei Bedarf zur Verfügung :).

openSUSE 11.2 package list sorted by "vendor"

rpm -qa --queryformat "%{NAME} %{VENDOR}\ " | egrep '(vdr|xine)' | sort -k2

  • Packman
gxine Packman
gxine-browser-plugin Packman
xine-browser-plugin Packman
xine-skins Packman
libdvdread3 http://packman.links2linux.de
libdvdread4 http://packman.links2linux.de
libxine1 http://packman.links2linux.de
libxine1-codecs http://packman.links2linux.de
libxine1-gnome-vfs http://packman.links2linux.de
libxine1-pulse http://packman.links2linux.de
vdr-plugin-xine http://packman.links2linux.de
xine-ui http://packman.links2linux.de
  • obs://build.opensuse.org/vdr
vdr-plugin-xineliboutput obs://build.opensuse.org/vdr
  • openSUSE
phonon-backend-xine openSUSE
vdr openSUSE
vdr-plugin-cutalot openSUSE
vdr-plugin-epgsearch openSUSE
vdr-plugin-remote openSUSE
vdr-plugin-streamdev openSUSE
xinetd openSUSE

TroubleShooting

no input plugin available

Symptom
When calling
xine vdr://

you get the error message

- xine engine error -
There is no input plugin available to handle 'vdr'.
Maybe MRL syntax is wrong or file/stream source doesn't exist.
Solution
In /etc/sysconfig/vdr, have
VDR_PLUGINS="remote xine"
VDR_PLUGIN_ARGS_remote="-i /dev/input/ir"
VDR_PLUGIN_ARGS_xine=""

unsupported codec

Symptom
When calling
xine vdr://

you get the error message

The stream 'vdr://' uses an unsupported codec:
(null)Audio Codec: MPEG layer 2/3 (0x0)
Start playback anyway ?
Solution
Deinstall the libxine2 libaries and keep the libxine1 ones. Besides, install xine-ui depending on libxine1:
rpm -e libxine2
zypper install --repo download.opensuse.org-oss xine-ui

See also