mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
VDR developer version 2.3.1 is now available at ftp://ftp.tvdr.de/vdr/Developer/vdr-2.3.1.tar.bz2 A 'diff' against the previous version is available at ftp://ftp.tvdr.de/vdr/Developer/vdr-2.2.0-2.3.1.diff MD5 checksums: 391c2ed60e2f7d24563fe3ed5854bc4f vdr-2.3.1.tar.bz2 983fd4bad7d19cd98301d54173107129 vdr-2.2.0-2.3.1.diff WARNING: ======== This is a *developer* version. Even though *I* use it in my productive environment, I strongly recommend that you only use it under controlled conditions and for testing and debugging. *** PLEASE BE VERY CAREFUL WHEN USING THIS DEVELOPER VERSION, ESPECIALLY *** IF YOU ENABLE THE NEW SVDRP PEERING! KEEP BACKUPS OF ALL YOUR TIMERS *** AND OBSERVE VERY CLOSELY WHETHER EVERYTHING WORKS AS EXPECTED. THIS *** VERSION INTRODUCES SOME MAJOR CHANGES IN HANDLING GLOBAL LISTS AND *** LOCKING, SO ANYTHING CAN HAPPEN! YOU HAVE BEEN WARNED! The main focus of this developer version is on the new locking mechanism for global lists, and the ability to handle remote timers. Any plugins that access the global lists of timers, channels, schedules or recordings, will need to be adjusted (see below for details). Please do initial tests with plain vanilla VDR and just the output plugin you need. Known bugs/problems: - After deleting the last recording in a sub folder, the cursor may not be positioned correctly. - Instant recordings and pausing live video don't (yet) use the default SVDRP host for recording. From the HISTORY file: - The new function cOsd::MaxPixmapSize() can be called to determine the maximum size a cPixmap may have on the current OSD. The 'osddemo' example has been modified accordingly. Plugin authors may want to use this function in case they use pixmaps that are larger than the full OSD size. The default implementation sets this limit to 2048x2048 pixel. - The Setup/CAM menu now displays which device an individual CAM is currently assigned to (suggested by Frank Neumann). - Added detection of 24fps (thanks to Thomas Reufer). - Added a note about the VDR User Counter and VDR's facebook page to the README file. - The dvbhddevice plugin is no longer part of the VDR source archive. You can get the latest version of this plugin from the author's repository at https://bitbucket.org/powARman/dvbhddevice. - The dvbsddevice and rcu plugins are no longer part of the VDR source archive. You can get the latest versions of these plugins from ftp://ftp.tvdr.de/vdr/Plugins. - Added a section about Output Devices to the INSTALL file. - Fixed setting the source value of newly created channels, in case the NIT is received from a different, but very close satellite position (reported by Daniel Ribeiro). The code for handling different NITs has been removed from nit.c, because according to the DVB standard table id 0x40 carries only the NIT of the actual network. - Added some comment to cPixmap about the relation between OSD, ViewPort and DrawPort (suggested by Thomas Reufer). - Improved syncing on sections when parsing the NIT and SDT. - Fixed scaling subtitles (their areas could sometimes extend outside the actual OSD). - Reduced the priority of the "video directory scanner" thread (suggested by Thomas Reufer) and checking cIoThrottle::Engaged() when it is running. - The script that gets called for recordings is now also called right before a recording is edited, with the first parameter being "editing" (suggested by Dieter Ferdinand). - The new setup option "OSD/Default sort mode for recordings" can be used to define how recordings shall be sorted by default (either by time or by name, with "by time" being the default). If a particular sort mode has been selected for a folder by pressing '0', the default no longer applies to that folder. Repeating timers no longer write a ".sort" file into a recordings folder to have the recordings sorted by time. - The command line option -D now accepts the value '-' (as in -D-), which prevents VDR from using any DVB devices (suggested by Dietmar Spingler). - The -V and -h options now list the plugins in alphabetical order (suggested by Dietmar Spingler). - Fixed a compiler warning in font.c. - Commented out the line #define DEPRECATED_VIDEOSYSTEM in device.h. If a plugin doesn't compile with this version of VDR, you can uncomment this line as a quick workaround. In the long run the plugin will need to be adapted. - The function cOsd::GetBitmap() is now 'protected'. If a plugin doesn't compile with this version of VDR, you can uncomment the line //#define DEPRECATED_GETBITMAP in osd.h as a quick workaround. In the long run the plugin will need to be adapted. - The -u option now also accepts a numerical user id (suggested by Derek Kelly). - The SVDRP port now accepts multiple concurrent connections. You can now keep an SVDRP connection open as long as you wish, without preventing others from connecting. Note, though, that SVDRP connections still get closed automatically if there has been no activity for 300 seconds (configurable via "Setup/Miscellaneous/SVDRP timeout (s)"). - The SVDRP log messages have been unified and now always contain the IP and port number of the remote host. - SVDRP connections are now handled in a separate "SVDRP server handler" thread, which makes them more responsive. Note that there is only one thread that handles all concurrent SVDRP connections. That way each SVDRP command is guaranteed to be processed separately, without interfering with any other SVDRP commands that might be issued at the same time. Plugins that implement SVDRP commands may need to take care of proper locking if the commands access global data. - VDR now sends out a broadcast to port 6419/udp, which was assigned to 'svdrp-disc' by the IANA. VDRs listening on that port will automatically initiate an SVDRP connection to the broadcasting VDR, and in turn send out a broadcast to make other VDRs connect to them. That way all VDRs within the local network will have permanent "peer-to-peer" SVDRP connections between each other. The configuration in the svdrphosts.conf file is taken into account when considering whether or not to respond to an SVDRP discover broadcast. - The new SVDRP command PING is used by automatically established peer-to-peer connections to keep them alive. - The new function GetSVDRPServerNames() can be used to get a list of all VDRs this VDR is connected to via SVDRP. - The new function ExecSVDRPCommand() can be used to execute an SVDRP command on one of the servers this VDR is connected to, and retrieve the result. The helper functions SVDRPCode() and SVDRPValue() can be used to easily access the codes and values returned by ExecSVDRPCommand(). - The cTimer class now has a new member named 'remote', which holds the name of the remote server this timer will record on. If this is NULL, it is a local timer. - Timers from other VDRs that are connected to this VDR via SVDRP are now automatically fetched and stored in the global Timers list. In order for this to work, all of the channels used by timers on the remote VDR must also be defined on the local VDR (however, not necessarily in the same sequence). Automatic channel syncing will be implemented later. - The main menu of the LCARS skin now displays a small rectangle on the left side of a timer if this is a remote timer. The color of that rectangle changes if the timer is currently recording on the remote VDR. - Accessing the global Timers list now has to be protected by proper locking, because SVDRP commands are now executed in a separate thread. The introduction of this locking mechanism required the following changes: + The new classes cStateLock and cStateKey are used to implement locking with quick detection of state changes. + cConfig::cConfig() now has a parameter that indicates whether this list requires locking. + The global lists of Timers, Channels, Schedules and Recordings are no longer static variables. They are now pointers that need to be retrieved through a call to cTimers::GetTimersRead/Write(), cChannels::GetChannelsRead/Write(), cSchedules::GetSchedulesRead/Write() and cRecordings::GetRecordingsRead/Write(), respectively. + References from/to link channels are now removed in cChannels::Del() rather than cChannel::~cChannel(), to make sure the caller holds a proper lock. + cChannel::HasTimer() has been removed. This information is now retrieved via cSchedule::HasTimer(). + Several member functions of cChannel, cTimer, cMarks and cRecording have been made 'const', and some of them are now available as both 'const' and 'non-const' versions. + The cChannel::Set...() functions are now 'bool' and return true if they have actually changed any of the channels's members. + cChannels::SetModified() has been renamed to cChannels::SetModifiedByUser(). + cChannels::Modified() has been renamed to cChannels::ModifiedByUser(), and now has a 'State' parameter that allows the caller to see whether a channel has been modified since the last call to this function with the same State variable. + The macros CHANNELSMOD_NONE/_AUTO/_USER have been removed. + cMarks now requires locking via cStateKey. + cSortedTimers now requires a pointer to the list of timers. + cEvent::HasTimer() no longer scans the list of timers to check whether an event is referenced by a timer, but rather keeps score of how many timers reference it. This was necessary in order to avoid having to lock the list of timers from within a cEvent. + The new class cListGarbageCollector is used to temporary store any objects deleted from cLists that require locking. This allows pointers to such objects to be dereferenced even if the objects are no longer part of the list. + cListBase::Contains() can be used to check whether a particular object is still contained in that list. + Outdated events are no longer "phased out", but rather deleted right away and thus taken care of by the new "garbage collector" of the list. + Deleted cRecording objects are no longer kept in a list of "vanished" recordings, but are rather taken care of by the new "garbage collector" of the list. + cSchedules::ClearAll() has been removed. The functionality is now implemented directly in cSVDRPServer::CmdCLRE(). + tEventID has been changed to u_int16_t in order to make room for the new member numTimers in cEvent. + cSchedule now has a member Modified(), which can be used with a State variable to quickly determine whether this schedule has been modified since the last call to this function with the same State variable. + cSchedulesLock has been removed. Locking the list of schedules is now done via the cList's new locking mechanism. + The 'OnlyRunningStatus' parameters in cEpgHandler::BeginSegmentTransfer() and cEpgHandler::EndSegmentTransfer() are now obsolete. They are still present in the interface for backward compatibility, but may be removed in a future version. Their value is always 'false'. + The constant tcMod is no longer used in cStatus::TimerChange(). The definition is still there for backward compatibility. Plugins that access the global lists of Timers, Channels, Recordings or Schedules will need to be adapted as follows: + Instead of directly accessing the global variables Timers, Channels or Recordings, they need to set up a cStateKey variable and call the proper getter function, as in cStateKey StateKey; if (const cTimers *Timers = cTimers::GetTimersRead(StateKey)) { // access the timers StateKey.Remove(); } and cStateKey StateKey; if (cTimers *Timers = cTimers::GetTimersWrite(StateKey)) { // access the timers StateKey.Remove(); } See timers.h, thread.h and tools.h for details on this new locking mechanism. + There are convenience macros for easily accessing these lists without having to explicitly set up a cStateKey and calling its Remove() function. These macros have the form LOCK_*_READ/WRITE (with '*' being TIMERS, CHANNELS, SCHEDULES or RECORDINGS). Simply put such a macro before the point where you need to access the respective list, and there will be a pointer named Timers, Channels, Schedules or Recordings, respectively, which is valid until the end of the current block. + If a plugin needs to access several of the global lists in parallel, locking must always be done in the sequence Timers, Channels, Recordings, Schedules. This is necessary to make sure that different threads that need to lock several lists at the same time don't end up in a deadlock. + Some pointer variables may need to be made 'const'. The compiler will tell you about these. - cSectionSyncer has been improved to better handle missed sections. - Added a missing initialization of 'seen' in cChannel's copy constructor. - Background modifications of channels, timers and events are now displayed immediately in the corresponding menus. - cEIT now checks the version of the tables before doing any processing, which saves a lot of locking and processing. - If a timer is newly created with the Red button in the Schedule menu, and the timer is presented to the user in the "Edit timer" menu because it will start immediately, it now *must* be confirmed with "Ok" to set the timer. Otherwise the timer will not be created. - Recordings and deleted recordings are now scanned in a single thread. - The new SVDRP command POLL is used by automatically established peer-to-peer connections to trigger fetching remote timers. - You can now set DumpSVDRPDataTransfer in svdrp.c to true to have all SVDRP communication printed to the console for debugging. - Added a missing 'const' to cReceiver::Receive(), to protect the given Data from being modified. - The SVDRP commands that deal with timers (DELT, LSTT, MODT, NEWT, NEXT and UPDT) as well as any log messages that refer to timers, now use a unique id for each timer, which remains valid as long as this instance of VDR is running. This means that timers are no longer continuously numbered from 1 to N in LSTT. There may be gaps in the sequence, in case timers have been deleted. - The Timers menu now displays the name of the remote VDR in front of the timer's file name, if this is a remote timer. - The new options "Setup/Miscellaneous/SVDRP peering", ".../SVDRP host name" and ".../SVDRP default host" can be used to configure automatic peering between VDRs in the same network. Peering is disabled by default and can be enabled by setting "SVDRP peering" to "yes". - The function cTimer::ToText() no longer returns a newline character at the end of the string. The newline is now added by the caller as necessary. This was changed because cTimer::ToText() is now also needed in a context where the terminating newline can't be used. Consequently, cChannel::ToText() and cMark::ToText() have been modified accordingly. - All timer related response strings from SVDRP commands now use the channel ID instead of channel numbers. - The "Edit timer" menu now has a new parameter "Record on", which can be used to select the VDR on which this timer shall record. Timers can be freely moved between connected VDRs by simply selecting the desired machine in this field. - The SVDRP command DELT no longer checks whether the timer that shall be deleted is currently recording. - The character 0x0D is now stripped from EPG texts (reported by Janne Pänkälä). - The EPG scanner no longer moves the dish if there is a positioner. - The 'newplugin' script now creates the 'po' subdirectory for translations (thanks to Thomas Reufer). - Skins can now implement cSkinDisplayMenu::MenuOrientation() to display horizontal menus (thanks to Stefan Braun). - Fixed a possible stack overflow in cListBase::Sort() (thanks to Oliver Endriss). - Changed the description of the --chartab option in the INSTALL file to refer to "DVB SI table strings" instead of "EPG data". - The width and height of the OSD are now limited to the actual maximum dimensions of the output device, taking into account the top and left offset. - The new setup option "Recording/Record key handling" can be used to define what happens if the Record key on the remote control is pressed during live tv (suggested by Dietmar Spingler). - Empty adaptation field TS packets are now skipped when recording (thanks to Christopher Reimer, based on the "AFFcleaner" by Stefan Pöschel).
490 lines
22 KiB
Plaintext
490 lines
22 KiB
Plaintext
Installation of the Video Disk Recorder
|
|
---------------------------------------
|
|
|
|
Version 2.2
|
|
-----------
|
|
|
|
Compiling and running the program:
|
|
----------------------------------
|
|
|
|
VDR requires the Linux-DVB driver header files to compile.
|
|
As of kernel 2.6 these are part of the official Linux kernel
|
|
distribution, and so they should be automatically found in
|
|
/usr/include/linux/dvb. If your DVB driver header files are
|
|
in a different location, you can rename the file Make.config.template
|
|
to Make.config and adjust the definition of DVBDIR in that file.
|
|
|
|
Refer to http://linuxtv.org for more information about the Linux-DVB driver.
|
|
|
|
VDR requires the Linux-DVB driver version that supports the S2API interface.
|
|
|
|
You will also need to install the following libraries, as well as their
|
|
"devel" packages to get the necessary header files for compiling VDR:
|
|
|
|
fontconfig
|
|
freetype2
|
|
fribidi (see "BiDi support" below)
|
|
gettext
|
|
libcap
|
|
libjpeg
|
|
|
|
If the "capability" module is not compiled into your kernel, you may
|
|
need to do "modprobe capability" before running VDR.
|
|
|
|
After extracting the package, change into the VDR directory
|
|
and type 'make'. This should produce an executable file
|
|
named 'vdr', which can be run after the DVB driver has been
|
|
installed.
|
|
|
|
If you want to build a 32-bit version of VDR on a 64-bit machine, you can
|
|
use 'make M32=1' to do so. Note that you also need to have a Make.config file
|
|
(derived from Make.config.template) to make this work.
|
|
|
|
IMPORTANT: See "Configuration files" below for information on how
|
|
========= to set up the configuration files at the proper location!
|
|
|
|
By default the 'vdr' program can be controlled via the PC keyboard.
|
|
If you want to disable control via the keyboard, you can add NO_KBD=1
|
|
to the 'make' call, or use the '--no-kbd' option at runtime.
|
|
|
|
If you have an infrared remote control unit you can define the REMOTE macro
|
|
to one of the following values in the 'make' call to make the respective control
|
|
the default:
|
|
|
|
REMOTE=LIRC control via the "Linux Infrared Remote Control"
|
|
(see http://www.lirc.org)
|
|
|
|
Alternatively you can use the '--lirc' option at runtime.
|
|
This option accepts an optional path to the remote control device,
|
|
the default of which can be set via the LIRC_DEVICE macro.
|
|
|
|
If you want to make your video directory available to other machines that
|
|
have limitations on directory name lengths and/or allowed characters in
|
|
directory names, you can call VDR with the command line option '--dirnames'
|
|
(see man vdr(1) for details).
|
|
|
|
When running, the 'vdr' program writes status information into the
|
|
system log file, which is usually /var/log/messages (or /var/log/user.log,
|
|
depending on your syslog configuration). You may want to watch these
|
|
messages (tail -f /var/log/messages) to see if there are any problems.
|
|
|
|
The program can be controlled via a network connection to its SVDRP
|
|
port ("Simple Video Disk Recorder Protocol"). By default, it listens
|
|
on port 6419 (use the --port=PORT option to change this). For details
|
|
about the SVDRP syntax see the source file 'svdrp.c'.
|
|
|
|
WARNING: DUE TO THE OPEN SVDRP PORT THIS PROGRAM MAY CONSTITUTE A
|
|
======= POTENTIAL SECURITY HAZARD! IF YOU ARE NOT RUNNING VDR IN
|
|
A CONTROLLED ENVIRONMENT, YOU MAY WANT TO DISABLE SVDRP
|
|
BY USING '--port=0'!
|
|
|
|
The file 'svdrphosts.conf' can be used to define which hosts are allowed
|
|
to access the SVDRP port. By default only localhost (127.0.0.1) is granted
|
|
access. If you want to give other hosts access to your SVDRP port you need to
|
|
add their IP numbers to 'svdrphosts.conf'.
|
|
|
|
If the program shall run as a daemon, use the --daemon option. This
|
|
will completely detach it from the terminal and will continue as a
|
|
background process.
|
|
|
|
When starting the program through an entry in /etc/inittab, use the --terminal
|
|
option to set the controlling terminal, as in
|
|
|
|
vdr:123:respawn:/usr/local/bin/vdr --terminal=/dev/tty8 -w 60
|
|
|
|
See the man page vdr(1) for complete information about all command line options.
|
|
|
|
Output devices
|
|
--------------
|
|
|
|
VDR by itself doesn't produce any audio or video output. In order to watch
|
|
live tv or recordings, you will need to use a plugin that supports the actual
|
|
hardware in your system, for instance:
|
|
|
|
Plugin: Device:
|
|
|
|
dvbsddevice Full-Featured SD DVB cards (Fujitsu-Siemens Design)
|
|
(comes with the VDR source)
|
|
dvbhddevice Full-featured HD DVB cards (Technotrend TT S2-6400)
|
|
https://bitbucket.org/powARman/dvbhddevice
|
|
rpihddevice Raspberry Pi
|
|
http://projects.vdr-developer.org/git/vdr-plugin-rpihddevice.git
|
|
|
|
See http://linuxtv.org/vdrwiki/index.php/Output_devices for more.
|
|
|
|
Standard compliance
|
|
-------------------
|
|
|
|
Basically VDR works according to the DVB standard, but there are countries/providers
|
|
that use other standards, which in some details deviate from the DVB standard.
|
|
This makes it necessary to handle things differently in some areas, depending on
|
|
which standard is actually used. If this is the case in your area, you may need
|
|
to adjust the option "DVB/Standard compliance" in the Setup menu accordingly.
|
|
|
|
Locale
|
|
------
|
|
|
|
When presenting the list of recordings, VDR sorts the entries according to
|
|
the current "locale" settings. This makes sure that special characters (like
|
|
the German "umlauts") appear at the expected positions. In order to benefit
|
|
from this you may have to set the locale environment variable, for instance
|
|
|
|
export LANG=de_DE
|
|
|
|
for a German locale. If you don't want this to result in German error messages
|
|
in the log file, it is sufficient to just set
|
|
|
|
export LC_COLLATE=de_DE
|
|
|
|
which only influences the way strings are sorted and leaves error messages
|
|
in English.
|
|
|
|
Note that for VDR's internationalized texts to work, the LANG environment
|
|
variable must be set to a valid locale!
|
|
|
|
BiDi support
|
|
------------
|
|
|
|
Some languages are written right-to-left. In order to display such languages
|
|
correctly, you need to build VDR with BIDI=1. This will link to the "fribidi"
|
|
library and implement a function that prepares bidirectional texts to be
|
|
displayed correctly. Since BiDi support adds some runtime overhead by requiring
|
|
additional memory allocation and copying, this feature is not compiled in
|
|
by default, so that users that have no need for this don't get any overhead.
|
|
|
|
Workaround for providers not encoding their DVB SI table strings correctly
|
|
--------------------------------------------------------------------------
|
|
|
|
According to "ETSI EN 300 468" the default character set for SI data is
|
|
ISO6937. But unfortunately some broadcasters actually use ISO-8859-9 or
|
|
other encodings, but fail to correctly announce that.
|
|
Users who want to set the default character set to something different can
|
|
do this by using the command line option --chartab with something
|
|
like ISO-8859-9.
|
|
|
|
Start script with automatic restart in case of hangups:
|
|
-------------------------------------------------------
|
|
|
|
The VDR source directory contains a 'runvdr.template'. Just copy it as 'runvdr'
|
|
into your /usr/bin or /usr/local/bin directory and adjust it to your particular
|
|
requirements. (See the comments inside the script for more information.)
|
|
|
|
If you run VDR using the 'runvdr' shell script it will use the built-in
|
|
watchdog timer to restart the program in case something happens that
|
|
causes a program hangup. If you change the command line options for the
|
|
call to the VDR program, be sure to NOT use the '-d' option! Otherwise
|
|
VDR will go into 'daemon' mode and the initial program call will return
|
|
immediately! 'runvdr' needs to be started as user 'root'. Use the '-u'
|
|
option to run the actual 'vdr' program under a different user id.
|
|
|
|
Setting the system time:
|
|
------------------------
|
|
|
|
If you want VDR to set the system time according to the data received
|
|
from the transponder, you need to start VDR as user 'root'. For security
|
|
reasons you should then use the '-u' option to define a lesser privileged
|
|
user id under which VDR should actually run. It will then only keep the
|
|
capability to set the system time, and set its user id to the given one.
|
|
You also need to enable the "EPG/Set system time" option in VDR's
|
|
Setup menu, and select a transponder from which you want to receive
|
|
the time in "Use time from transponder". Make sure you select a transponder
|
|
that has a reliable clock - some transponders are quite off.
|
|
|
|
Automatic shutdown:
|
|
-------------------
|
|
|
|
If you define a shutdown command via the '-s' command line option, VDR
|
|
will call the given command if there is currently no recording or replay
|
|
active, the user has been inactive for at least MinUserInactivity minutes
|
|
and the next timer event is at least MinEventTimeout minutes in the future
|
|
(see the Setup parameters in MANUAL).
|
|
|
|
The command given in the '-s' option will be called with five parameters.
|
|
|
|
The first one is the time (in UTC) of the next timer event or plugin wakeup
|
|
time (as a time_t type number), and the second one is the number of
|
|
seconds from the current time until the next timer event. Your program can
|
|
choose which one to use for programming some sort of hardware device that
|
|
makes sure the computer will be restarted in time before the next timer
|
|
event. Your program must also initiate the actual shutdown procedure of the
|
|
computer. VDR will not automatically exit after calling the shutdown
|
|
program, but will rather continue normally until it receives a SIGTERM when
|
|
the computer is actually shut down. So in case the shutdown fails, or the
|
|
shutdown program for some reason decides not to perform a shutdown, VDR
|
|
will stay up and running and will call the shutdown program again after a
|
|
while. The command will be started in a separate background session, so it
|
|
can continue to run even after VDR has terminated.
|
|
|
|
If there are currently no timers active and there is no plugin wakeup
|
|
time, both parameters will be '0'. In that case the program shall not set
|
|
the hardware for automatic restart and only perform the system shutdown.
|
|
A program that uses the second parameter to set the hardware for restart
|
|
must therefore also check whether the first parameter is '0'.
|
|
|
|
If the wakeup time is given by a timer, the third parameter will be the
|
|
number of the channel that will be recorded, otherwise it will be 0. The
|
|
fourth parameter contains the file name of the recording as defined in the
|
|
timer, the name of the plugin that requested the wakeup time, or an empty
|
|
string if no wakeup time is present. These can be used by the shutdown
|
|
program to show that information on some display interface etc.
|
|
|
|
The fifth parameter indicates the reason why the shutdown was requested.
|
|
'0' means this is an automatic shutdown due to some timeout, while '1' means
|
|
that this is a user requested shutdown (resulting from pressing the "Power"
|
|
key). The shutdown program may use this information to decide whether or
|
|
not to actually perform the system shutdown.
|
|
|
|
If a timer is currently recording, or a recording would start within the
|
|
next 30 minutes (default for the "Min. event timeout" setup parameter), and
|
|
the user insists in shutting down now, the first and second parameter will
|
|
correspond to a time that is "Min. event timeout" minutes in the future.
|
|
|
|
Before the shutdown program is called, the user will be prompted to inform
|
|
him that the system is about to shut down. If any remote control key is
|
|
pressed while this prompt is visible, the shutdown will be cancelled (and
|
|
tried again later). The shutdown prompt will be displayed for 5 minutes, which
|
|
should be enough time for the user to react.
|
|
|
|
A sample shell script to be used with the '-s' option might look like this:
|
|
|
|
#!/bin/sh
|
|
setRTCwakeup $(($1 - 300))
|
|
sudo halt
|
|
|
|
Here 'setRTCwakeup' would be some program that uses the first parameter
|
|
(which is the absolute time of the next timer event) to set the Real Time
|
|
Clock so that it wakes up the computer 5 minutes (i.e. 300 seconds) before
|
|
that event. The 'sudo halt' command then shuts down the computer.
|
|
You will have to substitute both commands with whatever applies to your
|
|
particular hard- and software environment.
|
|
|
|
If the '-s' option is present, the VDR machine can be turned off by pressing
|
|
the "Power" key on the remote control.
|
|
|
|
Executing commands before and after a recording:
|
|
------------------------------------------------
|
|
|
|
You can use the '-r' option to define a program or script that gets called
|
|
before and after a recording is performed, and after an editing process
|
|
has finished or a recording has been deleted.
|
|
|
|
The program will be called with two or three (in case of "editing" and "edited")
|
|
string parameters. The first parameter is one of
|
|
|
|
before if this is *before* a recording starts
|
|
started if this is after a recording has *started*
|
|
after if this is *after* a recording has finished
|
|
editing if this is before *editing* a recording
|
|
edited if this is after a recording has been *edited*
|
|
deleted if this is after a recording has been *deleted*
|
|
|
|
and the second parameter contains the full name of the recording's
|
|
directory (which may not yet exists at that moment in the "before" case).
|
|
In the "editing" and "edited" case it will be the name of the edited version
|
|
(second parameter) and the name of the source version (third parameter).
|
|
In the "deleted" case the extension of the directory name is ".del"
|
|
instead of ".rec".
|
|
|
|
Within this program you can do anything you would like to do before and/or
|
|
after a recording or after an editing process. However, the program must return
|
|
as soon as possible, because otherwise it will block further execution of VDR.
|
|
Be especially careful to make sure the program returns before the watchdog
|
|
timeout you may have set up with the '-w' option! If the operation you want to
|
|
perform will take longer, you will have to run it as a background job.
|
|
|
|
An example script for use with the '-r' option could look like this:
|
|
|
|
#!/bin/sh
|
|
case "$1" in
|
|
before)
|
|
echo "Before recording $2"
|
|
;;
|
|
started)
|
|
echo "Started recording $2"
|
|
;;
|
|
after)
|
|
echo "After recording $2"
|
|
;;
|
|
editing)
|
|
echo "Editing recording $2"
|
|
echo "Source recording $3"
|
|
;;
|
|
edited)
|
|
echo "Edited recording $2"
|
|
echo "Source recording $3"
|
|
;;
|
|
deleted)
|
|
echo "Deleted recording $2"
|
|
;;
|
|
*)
|
|
echo "ERROR: unknown state: $1"
|
|
;;
|
|
esac
|
|
|
|
Command line options:
|
|
---------------------
|
|
|
|
Use "vdr --help" for a list of available command line options.
|
|
|
|
Replaying Dolby Digital audio:
|
|
------------------------------
|
|
|
|
If you have a "full featured" DVB card with SPDIF output you can replay
|
|
Dolby Digital audio directly through the DVB card.
|
|
You can also use an external program that reads the DD data
|
|
from stdin and processes it in a way suitable for your audio hardware.
|
|
This program must be given to VDR with the '-a' option, as in
|
|
|
|
vdr -a ac3play
|
|
|
|
The video data directory:
|
|
-------------------------
|
|
|
|
All recordings are written into directories below "/srv/vdr/video". Please
|
|
make sure this directory exists, and that the user who runs the 'vdr'
|
|
program has read and write access to that directory.
|
|
If you prefer a different location for your video files, you can use
|
|
the '-v' option to change that. Please make sure that the directory
|
|
name you use with '-v' is a clean and absolute path name (no '..' or
|
|
multiple slashes).
|
|
|
|
Note that the file system need not be 64-bit proof, since the 'vdr'
|
|
program splits video files into chunks of about 2GB. You should use
|
|
a disk with several gigabytes of free space. One GB can store roughly
|
|
half an hour of SD video data, or 10 minutes of HD video.
|
|
Either use one of today's large terabyte disks (preferably with a backup disk
|
|
in a RAID-1 array), or use something like "mhddfs" to group several disks
|
|
into one large volume.
|
|
|
|
Note that you should not copy any non-VDR files into the video directory,
|
|
since this might cause a lot of unnecessary disk access when VDR cleans up those
|
|
directories and there is a large number of files and/or subdirectories in
|
|
there. If you have a large disk that you want to use for VDR's video data as
|
|
well as other stuff, you may want to create a subdirectory for VDR, as in
|
|
|
|
/mydisk/video
|
|
|
|
and put your other stuff into, say,
|
|
|
|
/mydisk/otherstuff
|
|
|
|
If your video directory is mounted via a Samba share, and you are experiencing
|
|
problems with replaying in fast forward mode, you can comment out the line
|
|
|
|
#define USE_FADVISE
|
|
|
|
in the file tools.c, which may lead to better results.
|
|
|
|
Configuration files:
|
|
--------------------
|
|
|
|
There are several configuration files that hold information about
|
|
channels, remote control keys, timers etc. By default these files are
|
|
spread around the system according to the FHS ("File system Hierarchy Standard").
|
|
If you prefer to have VDR built to run locally under the VDR source tree,
|
|
you can copy the file Make.config.template to Make.config and set the parameter
|
|
LCLBLD=1. If you also want to have all data files under one single directory,
|
|
set ONEDIR=1 in Make.config.
|
|
|
|
For starters just copy all *.conf files from the VDR directory into your
|
|
video directory.
|
|
|
|
The configuration files can be edited with any text editor, or will be written
|
|
by the 'vdr' program if any changes are made inside the on-screen menus.
|
|
Take a look at man page vdr(5) for information about the file formats.
|
|
|
|
The files that come with this package contain the author's selections,
|
|
so please make sure you adapt these to your personal taste. Also make sure
|
|
that the channels defined in 'channels.conf' are correct before attempting
|
|
to record anything. Channel parameters may vary and not all of the channels
|
|
listed in the default 'channels.conf' file have been verified by the author.
|
|
|
|
As a starting point you can copy the 'channels.conf' file that comes with the
|
|
VDR archive into your video directory (or into your config directory,
|
|
respectively, in case you have redirected it with the -c option).
|
|
|
|
Setting up DiSEqC:
|
|
------------------
|
|
|
|
If you are using a DVB-S card with a satellite equipment that needs to be
|
|
accessed using DiSEqC, you have to go to the "Setup" menu and set the "DiSEqC"
|
|
parameter to "on". You also need to set up the file 'diseqc.conf' to properly
|
|
access your DiSEqC equipment (see man vdr(5) for details).
|
|
|
|
A special form of DiSEqC is used to connect several receivers to one signal
|
|
source using only a single cable. This method, known as "Satellite Channel Routing"
|
|
according to EN50494 (aka "Unicable(TM)", "OLT(TM)", "SatCR", "Single Cable
|
|
Distribution", "Channel Stacking System" or "Single Cable Interface") or
|
|
EN50607 (aka "JESS") uses the file "scr.conf" to specify which SCR channels
|
|
use which user band frequency.
|
|
|
|
If DVB-S devices need to be connected to the same satellite cable, but no
|
|
"Satellite Channel Routing" is available, they can be set to be "bonded" in
|
|
the Setup/LNB menu. Bonded devices can only be tuned to the same polarization
|
|
and frequency band, which reduces the number of potentially receivable channels.
|
|
|
|
Note that it doesn't make sense to use "Satellite Channel Routing" and
|
|
"Device Bonding" at the same time with the same devices. If you use either
|
|
of these methods, it is necessary that your devices are always created in the
|
|
same sequence when the drivers are loaded. You may need to configure some
|
|
proper "udev" rules to make sure this happens.
|
|
If you use "Device Bonding" and you add devices to your setup that don't
|
|
provide DVB-S and take up a position in which there used to be a bonded DVB-S
|
|
device, make sure you open, adjust (if necessary) and confirm the Setup/LNB
|
|
menu to have the device bondings set correctly again.
|
|
|
|
Running VDR with DVB-C (cable) or DVB-T (terrestrial):
|
|
------------------------------------------------------
|
|
|
|
VDR automatically recognizes if the DVB card in use is a cable or a
|
|
terrestrial card. The only thing that needs to be different when using digital
|
|
cable or terrestrial reception is the 'channels.conf' file. The distribution
|
|
archive contains a default 'channels.conf.cable' and 'channels.conf.terr',
|
|
respectively, which users of such cards can rename or copy to 'channels.conf'
|
|
in order to receive digital cable or terrestrial channels. The format of these
|
|
files is mostly the same as for satellite channels, however, some fields have
|
|
different or extended meanings (see man vdr(5) for details).
|
|
|
|
You can even use a mixture of DVB-S, DVB-C and DVB-T cards in the same system.
|
|
All you need to do is to put all the channel definitions into one big
|
|
'channels.conf' file. VDR will automatically know which channels can be
|
|
received with which card(s) by evaluating the 'source' parameter.
|
|
|
|
Learning the remote control keys:
|
|
---------------------------------
|
|
|
|
There is no default 'remote.conf' file, so you will have to go through a "teach-in"
|
|
session that allows the program to learn your remote control codes.
|
|
It will first attempt to determine the basic data transfer mode and
|
|
timing of your remote control unit, and then will ask you to press one
|
|
key after the other so that it can learn the various key codes. You will
|
|
at least need to provide an "Up" and a "Down" key, so that you can switch
|
|
channels. The rest of the key definitions is optional, but the more keys
|
|
you define, the more you will be able to navigate through the menus and
|
|
control recording/replaying. The program uses only a very small number
|
|
of keys which have multiple meanings in the various modes (see MANUAL
|
|
for a detailed description).
|
|
|
|
The recommended PC key assignments are:
|
|
|
|
Up, Down, Left, Right Cursor keys
|
|
Menu 'Home'
|
|
Ok 'Enter'
|
|
Back 'Backspace'
|
|
Red, Green, Yellow, Blue 'F1'..'F4'
|
|
0..9 '0'..'9'
|
|
Volume+/- 'PgUp', 'PgDn'
|
|
Mute 'F10'
|
|
|
|
If you want to change your key assignments later, simply delete the file
|
|
'remote.conf' and restart 'vdr' to get into learning mode.
|
|
|
|
Generating source code documentation:
|
|
-------------------------------------
|
|
|
|
You can do a 'make srcdoc' to generate source code documentation using the
|
|
Doxygen tool. To do so you need the Doxygen package from http://www.doxygen.org
|
|
and the Graphviz package from http://www.research.att.com/sw/tools/graphviz.
|
|
After installing these two packages you can do 'make srcdoc' and then use your
|
|
HTML browser to read srcdoc/html/index.html.
|