<tvh_include>inc/del_grid_entries</tvh_include>
---
+
+<tvh_include>inc/play</tvh_include>
+
+---
-##Configuration - Recording - Digital Video Recorder Profiles
-
This tab is used to configure operation of the Digital Video Recorder.
It is not used for scheduling or administration of individual
recordings.
-
+
+
+---
+
+###Menu Bar/Buttons
+
+The following functions are available:
+
+Button | Function
+--------------------|---------
+**Save** | Save any changes made to the selected profile
+**Undo** | Undo any changes made to the selected profile since the last save.
+**Add** | Add a new profile.
+**Delete** | Delete an existing profile.
+**Clone** | Clone the currently selected profile.
+
+<tvh_include>inc/common_button_table_end</tvh_include>
+
+---
+
+###Adding/Editing a Profile
+
+To create a new profile press the *[Add]* button from the
+menu bar, a new entry "! New config" will be added to the grid, click
+on that entry to configure it - don't forget to save!
+
+
+
+To edit an existing configuration, click on it from within the grid, the
+*Parameters* panel should then appear on the right hand side.
+
+**Tips**:
+* Remember to *[Save]* your changes before selecting another profile
+from within the grid.
+* You can clone an existing profile by clicking the *[Clone]*
+button.
+
+---
+
+###Deleting a Profile
+
+Highlight (select) the desired entry from the grid, then press the
+*[Delete]* button from the menu bar.
+---
--- /dev/null
+This tab defines rules to filter and order the elementary streams
+(PIDs) like video or audio from the input feed. The execution order of
+commands is granted. It means that first rule is executed for all
+available streams then second and so on.
+
+
+
+If any elementary stream is not marked as ignored or exclusive, it is
+used. If you like to ignore unknown elementary streams, add a rule to
+the end of grid with the any (not defined) comparisons and with the
+action ignore.
+
+The rules for different elementary stream groups (video, audio,
+teletext, subtitle, CA, other) are executed separately (as visually edited).
+
+For the visual verification of the filtering, there is a service
+info dialog in the [Services](class/mpegts_service) tab.
+This dialog shows the received PIDs and filtered PIDs in one window.
+
+---
+<tvh_include>inc/common_button_table_start</tvh_include>
+
+<tvh_include>inc/common_button_table_end</tvh_include>
+
+Tab specific functions:
+
+Button | Function
+-----------------------|---------
+**Move Up** | Move the selected entry up the grid.
+**Move Down** | Move the selected entry down the grid.
+
+---
+
+<tvh_include>inc/add_grid_entry</tvh_include>
+
+
+
+---
+
+<tvh_include>inc/edit_grid_entries</tvh_include>
+
+---
+
+<tvh_include>inc/del_grid_entries</tvh_include>
+
+---
---
-###Playing a Mux
-
-You can stream a complete multiplex by copying/pasting the *Play* icon link
-into the desired player/software.
-
-**Notes**:
-* The links don't link to the actual stream but to a playlist for
-use with media players such as VLC, If you'd prefer to receive the raw
-transport stream instead, you can do so by removing the `/play/` path from
-the URL.
-* Not all devices support receiving a complete mux, notably low
-powered set-top-boxes and older USB tuners.
+<tvh_include>inc/play</tvh_include>
---
<tvh_include>inc/del_grid_entries</tvh_include>
---
+
+###Service Information
+
+Clicking the 
+information icon will display service details.
+
+---
+
+<tvh_include>inc/play</tvh_include>
+
+---
Stream Profiles are the settings for output formats. These are used for Live TV
streaming and recordings. The profiles are assigned through
-the [Access Entries](class/access_entry),
+the [Access Entries](class/access),
DVR Profiles or as parameter for HTTP Streaming.

--- /dev/null
+The map services to channels dialog allows you to control how
+services are mapped. The options selected here get passed to the
+[Service Mapper](status_service_mapper) tab when you press
+the *[Map services]* button.
+
+
+
+See [Services](class/mpegts_service) for more details on service mapping.
+
+---
--- /dev/null
+###Playing a Stream/File
+
+You can play a stream/file by copying/pasting the Play icon link from
+the grid into the desired player/software.
+
+**Notes**:
+* The links don't link to the actual stream but to a playlist for
+use with media players such as VLC, If you'd prefer to receive the raw
+stream instead, you can do so by removing the `/play/` path from
+the URL - see [URL Syntax](url) for more.
+
This is a read-only tab; nothing is configurable.
-
+
---
-####Menu Bar/Buttons
+###Menu Bar/Buttons
The following functions are available:
Button | Function
-----------|---------
**Help** | Display this help page.
-**View Level**| Change the interface view level to show/hide more advanced options.
---
-####Grid Items
+###Grid Items
The main grid items have the following functions:
-**Item**
-: Description
+****
+: Forcefully kill the connection. Note that many applications such as Kodi will automatically reconnect when a connection is dropped.
-**Item**
-: Description
+**Type**
+: Connection type - HTSP or HTTP.
-**Item**
-: Description
+**IP Address**
+: The IP address of the device.
-**Item**
-: Description
+**Username**
+: The username used to access tvheadend (a blank cell indicates no username was supplied).
+
+**Started**
+: Date the connection started - YYYY-MM-DD HH:MM:SS.
-##Status - Service Mapper
+##Service Mapper
-This tab shows information about current service mapping activity.
+This tab shows information about current service mapping activity.
-This is a read-only tab; nothing is configurable.
+This is a read-only tab; nothing is configurable.
-
+
+
+
+The [Map services to channels](class/service_mapper) dialog
+determines how services are mapped.
---
-####Menu Bar/Buttons
+###Menu Bar/Buttons
The following functions are available:
---
-####Grid Items
-
-The main grid items have the following functions:
+###Items
-**Item**
-: Description
+**Mapped**
+: Number of services mapped.
-**Item**
-: Description
+**Ignored**
+: Number of services ignored.
-**Item**
-: Description
+**Failed**
+: Number of services that failed to be mapped.
-**Item**
-: Description
+**Active**
+: Progress bar indicating mapping status.
This is a read-only tab; nothing is configurable.
-
+
---
-####Menu Bar/Buttons
+###Menu Bar/Buttons
The following functions are available:
---
-####Grid Items
+###Grid Items
The main grid items have the following functions:
-**Item**
-: Description
+**Sweep/Clean Icon **
+: Clear all "Uncorrected Blocks", "BER", etc stats.
-**Item**
-: Description
+**Input**
+: Device used to receive the stream.
-**Item**
-: Description
+**Sub No**
+: Number of subscriptions using the stream.
+
+**Weight**
+: Stream weighting.
+
+**Bandwidth**
+: Total stream input bandwidth.
+
+**BER**
+: [Bit Error Ratio](https://en.wikipedia.org/wiki/Bit_error_rate)
+
+**PER**
+: [Packet Error Ratio](https://en.wikipedia.org/wiki/Bit_error_rate#Packet_error_ratio)
+
+**Uncorrected Blocks**
+: Number of uncorrected blocks. A value higher than 0 can indicate a
+weak signal or interference, note that some devices can send a false value.
+
+**Transport Errors**
+: Number of transport streams errors. A fast increasing value here can
+indicate signal issues. Device drivers can sometimes send garbage data at
+the beginning of a stream, as long as the value doesn't increase at a fast
+pace and you have no playback issues, there is nothing to worry about.
+
+**Continuity Errors**
+: Continuity Count Error. Number of stream errors, a high value here can indicate a signal problem.
+
+**SNR**
+: Signal (To) Noise Ratio. [The level of a desired signal to the level of background noise](https://en.wikipedia.org/wiki/Signal-to-noise_ratio),
+note that not all devices supply correct signal information,
+the value here can sometimes be ambiguous.
+
+**Signal Strength**
+: The signal strength as reported by the device, note that not all devices
+supply correct signal information, the value here can sometimes be ambiguous
-**Item**
-: Description
--- /dev/null
+:
+
+Whenever you read or write data to the filesystems, the information is
+kept (cached) in memory for a while. This means that regularly-access
+files are available quickly without going back to the disc; it also
+means that there’s a disconnect when writing between the write request
+(from the application) and the actual write itself (to the disc/storage)
+as changes are buffered to be written in one go.
+
+Scheme | Description
+-----------------------|------------
+**Unknown** | A placeholder status, meaning that the configuration isn’t properly set.
+**System** | Change nothing and rely on standard (default) system caching to behave as it normally would.
+**Don't keep** | Tell the system that you’re not expecting to re-use the data soon, so don’t keep it in cache. The data will still be buffered for writing. Useful e.g. in a RAM-limited system like a Pi (given that you’re unlikely to be watching while recording, so data can be discarded now and read back from disc later).
+**Sync** | Tell the system to write the data immediately. This doesn’t affect whether or not it’s cached. Useful e.g. if you’ve a particular problem with data loss due to delayed write (such as if you get frequent transient power problems).
+**Sync + Don't keep** | A combination of last two variants above - data is written immediately and then discarded from cache.
PROP_DOC(postprocessor)
PROP_DOC(postremove)
PROP_DOC(pathname)
+PROP_DOC(cache_scheme)
const idclass_t dvr_config_class = {
.ic_class = "dvrconfig",
- .ic_caption = N_("DVR - Configuration Profile"),
+ .ic_caption = N_("DVR - Profiles"),
.ic_event = "dvrconfig",
.ic_doc = tvh_doc_dvrconfig_class,
.ic_changed = dvr_config_class_changed,
.desc = N_("The cache scheme to use/used to store recordings. "
"Leave as \"system\" unless you have a special use "
"case for one of the others. See Help for details."),
+ .doc = prop_doc_cache_scheme,
.off = offsetof(dvr_config_t, dvr_muxcnf.m_cache),
.def.i = MC_CACHE_DONTKEEP,
.list = dvr_config_class_cache_list,
- .opts = PO_ADVANCED,
+ .opts = PO_ADVANCED | PO_DOC_NLIST,
.group = 1,
},
{
return l;
}
+CLASS_DOC(filters)
+
const idclass_t esfilter_class = {
.ic_class = "esfilter",
.ic_caption = N_("Elementary stream filter"),
+ .ic_doc = tvh_doc_filters_class,
.ic_event = "esfilter",
.ic_perm_def = ACCESS_ADMIN,
.ic_save = esfilter_class_save,
.type = PT_INT,
.id = "class",
.name = N_("Class"),
- .opts = PO_RDONLY | PO_HIDDEN,
+ .opts = PO_RDONLY | PO_HIDDEN | PO_DOC_NLIST,
.off = offsetof(esfilter_t, esf_class),
},
{
.type = PT_INT,
.id = "index",
.name = N_("Index"),
- .opts = PO_RDONLY | PO_HIDDEN,
+ .opts = PO_RDONLY | PO_HIDDEN | PO_DOC_NLIST,
.off = offsetof(esfilter_t, esf_index),
},
{
const idclass_t esfilter_class_video = {
.ic_super = &esfilter_class,
.ic_class = "esfilter_video",
- .ic_caption = N_("Video stream filter"),
+ .ic_caption = N_("Video Stream Filter"),
.ic_properties = (const property_t[]){
{
.type = PT_STR,
.get = esfilter_class_language_get,
.set = esfilter_class_language_set,
.list = esfilter_class_language_enum,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_STR,
const idclass_t esfilter_class_audio = {
.ic_super = &esfilter_class,
.ic_class = "esfilter_audio",
- .ic_caption = N_("Audio stream filter"),
+ .ic_caption = N_("Audio Stream Filter"),
.ic_properties = (const property_t[]){
{
.type = PT_STR,
.get = esfilter_class_language_get,
.set = esfilter_class_language_set,
.list = esfilter_class_language_enum,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_STR,
const idclass_t esfilter_class_teletext = {
.ic_super = &esfilter_class,
.ic_class = "esfilter_teletext",
- .ic_caption = N_("Teletext stream filter"),
+ .ic_caption = N_("Teletext Stream Filter"),
.ic_properties = (const property_t[]){
{
.type = PT_STR,
.get = esfilter_class_language_get,
.set = esfilter_class_language_set,
.list = esfilter_class_language_enum,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_STR,
const idclass_t esfilter_class_subtit = {
.ic_super = &esfilter_class,
.ic_class = "esfilter_subtit",
- .ic_caption = N_("Subtitle stream filter"),
+ .ic_caption = N_("Subtitle Stream Filter"),
.ic_properties = (const property_t[]){
{
.type = PT_STR,
.get = esfilter_class_language_get,
.set = esfilter_class_language_set,
.list = esfilter_class_language_enum,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_STR,
const idclass_t esfilter_class_ca = {
.ic_super = &esfilter_class,
.ic_class = "esfilter_ca",
- .ic_caption = N_("CA stream filter"),
+ .ic_caption = N_("CA Stream Filter"),
.ic_properties = (const property_t[]){
{
.type = PT_STR,
const idclass_t esfilter_class_other = {
.ic_super = &esfilter_class,
.ic_class = "esfilter_other",
- .ic_caption = N_("Other stream filter"),
+ .ic_caption = N_("Other Stream Filter"),
.ic_properties = (const property_t[]){
{
.type = PT_STR,
.get = esfilter_class_language_get,
.set = esfilter_class_language_set,
.list = esfilter_class_language_enum,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_STR,
/*
* Teletext parsing functions
- * Copyright (C) 2007 Andreas Öman
+ * Copyright (C) 2007 Andreas Öman
* Copyright (C) 2014 Jaroslav Kysela
*
* This program is free software: you can redistribute it and/or modify
return m;
}
+CLASS_DOC(service_mapper)
+
static const idclass_t service_mapper_conf_class = {
.ic_snode = &service_mapper_conf.idnode,
.ic_class = "service_mapper",
- .ic_caption = N_("Service mapper"),
+ .ic_caption = N_("Service Mapping (Map services to channels)"),
+ .ic_doc = tvh_doc_service_mapper_class,
.ic_event = "service_mapper",
.ic_perm_def = ACCESS_ADMIN,
.ic_save = service_mapper_conf_class_save,
.islist = 1,
.id = "services",
.name = N_("Services"),
- .desc = N_("Select services to map."),
+ .desc = N_("Select/Selected services to map."),
.get = service_mapper_services_get,
.set = service_mapper_services_set,
.list = service_mapper_services_enum,