* When a recording fails or gets aborted the entry is moved to the [Failed Recordings](dvr_failed) tab.
+
+**Note**: Some entry details are not available/incomplete until the recording
+completes or fails, e.g. filesize, total data errors, etc.
+
---
-The *Details* column gives a quick overview as to the status of each
-entry:
+**Details** : Gives a quick overview as to the status of each entry.
Icon | Description
-------------------------------------------|-------------
 | the program failed to record
 | the program recorded successfully
-
-**Note**: Some entry details are not available/incomplete until the recording
-completes or fails, e.g. filesize, total data errors, etc.
-
---
-###1. Playing a Failed Recording
+###Playing a Failed Recording
You can play a partial recording by clicking the *Play* link.
If your browser supports video playback it should automatically start
playing. Note, the *Play* links do not link to an actual file but to a m3u playlist.
-###2. Downloading a Recording
+###Downloading a Recording
Highlight the desired entry then press the *[Download]* button on the menu bar.
-###3. Re-recording an Entry/Re-schedule a Failed Recording
+###Re-recording an Entry/Re-schedule a Failed Recording
You can re-schedule an entry by pressing the *[Re-record]* button on the menu bar.
**Note**: Your EPG data must have another matching event to be able to re-schedule
the entry.
-###4. Moving an Entry
+###Moving an Entry
Failed recording can be moved to the [Finished Recordings](dvr_finished)
tab by highlighting the desired entry and then pressing the *[Move to finished]*
button from the menu bar.
-###5. Deleting an Entry
+###Deleting an Entry
Highlight the desired entry(s) then press the *[Delete]* button on the menu bar.
---
-###1. Playing a Recording
+###Playing a Recording
You can play a recording by clicking the *Play* link.
If your browser supports video playback it should automatically start
playing. Note, the *Play* links do not link to an actual file but to a m3u playlist.
-###2. Downloading a Recording
+###Downloading a Recording
Highlight the desired entry then press the *[Download]* button on the
menu bar.
-###3. Editing an Entry
+###Editing an Entry
You can edit an entry by clicking the *[Edit]* button on the menu bar,
note that not all [DVR Entry](class/dvrentry) fields can be edited.
-###4. Deleting an Entry.
+###Deleting an Entry.
Highlight the desired entry(s) then press the *[Delete]* button on the
menu bar.
---
-###1. Adding and Editing an Entry
+###Adding and Editing an Entry
-####1.1. Adding an Entry Using the EPG
+####Adding an Entry Using the EPG
Using the Electronic Program Guide search functionality, find the
program/event you would like to record. For full instructions on how to
**Tip**: You can quickly find all matching programs by clicking on the title.
-####1.2. Adding an Entry Using Autorec Rules
+####Adding an Entry Using Autorec Rules
Autorec rules allow you to match events using various options.
Please see [Autorec](dvr_autorec) for more information.
-####1.3. Manual Event Entry/Editing an Entry
+####Manual Event Entry/Editing an Entry
Use the *[Add]* button to manually to add an entry. To edit an entry,
highlight the desired entry within the grid and then press the *[Edit]* button.
See the [DVR Entries](class/dvrentry) page for a more detailed look at
the various entry options.
-###2. Deleting an Entry
+###Deleting an Entry
You can delete or abort an upcoming entry (or an already in-progress recording) by pressing
the *[Delete]* or *[Abort]* buttons.
--- /dev/null
+:
+
+For example, if a program is to start at 13:00 and you set a padding of
+5 minutes, it will start recording at 12:54:30 (including a warm-up
+time of 30 seconds (user configurable)). If this isn't
+specified, any pre-recording padding as set in the channel or DVR
+profile will be used.
+
+Be sure to check you have enough free tuners available
+to record all scheduled recordings if they overlap.
-The *status* column indicates why an entry failed:
+:
Status | Description
-----------------|----------------------------------------------------------
Aborted by user | The recording was interrupted by the user.
File missing | The associated file(s) cannot be found on disk.
-Time missed | Indicates a recording failed due to one (or more) of the following: Tvheadend wasn't running when the entry/recording was scheduled to start; Tvheadend couldn't create the necessary file(s)/folder(s) to begin recording due to file system issues; The tuner returned no data indicating a signal/external problem; No free tuner was available for use;
+Time missed | See below.
+
+Time missed can be caused by one (or more) of the following:
+* No free tuners - usually in-use by other subscription(s).
+* No tuners are enabled and/or have no network assigned.
+* All available tuners failed to tune (this can indicate a signal, driver or hardware problem).
+* The underlying service for the channel is no longer available.
+* Tvheadend wasn't running or crashed when a scheduled event/entry was to start.
+
--- /dev/null
+:
+
+This is extremely useful for those programs you think/know will overrun.
+Any value selected here will keep a tuner busy for longer, so be sure
+to check you have enough free tuners to record all scheduled recordings
+if they overlap.
return prop_md_doc(tvh_doc_dvr_status_property, lang);
}
+static char *
+dvr_entry_prop_start_extra_doc(const struct property *p, const char *lang)
+{
+ extern const char *tvh_doc_dvr_start_extra_property[];
+ return prop_md_doc(tvh_doc_dvr_start_extra_property, lang);
+}
+
+static char *
+dvr_entry_prop_dvr_stop_extra_doc(const struct property *p, const char *lang)
+{
+ extern const char *tvh_doc_dvr_stop_extra_property[];
+ return prop_md_doc(tvh_doc_dvr_stop_extra_property, lang);
+}
+
extern const char *tvh_doc_dvrentry_class[];
const idclass_t dvr_entry_class = {
.ic_class = "dvrentry",
.ic_caption = N_("DVR Entries"),
.ic_event = "dvrentry",
+ /*.ic_doc = tvh_doc_dvrentry_class,*/
.ic_doc = tvh_doc_dvrentry_class,
.ic_changed = dvr_entry_class_changed,
.ic_save = dvr_entry_class_save,
.id = "start_extra",
.name = N_("Pre-recording padding"),
.desc = N_("Start recording earlier than the "
- "EPG/timer-defined start time by x minutes: for "
- "example, if a program is to start at 13:00 and "
- "you set a padding of 5 minutes, it will start "
- "recording at 12:54:30 (including a warm-up time "
- "of 30 seconds). If this isn't specified, any "
- "pre-recording padding as set in the channel or "
- "DVR profile will be used."),
+ "EPG/timer-defined start time by x minutes."),
+ .doc = dvr_entry_prop_start_extra_doc,
.off = offsetof(dvr_entry_t, de_start_extra),
.set = dvr_entry_class_start_extra_set,
.list = dvr_entry_class_extra_list,
.type = PT_TIME,
.id = "start_real",
.name = N_("Scheduled start time"),
- .desc = N_("The scheduled start time, including any "
- "pre-recording padding and a warm-up time of 30 "
- "seconds."),
+ .desc = N_("The scheduled start time, including any padding."),
.get = dvr_entry_class_start_real_get,
.opts = PO_RDONLY | PO_NOSAVE,
},
.type = PT_TIME,
.id = "stop",
.name = N_("Stop time"),
- .desc = N_("The time the entry stops/stopped being recorded."),
+ .desc = N_("The time the entry stops/stopped being recorded, "
+ "including any padding."),
.set = dvr_entry_class_stop_set,
.off = offsetof(dvr_entry_t, de_stop),
},
.name = N_("Post-recording padding"),
.desc = N_("Continue recording for x minutes after scheduled "
"stop time."),
+ .doc = dvr_entry_prop_dvr_stop_extra_doc,
.off = offsetof(dvr_entry_t, de_stop_extra),
.list = dvr_entry_class_extra_list,
.opts = PO_SORTKEY | PO_ADVANCED | PO_DOC_NLIST,
.type = PT_TIME,
.id = "stop_real",
.name = N_("Scheduled stop time"),
- .desc = N_("The scheduled stop time including any post-recording "
- "padding."),
+ .desc = N_("The scheduled stop time."),
.get = dvr_entry_class_stop_real_get,
.opts = PO_RDONLY | PO_NOSAVE,
},
{
.type = PT_TIME,
.id = "duration",
- .name = N_("Duration"),
- .desc = N_("The total recording time including pre- and post-"
- "recording padding."),
+ .name = N_("Scheduled Duration"),
+ .desc = N_("The total scheduled duration."),
.get = dvr_entry_class_duration_get,
.opts = PO_RDONLY | PO_NOSAVE | PO_DURATION,
},