Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mdhelp: more work, toc almost completed (but buggy markdown renderer)
  • Loading branch information
perexg committed Apr 3, 2016
1 parent 70a8e8b commit 9e7578d
Show file tree
Hide file tree
Showing 11 changed files with 477 additions and 6 deletions.
68 changes: 68 additions & 0 deletions docs/markdown/before_begin.md
@@ -0,0 +1,68 @@
##Before you begin

There are some basic concepts that will make life much easier if you
understand them from the outset.

###Hardware/Software Fundamentals

* A **tuner** is the hardware (chipset) needed to interpret a digital
television signal and extract from it the programme stream. The tuner hardware
is also responsible for communicating with your satellite dish via the LNB
in the case of DVB-S.

TODO: Network tuners like SAT>IP, HDHomeRun.

* A **driver** is the piece of software that your operating system uses to
talk to the tuner. This can be built into the OS (e.g. 'supported since kernel X')
or might be a separate piece of software that you need install, and maybe
even compile, separately.

* **Firmware** is a small piece of binary microcode that your system driver
sends to the tuner upon initialisation. This is the cause of more problems
than you'd imagine... if you find yourself in trouble, this is the first
thing to check along with kernel support for your hardware.

###Application/Tvheadend Fundamentals

The Tvheadend software then sets up a series of configuration elements, and
the way in which these interact determines how a TV signal ends up in front
of you. They all use what's known as a *many-to-many* relationship, in that
one configuration element can be related to multiple elements of the next
type, and vice versa: one tuner has multiple networks, one network can
exist on multiple tuners.

* The **network** is the software definition of your carrier network. Broadly,
it lays out what sort of network it is (such as DVB-T or DVB-S2), how it
gets scanned, where the DVB-S satellite is in orbit, and similar. Networks
are used by tuners so the hardware knows where to look for a signal.

* Networks then have **muxes**. These are the carrier frequencies that exist on
the old analogue channels that are used to transmit multiple digital signals
rather than a single analogue one. These signals are multiplexed together,
hence the name _mux_.

* Muxes then carry **services**. These are the individual streams of data.
They can be TV or radio programmes, they can provide data services such as
digital teletext, or they can be used as part of the control code for
catch-up IPTV services.

* And finally, services are mapped to **channels**. These are what you
and your client software think in terms of: _"I'd like to watch BBC One
now, please"_.

###Why The Complexity?

Simply, because 'BBC One' might exist in many different places... it
might have regional variations on multiple frequencies (so different services
on different muxes); it might exist on more than one source (perhaps on two
different satellites); and it might thus be accessible through more than one
piece of hardware (two satellite tuners, or one satellite and one terrestrial
tuner).

When you select the channel you want to watch or record, Tvheadend can
then map a path through all those variables to ask a particular tuner to
go and get the signal for you.

The following diagram explains the relationship between these components:

![Relationship Between Tuners, Neworks, Muxes, Services and Channels](images/tvh_schematic.png)
82 changes: 82 additions & 0 deletions docs/markdown/features.md
@@ -0,0 +1,82 @@
##Features of Tvheadend

####SDTV and HDTV support
* H.265 (HEVC), H.264 (MPEG-4 AVC) and MPEG2 video supported.
* AC-3, AAC and MP2 audio supported.
* DVB subtitles supported.
* Teletext subtitles supported.

####Input Sources
* Satellite signals via DVB-S and DVB-S2
* Terrestrial/Over-the-Air signals via DVB-T, DVB-T2 and ATSC
* Cable signals via DVB-C
* LAN/IPTV signals such as IPTV, SAT>IP, HDHomeRun
* A general-purpose MPEG-TS `pipe://` for analogue and non-broadcast sources
* Support for multiple adapters of any mix, with each adapter able to
receive simultaneously all programmes on the current mux.
* Powerful many-to-many channel:service:tuner mapping that allows you to select
channels irrespective of the underlying carrier (for channels that broadcast
on multiple sources).

####Output Targets
* Local or remote disk, via the built-in digital video recorder.
* HTSP (Home TV Streaming Protocol).
* HTTP streaming.
* SAT>IP server (including on-the-fly descrambling).

####Transcoding Support
* Subject to your system's capabilities, support for on-the-fly transcoding
for both live and recorded streams
* text
* text

##NOTE: TODO: TEXT REQUIRED

####Digital Video Recorder
* Built in video recorder stores recorded programs as Transport Stream (.ts) or Matroska (.mkv) files.
* Multiple simultaneous recordings are supported.
* All original streams (multiple audio tracks, etc) are recorded.
* Streams can be selected and filtered positively or negatively as required.
* Create rule sets manually or based on EPG queries.
* Multiple DVR profiles that support different target directories, post-processing options, filtering options, etc.

####Electronic Program Guide
* Rich EPG support, with data from DVB/OTA, XMLTV (scheduled and socket).
* Searchable and filterable from the web user interface.
* Results can be scheduled for recording with a single click.

####Rich Browser-Driven Interface
* The entire application is loaded into the browser.
* Based on extJS, all pages are dynamic and self-refreshing.
* All sorting/filtering is then done in C by the main application for speed.

####Easy to Configure and Administer
* All setup and configuration is done from the built in web user interface.
* All settings are stored in human-readable text files.
* Initial setup can be done by choosing one of the pre-defined [linuxtv](http://git.linuxtv.org/cgit.cgi/dtv-scan-tables.git) networks
or manually configured.
* Idle scanning for automatic detection of muxes and services.
* Support for broadcaster (primarily DVB-S) bouquets for easy channel mapping.

####Multi-User Support
* Access to system features (streaming, administration, configurations) can
be configured based on username/password and/or IP address.

####Software-Based CSA Descrambling
* Requires a card server (newcamd and capmt protocol is supported).

####Fully-Integrated with Mainstream Media Players
* Movian and Kodi are the main targets/
* All channel data, channel groups/tages, EPG and TV streaming is carried over a single TCP connection.

####Mobile/Remote Client Support
* As well as the web interface, which is accessible through VPN if required,
third-party clients are available for both
[Android](https://play.google.com/store/apps/details?id=org.tvheadend.tvhclient&hl=en_GB)
and [iOS](https://itunes.apple.com/gb/app/tvhclient/id638900112?mt=8) (other
clients may also be available).

####Internationalisation
* All text is encoded in UTF-8 to provide full international support.
* All major character encodings in DVB are supported (e.g. for localised EPG character sets).
* [Web interface internationalization](https://tvheadend.org/projects/tvheadend/wiki/Internationalization)
72 changes: 72 additions & 0 deletions docs/markdown/install_hardware.md
@@ -0,0 +1,72 @@
##Install Your Tuners

This section will give you some basic ideas on how to get your tuner working
with your operating system. However, it's clearly way beyond the scope of
this guide to tell you everything: consult specialist forums, search around,
and at least do some research to work out what's likely to work or not
before you hand over any money.

There is a discussion about supported hardware on [the Tvheadend
forums](https://tvheadend.org/boards/5/topics/5102).

###1. Install the Tuner Hardware

This is obviously a core requirement that's outside of the scope of this guide.

You basically have the choice of:

* External USB tuners that plug in
* Internal (e.g. PCI) tuners that go inside the computer chassis
* External SAT>IP tuners that send MPEG-TS streams over a LAN connection
* External HDHomeRun tuners that send MPEG-TS streams over a LAN connection

Follow the appropriate installation instructions and, if relevant, the
setup instruction (e.g. for SAT>IP, which are effectively small, standalone
computers).

####A Note on USB Tuners

USB tuners are cheap, work well and are frequently well-matched to physically-smaller
builds (e.g. HTPCs) which simply don't have the internal slots. However, please
remember that many need external power, or need a powered hub to work properly.

In addition, even USB3 doesn't have the greatest practical bandwidth per bus. That
means you're probably asking for problems if you have four DVB-S2 dongles on the same USB
connection to the motherboard.

This is particularly true of systems such as the Raspberry Pi which share USB
bandwidth with the Ethernet port. Don't be surprised if this kind of platform struggles
and/or reports errors in a multi-tuner configuration, especially on
high-bandwidth (e.g. HD) streams.

###2. Install Firmware and/or Drivers

Similar to the above, Tvheadend can do nothing if your tuners aren't working
properly. A good place to check how to set up your tuners is the
[LinuxTV wiki device library](http://www.linuxtv.org/wiki/index.php/Hardware_Device_Information) -
this will not only tell you what's supported under Linux, but also
how to get it all working.

As a broad guide, though, you need two main components: a driver, and firmware.

The **driver** is the piece of software that, as far as the operating system is concerned,
controls the tuner hardware.

Driver software typically comes either built-in to the operating system
(a clue here is documentation that says *"supported since kernel 3.16"*, for example)
or as an external program that needs to be compiled in (e.g. how you'd build TBS'
or Digital Devices drivers, or perhaps where the driver is supported in a later version
of LinuxTV V4L-DVB than has made it to your kernel - the giveaway here is
*"compile and install the latest media_build"*).

Many tuners then also require **firmware** - normally, a binary file that's been
extracted from the proprietary drivers used by Windows.

Many Linux distros include a package for the most common devices (e.g.
*linux-firmwares* under Ubuntu or *firmware-linux-nonfree* under Debian).
If this isn't sufficient, a good source of firmware files is the
[OpenElec firmware library](https://github.com/OpenELEC/dvb-firmware)
on their git repository.

Typically, download the binary file and install it into `/lib/firmware`, owned
by `root:root`, permissions `rw-r--r--` (0644)
25 changes: 25 additions & 0 deletions docs/markdown/install_tvheadend.md
@@ -0,0 +1,25 @@
##Install Tvheadend

This section tells you how to get hold of the software in the first place,
and how to get it onto your system.

###1. Install the Software

Follow the instructions that are specific to your Linux distribution
(Ubuntu/Debian/Mint, Arch, Fedora...). This will typically be PPA-and-dkpg
for Debian, but most other distros will need you to build your own version from source.

* [Debian/Ubuntu installation instructions](https://tvheadend.org/projects/tvheadend/wiki/AptRepository)

* [Instructions on how to build from source](https://tvheadend.org/projects/tvheadend/wiki/Building)

Do not assume that your distro's package manager will give you the latest
version of Tvheadend - indeed, give you any version at all. Always check.

Where a pre-built package exists, this will usually get you the last official
stable version. However, more advanced users may be interested in running
a development version - either a nightly build or a self-compiled version.

##NOTE: TODO: STABLE VS UNSTABLE VS TESTING VS BUILDING FROM MASTER...

##NOTE: TODO: NEED A VIEW ON DREAMCAT'S VERSIONS PLUS A LINK ON HOW-TO-COMPILE
29 changes: 29 additions & 0 deletions docs/markdown/overview.md
@@ -0,0 +1,29 @@
##Overview of Tvheadend

###Welcome to Tvheadend!

Tvheadend is a lightweight, easily-configured, general-purpose TV/video
streaming server and recorder (PVR/DVR) for GNU/Linux, FreeBSD and Android.

![Tvheadend interface](images/overall_screenshot.png)

It supports input from:

* Cable TV, delivered via a cable to your house (DVB-C)
* Satellite, so any signal coming in via a dish (DVB-S and DVB-S2)
* Terrestrial, so over-the-air broadcasts received through a
traditional television aerial (DVB-T and DVB-T2 in much of the world, ATSC
in north and central America)
* Internet and LAN feeds, such as IPTV, SAT>IP, HDHomeRun and a general-purpose
MPEG-TS `pipe://`

As well as being able to record the input, Tvheadend also offers it up to
client applications via HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP
streaming.

While supported in previous versions, analogue video (V4L) is no longer
supported directly. If you still need this, or need to input signals
from video cameras or other non-broadcast sources, use `pipe://`.

The code is hosted at [github](https://github.com/tvheadend/tvheadend).
Please use github's features if you want to provide patches. Contributions and improvements are always welcome.
51 changes: 51 additions & 0 deletions docs/markdown/requirements.md
@@ -0,0 +1,51 @@
##Basic Requirements

###Physical Architecture

It's perfectly possible to install and run Tvheadend as a single-seat installation,
with the software running on the same system as any client software (e.g. Kodi),
with all files stored locally.

Alternatively, you can run Tvheadend on a server, perhaps on an always-on
system that houses your media, perhaps on a dedicated low-power system - it's your choice.

Where you have aerial/coax connections might influence your choice - unless
you use SAT>IP or have some other way to transport your TV signal over a LAN,
your Tvheadend installation has to live where you can actually connect your
tuners.

###System Requirements

Wherever you install it, Tvheadend primarily runs on **Linux** - pre-built
binaries are available for most Debian-based distributions (Debian itself, Ubuntu,
Mint...) and RPMs for Fedora, or you can build it yourself. It runs on both
32- and 64-bit x86 and ARM processors, and so also can be built for Android
(which uses the Linux kernel).

You will only need **c. 30MB disk space** for the application and associated
files, and maybe anything up to **1GB** for your configuration - depending on
how many tuners of what type you have, how many channels you receive, your
choice of programme guide, and so on. You'll clearly need much more for
your recordings, though: as a guide, an hour of SD MPEG-2 video will take
about 1GB, while high bitrate HD H.264 will easily consume 5GB+ per hour.

Tvheadend is intended to be lightweight, so it will run on a NAS or similar
**low-powered CPU**. Note that the exception here is transcoding: if you want
to convert high-definition video in real time then you will need a powerful,
multi-core system. It will happily run in less than **1GB of RAM**, and many
people run it successfully on original Raspberry Pis with perhaps only 256MB
of usable free memory. This does depend on what else you're using the computer
for, though, as a GUI will drain your system as will any serious file serving.

And, of course, you'll need one or more **TV tuners** if you want to receive
regular broadcast television - otherwise, you're limited to IP sources.

An **Internet connection** is recommended but not essential. You need to
have an accurate clock for EPG timers to work, for example, but this can be
synchronised from the broadcast signal if you're not in a position to use
`ntp` or similar.

###How Lightweight?

How about light enough to run on a travel router? Take a look at this
[example](https://tvheadend.org/boards/4/topics/16579) from one of our users...

0 comments on commit 9e7578d

Please sign in to comment.